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

Résolu/Fermé
howiz Messages postés 20 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 21 août 2015 - 29 juin 2015 à 13:34
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 juin 2015 à 15:23
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.
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 29/06/2015 à 14:56
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
howiz Messages postés 20 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 21 août 2015
Modifié par howiz le 29/06/2015 à 15:14
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > howiz Messages postés 20 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 21 août 2015
Modifié par michel_m le 29/06/2015 à 15:25
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