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 -
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 :
Je ne sais pas si je suis clair. Je vous remercie d'avance pour votre aide.
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
-
Bonjour
effectivement, pas clair
un exemple de principe qui transfère la base de données source vers la cible les 2 fichiers ouvertspplication.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-
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- 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
-