XL 2013 VBA : copier cellule d'un classeur vers une cellule d'un autre classeur

Yuby

XLDnaute Nouveau
Bonjour,

J'ai un Classeur A avec divers onglets et j'ai refait ce classeur dans un Classeur B en changeant la mise en forme des onglets (Voir pièce jointe). Je souhaite retranscrire par exemple la Cellule B4 de tous les onglets du Classeur A dans la cellule B7 de tous les onglets ayant des noms identiques.
Pour cela, je pense qu'il faut faire une macro avec boucle mais je n'y arrive pas. J'ai pour l'instant relier toutes les info de telle cellule du classeur A allant vers telle cellule du classeur B mais cela pour un seul onglet. Pouvez-vous m'aider pour cette boucle.

Merci.
 

Pièces jointes

  • Classeur A.xlsx
    31 KB · Affichages: 3
  • Classeur B.xlsm
    128.9 KB · Affichages: 2
Solution
Alors mettez les 2 fichiers dans le même dossier et cette macro dans le ThisWorkbook de "Classeur B.xlsm" :
VB:
Private Sub Workbook_Open()
Dim chemin$, fichier$, source$, w As Worksheet
chemin = Me.Path & "\"
fichier = "Classeur A.xlsx"
source = "R4C3" 'C4 en notation R1C1
For Each w In Me.Worksheets
    If w.Name Like "CP#*" Then _
        w.Range("B7") = ExecuteExcel4Macro("'" & chemin & "[" & fichier & "]" & w.Name & "'!" & source)
Next
End Sub
Elle se déclenche quand on ouvre le fichier.

ExecuteExcel4Macro évalue la formule de liaison.

job75

XLDnaute Barbatruc
Alors mettez les 2 fichiers dans le même dossier et cette macro dans le ThisWorkbook de "Classeur B.xlsm" :
VB:
Private Sub Workbook_Open()
Dim chemin$, fichier$, source$, w As Worksheet
chemin = Me.Path & "\"
fichier = "Classeur A.xlsx"
source = "R4C3" 'C4 en notation R1C1
For Each w In Me.Worksheets
    If w.Name Like "CP#*" Then _
        w.Range("B7") = ExecuteExcel4Macro("'" & chemin & "[" & fichier & "]" & w.Name & "'!" & source)
Next
End Sub
Elle se déclenche quand on ouvre le fichier.

ExecuteExcel4Macro évalue la formule de liaison.
 

Yuby

XLDnaute Nouveau
Alors mettez les 2 fichiers dans le même dossier et cette macro dans le ThisWorkbook de "Classeur B.xlsm" :
VB:
Private Sub Workbook_Open()
Dim chemin$, fichier$, source$, w As Worksheet
chemin = Me.Path & "\"
fichier = "Classeur A.xlsx"
source = "R4C3" 'C4 en notation R1C1
For Each w In Me.Worksheets
    If w.Name Like "CP#*" Then _
        w.Range("B7") = ExecuteExcel4Macro("'" & chemin & "[" & fichier & "]" & w.Name & "'!" & source)
Next
End Sub
Elle se déclenche quand on ouvre le fichier.

ExecuteExcel4Macro évalue la formule de liaison.
Bonjour, merci de la réponse,

Je n'ai pas compris la partie
source = "R4C3" 'C4 en notation R1C1
Si c'est possible de m'expliquer. Merci ☺️
 

job75

XLDnaute Barbatruc
Bonjour Yuby, le forum,

Tiré de l'aide Excel sur ExecuteExcel4Macro :
VB:
Fonction de langage macro Microsoft Excel 4.0 sans signe égal. Toutes les références doivent être données en tant que chaînes R1C1.
A+
 

Yuby

XLDnaute Nouveau
Bonjour Yuby, le forum,

Tiré de l'aide Excel sur ExecuteExcel4Macro :
VB:
Fonction de langage macro Microsoft Excel 4.0 sans signe égal. Toutes les références doivent être données en tant que chaînes R1C1.
A+
Ah cela veut dire rangée/colonne !

Merci pour les informations;

Cependant, cela ,ne marche pas. Dans mon fichier de destinations cela me marque #REF.
 

job75

XLDnaute Barbatruc

Pièces jointes

  • Classeur A.xlsx
    31 KB · Affichages: 4
  • Classeur B.xlsm
    112.7 KB · Affichages: 4

Yuby

XLDnaute Nouveau
Bonjour Yuby,

Vous n'avez probablement pas suivi mes instructions, j'ai bien dit :

Testez avec les fichiers joints.

A+
Par contre au niveau source j'aimerai bien écrire une plage de données j'ai donc essayer en mettant source = "R16C2:R30C2" et en mettant la page de destination dans range mais cela ne fonctionne pas. Est ce que vous avez une idée où peut être l'erreur ?
 

job75

XLDnaute Barbatruc
Bonjour Yuby,

Avec une plage on ne peut pas utiliser ExécuteExcel4Macro, il faut entrer une formule (matricielle) :
VB:
Private Sub Workbook_Open()
Dim chemin$, fichier$, source$, w As Worksheet
chemin = Me.Path & "\"
fichier = "Classeur A.xlsx"
source = "B16:B30"
For Each w In Me.Worksheets
    If w.Name Like "CP#*" Then
        w.Range(source).FormulaArray = "='" & chemin & "[" & fichier & "]" & w.Name & "'!" & source 'formule matricielle
        w.Range(source) = w.Range(source).Value 'supprime les formules
        w.Range(source).Replace 0, "", xlWhole 'efface les valeurs zéro
    End If
Next
End Sub
A+
 

Yuby

XLDnaute Nouveau
Bonjour Yuby,

Avec une plage on ne peut pas utiliser ExécuteExcel4Macro, il faut entrer une formule (matricielle) :
VB:
Private Sub Workbook_Open()
Dim chemin$, fichier$, source$, w As Worksheet
chemin = Me.Path & "\"
fichier = "Classeur A.xlsx"
source = "B16:B30"
For Each w In Me.Worksheets
    If w.Name Like "CP#*" Then
        w.Range(source).FormulaArray = "='" & chemin & "[" & fichier & "]" & w.Name & "'!" & source 'formule matricielle
        w.Range(source) = w.Range(source).Value 'supprime les formules
        w.Range(source).Replace 0, "", xlWhole 'efface les valeurs zéro
    End If
Next
End Sub
A+
Merci beaucoup. Je suis désolée j'ai encore une question.
Sauf erreur de ma part on ne met nul part la destination ?
 

Yuby

XLDnaute Nouveau
Sans info de votre part, au post #11 j'ai considéré que la destination a la même adresse que la source.
Bonjour,

Je voulais que la plage de données D13 : D30 du classeur A se copie dans le classeur B sur la plage B16:B33.
J'ai donc remplaçé la ligne source par D13 : D30 et en changeant les trois ligne w.Range(source) en w.Range(B16:B33) mais cela fonctionne !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 995
Membres
103 082
dernier inscrit
adri77