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

Résolu/Fermé
Messages postés
20
Date d'inscription
mercredi 1 avril 2015
Statut
Membre
Dernière intervention
21 août 2015
-
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
-
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

Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
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
Messages postés
20
Date d'inscription
mercredi 1 avril 2015
Statut
Membre
Dernière intervention
21 août 2015

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
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260 >
Messages postés
20
Date d'inscription
mercredi 1 avril 2015
Statut
Membre
Dernière intervention
21 août 2015

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