| Accueil | Forums | Bureautique | Développement | SGBD |
  Leçons Niveau 3
 
  Autres Niveau Excel
 
 
  La macro "TransfertBdd" - Le code
 

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.

    1. Dans "importation.xls" demarrez l'enregistrement d'une nouvelle macro, laissez le nom par défaut (macrox)
    2. Sur la mini-barre d'outil "Arrêt" au milieu du classeur , vous avez un bouton "Référence relative"
    3. Cliquez une fois dessus (c'est un bouton marche/arrêt), il reste "activé"
    4. appuyez une fois sur flèche bas"
    5. cliquez sur "référence relative" pour arrêter ce mode
    6. 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

     

  •  
    2005 Copyright Ephicom