VBA- Copier un tableau d'un fichier A à l'ouverture du B

Résolu
howiz Messages postés 21 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaite copier le tableau d'un fichier A (fichier source), à l'ouverture de mon fichier B, le tout sans utiliser de select qui provoquent des bugs.

J'ai deux bases de données, BD_entreprises, BD_DO3. Je souhaite que dès que j'ouvre mon fichier "plan de prévention", les bases de données de ce fichier se mettent à jour à partir du fichier source. (Je ne veux pas que les utilisateurs travaillent sur le fichier source)

Voici mon code actuellement :

    
Private Sub Workbook_Open()
Workbooks.Open Filename:= _
"F:\...."
Application.Goto Reference:="BD_Entreprise"
Selection.Copy
Windows("Plan de prevention.xlsm").Activate
Application.Goto Reference:="BD_Entreprise"
Windows("Fichier source - Plan de prevention.xlsm").Activate
Application.Goto Reference:="BD_DO3"
Selection.Copy
ActiveWindow.Close
Windows("Plan de prevention.xlsm").Activate
Application.Goto Reference:="BD_DO3"
Sheets("Utilisation de ce fichier").Select
End Sub


Je ne sais pas si je suis clair. Je vous remercie d'avance pour votre aide.

1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    effectivement, pas clair

    un exemple de principe qui transfère la base de données source vers la cible les 2 fichiers ouverts
    pplication.ScreenUpdating = False
    With Workbooks("fichiersource.xls")
    tableau = Range("basesource")
    End With

    With Workbooks("fichiercible.xls").Sheets(1)
    With Range("labasecible")
    .Clear
    .Value = tableau
    End With
    .Activate
    End With


    le princioe est de mémoriser la base source, nettoyer la cible, restituer à l'endroit de la base cible la base source
    mais comme on ne sait rien de ta base source (nombre de colonne), taille de la base nommée cible, cellule en haut et à gauche du premier élément de base cible... il y a des probas que ca plante
    Michel
    2
    1. howiz Messages postés 21 Statut Membre
       
      Bonjour Michel,

      Merci pour votre réponse. J'ai trouvé une solution qui à l'air de fonctionner :

      Workbooks.Open Filename:= _
      "F:\... mon fichier source"

      'dans ce fichier source, je copie mon premier tableau (base de donnée entreprise) ; c'est un tableau sans formule, juste des données (4 colonnes, x lignes, car on peut ajouter des entreprises)
      'ensuite je le colle dans l'endroit voulu de mon fichier

      Sheets("Entreprises").Range("BD_Entreprise").Copy Workbooks("Plan de prevention.xlsm").Worksheets("Entreprises").Range("A2")

      'je fais de même pour ma deuxième base de donnée (tableau BD_DO3) ; c'est un tableau sans formule, juste des données (12 colonnes, x lignes, car on peut ajouter des entreprises)

      Workbooks("Fichier source - Plan de prevention.xlsm").Worksheets("Liste DO").Range("BD_DO3").Copy Workbooks("Plan de prevention.xlsm").Worksheets("Liste DO").Range("B5")

      'enfin je ferme l'Excel source

      Workbooks("Fichier source - Plan de prevention.xlsm").Close

      'je reviens à mon Excel

      Workbooks("Plan de prevention.xlsm").Activate


      Pensez vous que c'est viable ?
      Merci
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > howiz Messages postés 21 Statut Membre
         
        a toi de voir et d'essayer les 2 méthodes !!!
        comme c'est un peu plus précis
        pas besoin de "copy"

          With Workbooks("Plan de prevention.xlsm").Worksheets("Entreprises")
        .range("A2:D" & 10000).clear
        .Range("A2").resize(ubound(tableau),4)=tableau
        .activate
        end with

        il faut nettoyer la cible car si tu peux ajouter des entreprises---> tu peux aussi en supprimer et ta cible garde la fin de son ancienne apparence
        0