VBA:Sélectionner 2ème classeur ouvert ou un cl. au nom variable [Résolu/Fermé]

Signaler
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013
-
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013
-
Bonjour,

Dans un code VBA, je cherche un moyen de sélectionner l'autre classeur ouvert, le nom pouvant varier. Quelqu'un connait-il un code?

A défaut, sauriez-vous comment sélectionner un classeur ouvert dont une partie du nom varie?

Exemple: mon classeur s'appelle été_indien mais je peux aussi en avoir ouvert un qui s'appelle été_maltais, été_bangladais, été_comorrien...

j'ai essayé Windows("été_" & "*").Activate mais cela ne fonctionne pas.


Merci d'avance pour vos réponses.

3 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 599
Bonjour,

Tu peux :
1- boucler sur tous les classeurs ouverts
2- tester chaque nom de classeur...

Comme ceci :
Sub Boucle()
Dim Wbk As Workbook
    
For Each Wbk In Application.Workbooks
    If Left(Wbk.Name, 4) = "été_" Then
        Wbk.Activate
        Exit For
    End If
Next Wbk
End Sub


Et, dans l'idéal, pour pouvoir passer d'un classeur à l'autre, il convient de :
1- affecter le 1er classeur à une variable,
2- sélectionner le 2ème
3- l'affecter à une autre variable.
Dans le style :

Sub ChoixClasseurs()
Dim Wbk As Workbook
Dim ClasseurSource As Workbook
Dim ClasseurDest As Workbook

Set ClasseurSource = ThisWorkbook
For Each Wbk In Application.Workbooks
    If Left(Wbk.Name, 4) = "été_" Then
        Set ClasseurDest = Wbk
        ClasseurDest.Activate
        Exit For
    End If
Next Wbk
End Sub


NB : je n'ai pas testé ces codes, ils ne devraient pas être trop loin de la réalité...
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

En fait, je n'arrive pas à m'en servir. Où mettre un code qui part du classeur "été_" et qui va dans l'autre?
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 599
Décris nous exactement ce que tu veux faire......

De ce que tu nous dis : Où mettre un code qui part du classeur "été_" et qui va dans l'autre?
La réponse est : dans un module du classeur "été_".
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

D'accord en fait, je veux si possible dans un même code:

1 - Copier et coller les données du 2ème onglet (onglet "vélo") et du 3ème (onglet "voiture") du classeur "été_XXX" dans les onglets "écolo" et "polluante" d'un classeur "CO2". Les noms des onglets du classeur "été_" et le nom du classeur ne variant que pour sa partie après "été_" tandis que les noms du classeur "Arrivée" ne varie pas du tout.


Pour cela, j'utilise pour l'instant:

Sub Copie_colle_les_donnees_passees_vers_le_nouveau_classeur()

'
Sheets("vélo").Select
Cells.Select
Selection.Copy
Windows("CO2.xlsx").Activate
Sheets("écolo").Select
Range("A1").Select
ActiveSheet.Paste

Windows("été_XXX").Activate
Sheets("voiture").Select
Cells.Select
Selection.Copy
Windows("CO2.xlsx").Activate
Sheets("polluante").Select
Range("A1").Select
ActiveSheet.Paste

End Sub



2 - Dans le classeur "CO2", renommer les onglets "écolo" et "polluante" en "vélo_écolo" et "voiture_polluante"

Pour cela, j'utilise un code de changement de noms en nommant mon classeur:

nom_du_classeur = ActiveWorkbook.Name

Les deux codes fonctionnent bien.



J'aimerais maintenant lier ces deux codes, en donnant un nom à mon classeur "été_XXX" car je fais ce même travail pour différents classeurs de noms "été_001" "été_002" etc... donc je ne souhaite pas retourner dans le code à chaque fois pour modifier "été_XXX".

Désolé pour la longueur de mon message
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

En fait, tout le problème est de savoir jongler entre deux classeurs dans une même macro en sachant que l'un des deux a une partie de nom variable (la partie après été_)
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

Te prends pas la tête, je vais faire un CTR+F dans le code à chaque fois et puis ça ira.

Merci de ton aide
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 599
Le truc alors, c'est de ne pas activer ni sélectionner le classeur...

Remplace :
Sub Copie_colle_les_donnees_passees_vers_le_nouveau_classeur()

'
Sheets("vélo").Select
Cells.Select
Selection.Copy
Windows("CO2.xlsx").Activate
Sheets("écolo").Select
Range("A1").Select
ActiveSheet.Paste

Windows("été_XXX").Activate
Sheets("voiture").Select
Cells.Select
Selection.Copy
Windows("CO2.xlsx").Activate
Sheets("polluante").Select
Range("A1").Select
ActiveSheet.Paste

End Sub 

Par :

Sub Copie_colle_les_donnees_passees_vers_le_nouveau_classeur()
Dim Wbk As Workbook
    
For Each Wbk In Application.Workbooks
    If Left(Wbk.Name, 4) = "été_" Then Exit For
Next Wbk
'ICI Wbk est notre classeur "été_". Donc :
Wbk.Sheets("vélo").Range("A1:AZ10000").Copy Workbooks("CO2.xlsx").Sheets("écolo").Range("A1")
Wbk.Sheets("voiture").Range("A1:AZ10000").Copy Workbooks("CO2.xlsx").Sheets("polluante").Range("A1")
End Sub
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

Merci, J'ai essayé mais je reçois une erreur:

"Variable objet ou variable de bloc With non définie"
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

Sur le classeur "été_XXX"
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 599
Salut,
1- vérifie bien les orthographes des noms de classeurs et des feuilles...
2- Essaye :
Sub Copie_colle_les_donnees_passees_vers_le_nouveau_classeur()
Dim Wbk As Workbook
    
For Each Wbk In Application.Workbooks
    If Left(Wbk.Name, 4) = "été_" Then
        Wbk.Activate
        Exit For
    End If
Next Wbk
'ICI Wbk est notre classeur "été_". Donc :
With Workbooks("CO2.xlsx")
Wbk.Sheets("vélo").Range("A1:AZ10000").Copy .Sheets("écolo").Range("A1")
Wbk.Sheets("voiture").Range("A1:AZ10000").Copy .Sheets("polluante").Range("A1")
End With
End Sub
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

Erreur: Objet requis

Ce n'est pas grave, j'ai trouvé un autre moyen.

Merci pour ton aide.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 599
j'ai trouvé un autre moyen.

Par curiosité, quel est-il?
Messages postés
40
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
5 juillet 2013

Je me suis servi du nom de classeur comme pivot.
Je fixe ce nom et du coup je peux basculer entre les classeurs sans problème pusique l'autre nom de classeur ne varie pas.