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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
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.
 
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 ☺️
 
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+
 
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.
 

Pièces jointes

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 ?
 
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+
 
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 ?
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour