|
Le code généré
Sub TransfertBdd()
' TransfertBdd Macro
' Macro enregistrée le 06/09/2005 par Delenne Xavier
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Workbooks.Open Filename:="F:\Pratique Excel VBA\Orders.dbf"
Selection.End(xlDown).Select
Range("A3301").Select
ActiveSheet.Paste
ActiveWindow.Close
Application.CutCopyMode = False
Sheets("Ord9711").Select
ActiveWindow.SelectedSheets.Delete
End Sub
Explications des nouveautés:
- Workbooks.Open Filename:="F:\Pratique Excel VBA\Orders.dbf" : Ouverture d'un fichier excel, ne pas confondre la méthode Open et OpenText déjà vu pour l'importation
- Selection.End(xlDown).Select: Le méthode End(xlDown) permet d'aller à la fin vers le bas (Ctrl +fleche bas) , aller voir dans l'aide, les 4 fleches existent (xldown, xlright,xlleft,xlup)
- Nous avons déjà rencontré les autres instructions dans d'autres macros de l'application
Les modifications à prévoir
Dans le code nous pouvons remarque que le "coller" se fait à partir de la cellule "A3301",
hors si c'est bien le cas ce mois ci, le mois prochain il y aura les lignes collées ce mois-ci et
donc l'adresse aura changé. Il faut donc pouvoir coller une ligne plus bas que la fin du tableau.
Nous allons créer une macro permettant de récupérer une ligne de code par copier/coller.
- Dans "importation.xls" demarrez l'enregistrement d'une nouvelle macro, laissez le nom par défaut (macrox)
- Sur la mini-barre d'outil "Arrêt" au milieu du classeur
,
vous avez un bouton "Référence relative"
- Cliquez une fois dessus (c'est un bouton marche/arrêt), il reste "activé"
- appuyez une fois sur flèche bas"
- cliquez sur "référence relative" pour arrêter ce mode
- Arrêtez l'enregistrement de la macro
Vous obtenez ce code dans votre éditeur
Sub Macro4()
'
' Macro4 Macro
' Macro enregistrée le 07/09/2005 par Delenne Xavier
'
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Copier la ligne : ActiveCell.Offset(1, 0).Range("A1").Select
Ensuite collez cette ligne à la place de l'instruction Range("A3301").select
Effacer ensuite la macro provisoire (dans mon exemple Macro4()) de Sub à End Sub inclus
Il ne faut pas laisser (pour des raisons de sécurité de l'application) le choix à l'utilisateur final
(vous, vous êtes le concepteur ou le programmeur) d'effecteur la sauvegarde ou non et de confirmer la suppression
de la feuille importée (boite de dialogue). De plus tous les mois le nom de la feuille change, il faut
aussi corriger ça.
Placez-vous à la fin de l'instruction : ActiveWindow.Close et appuyez sur la touche espace,
une infobulle apparaît (c'est ce qu'on appelle "l'intellisense") qui vous donne la syntaxe de la méthode close :
saisir le paramètre de la méthode Close SaveChanges:=False (ne pas sauvegarder car
nous sommes en phase de création/mise au point et nous risquerions
de "polluer" la base de données de stockage par de multiples copier/coller des mêmes données),
il va de soi que lors de la livraison finale, la sauvegarde devra se faire et donc nous mettrons
cette méthode à True avant de livrer. Nous mettons donc un commentaire (cf code final) en majuscule pour ne pas oublier
de le faire).
Nous allons aussi arrêter l'affichage des boites de dialogue pour ne pas avoir à confirmer
la suppression de la feuille, mais cet arrêt concerne toutes les boites d'alerte, y compris la gestion
d'erreur, il faudra donc les remettre en route dès que possible.
Nous insérons une ligne avant la supression et saisisssons le code suivant :
Application.DisplayAlerts = False
et nous insérons juste après la suppression l'instruction contraire soit :
Application.DisplayAlerts = True
Nous supprimons la ligne de selection de "Ord9711", il suffit de supprimer la feuille active.
Le code final de la macro
Sub TransfertBdd()
' TransfertBdd Macro
' Macro enregistrée le 07/09/2005 par Delenne Xavier
' Supression de la ligne de titre
Rows("1:1").Delete Shift:=xlUp
' Copie de tous le tableau avant transfert
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
' ouverture de la base de données "Orders.dbf"
Workbooks.Open Filename:="F:\Pratique Excel VBA\Orders.dbf"
' Se positionner à la fin de la colonne
Selection.End(xlDown).Select
' avancer d'une ligne et 0 colonne
' (attention vous devez toujours avoir range("A1") comme référence
' où que vous soyez dans le tableau
ActiveCell.Offset(1, 0).Range("A1").Select
' coller
ActiveSheet.Paste
' fermer le fichier en cours (orders.dbf)
' notez que l'affectation d'une méthode se fait avec :=
' NE PAS OUBLIER DE METTRE "SaveChanges" à TRUE A LA LIVRAISON
ActiveWindow.Close SaveChanges:=False
' sortie du mode copier dans Importation.xls
Application.CutCopyMode = False
' Arrêt des boites d'alerte
Application.DisplayAlerts = False
' effacement de la feuille active
ActiveSheet.Delete
' remise en route boites d'alerte
Application.DisplayAlerts = True
End Sub
|