Copier cellule classeur "A" vers classeur B dont le nom change

Bonjour à toutes et tous,

Je vous écris car je bloque depuis quelques jours sur une macro toute bête...

J'ai créé une macro qui copie la valeur d'une cellule d'un classeur "A" pour la coller dans une cellule d'un autre classeur "B". Pas de problèmes jusque là. Cependant, le classeur de destination peut changer de nom à chaque fois.

Existe-t-il une fonction permettant ,quand on active la macro depuis le classeur"A" , de sélectionner le classeur "B" (préalablement ouvert) peu importe son nom ? Cela marche-t-il si plus de 2 classeurs sont ouverts ?

Mes questions ne sont peut-être pas très claires mais je suis novice en la matière...

Merci de votre aide !

Bonjour Nottify, bonjour le forum,

Un fichier exemple ou à défaut le code que tu as créé serait le bienvenu (comme toi)...
On ne copie pas d'un classeur vers un autre classeur mais d'un onglet d'un classeur source vers un onglet d'un classeur destination ! Il faut donc pouvoir choisir le classeur et l'onglet de ce classeur... À moins que ce soit toujours le premier (c'est pour ça que ton code nous aurait aidé).

Bonjour ThauThème,

Merci pour le message et ces explications.

Je n'ai pas le fichier original sous la main mais voici un fichier avec l'idée principale.

Le fichier test1 est le fichier à partir duquel je souhaite copier la valeur d'une cellule dans le fichier test2 (indépendamment de son nom si possible).

J'imagine que c'est à la ligne Windows("test2.xlsx").Activate que cela coince mais malgré mes recherches je n'ai pas trouvé de réponses.

image
13test2.xlsx (7.75 Ko)
10test1.xlsm (16.19 Ko)

Re,

Essaie comme ça :

Sub TEST()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim I As Byte 'déclare la variable I (Incrément)
Dim TEST As Boolean 'déclare la variable TEST

Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
For I = 1 To Workbooks.Count 'boucle sur tous les classeurs ouverts
    If Workbooks(I).Name <> CS.Name Then 'condition 1 : si le classeur de la boucle n'est pas ce classeur
        If MsgBox("Choisir le fichier " & Workbooks(I).Name, vbYesNo) = vbYes Then 'condition 2 : si "Oui" au message
            Set CD = Workbooks(I) 'définit le classeur destination CD
            Set OD = CD.Worksheets(1) 'définit l'onglet destination
            TEST = True 'définit la variable TEST
            Exit For 'sort de la boucle
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochain classeur de la boucle
If TEST = False Then Exit Sub 'si TEST est [Faux] sort de la procédure
OS.Range("C5").Copy OD.Range("B13") 'copie la cellule C5 de l'onglet source et la copie dans B13 de l'onglet destination
MsgBox "La copie e été effectuée !" 'message
End Sub

Si tu as beaucoup trop de classeurs ouverts, il vaudra mieux passer par une UserForm...

Re ThauThème,

Je suis impressionné par ton code ! Merci beaucoup pour les explications de chaque ligne, c'est très gentil et ça m'aidera pour m'en inspirer.

En regardant ton code, je me demandais s'il était possible de faire également une variante sans msgbox ? Dans le cas où seul le classeur source et le classeur destination sont ouverts, est-il possible de détecter automatiquement le classeur destination et lancer la copie de cellule sans passer par msgbox ?

Peux-tu m'aiguiller vers la réponse si faisable ?

En te remerciant grandement,

Re,

Perso j'utilise des macros utilisables pour tous les fichiers. Ces macros sont stockées dans un classeur nommé Personal.xlsb. Ce classeur n'est pas visible mais il fait néanmoins partie de la liste des classeurs ouverts. Cela m'empêche de faire ce que tu demandes chez moi.
Toutefois voici le code modifié. Il n'y aura les messages que si plus de deux classeurs sont ouverts :

Sub Copie()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim I As Byte 'déclare la variable I (Incrément)
Dim TEST As Boolean 'déclare la variable TEST

Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets(1) 'définit l'onglet source OS
Select Case Workbooks.Count 'agit en fonction du nombre de classeurs ouverts
    Case 2
        For I = 1 To Workbooks.Count 'boucle sur tous les classeurs ouverts
            If Workbooks(I).Name <> CS.Name Then 'condition 1 : si le classeur de la boucle n'est pas ce classeur
                Set CD = Workbooks(I) 'définit le classeur destination CD
                Set OD = CD.Worksheets(1) 'définit l'onglet destination
                TEST = True
                Exit For 'sort de la boucle
            End If 'fin de la condition 1
        Next I
    Case Is > 2
        For I = 1 To Workbooks.Count 'boucle sur tous les classeurs ouverts
            If Workbooks(I).Name <> CS.Name Then 'condition 1 : si le classeur de la boucle n'est pas ce classeur
                If MsgBox("Choisir le fichier " & Workbooks(I).Name, vbYesNo) = vbYes Then 'condition 2 : si "Oui" au message
                    Set CD = Workbooks(I) 'définit le classeur destination CD
                    Set OD = CD.Worksheets(1) 'définit l'onglet destination
                    TEST = True 'définit la variable TEST
                    Exit For 'sort de la boucle
                End If 'fin de la condition 2
            End If 'fin de la condition 1
        Next I 'prochain classeur de la boucleOS.Range("C5").Copy OD.Range("B13") 'copie la cellule C5 de l'onglet source et la copie dans B13 de l'onglet destination
End Select 'fin de l'action en fonction du nombre de classeurs ouverts
If TEST = False Then Exit Sub 'si TEST est [Faux] sort de la procédure
OS.Range("C5").Copy OD.Range("B13") 'copie la cellule C5 de l'onglet source et la copie dans B13 de l'onglet destination
MsgBox "La copie e été effectuée !" 'message
End Sub

Re ThauThème,

Que puis-je dire de plus à part un grand Merci !

Je vais potasser ça pour l'adapter à mon fichier.

Encore merci.

Rechercher des sujets similaires à "copier classeur nom change"