VBA:Sélectionner 2ème classeur ouvert ou un cl. au nom variable

Résolu/Fermé
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013 - 1 juil. 2013 à 16:03
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013 - 4 juil. 2013 à 10:19
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
1 juil. 2013 à 16:12
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é...
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
2 juil. 2013 à 09:42
Merci pour ta réponse.

Ta 1ère solution fonctionne en effet mais n'y a-t-il pas un moyen plus simple en utilisant qch du type "Windows("été_" & "*").Activate "? A l'utilistation de la macro, il n'y a que deux classeurs ouverts et un seul de type "été_".

Pour la 2ème, est-ce que les noms ClasseurDest et ClasseurSource sont mémorisés pour d'autres Sub? Je ne parviens pas à l'utiliser ailleurs. As-tu des solutions pour cela?

Merci pour tout
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
2 juil. 2013 à 09:59
de rien.

1- non je ne connais rien de plus simple. En même temps :
- ça limite les risques d'erreurs pour le cas ou ton fichier été_ n'est pas ouvert
- si tu n'as que 2 classeurs ouverts, il n'y a aucune perte de temps...

2- Pour utiliser une variable dans d'autres procédures (Sub), il faut en changer la portée.
Une variable peut avoir trois type de portée :
- au niveau de la procédure et seulement de la procédure. On la déclare comme ceci :
Sub Machin()
Dim maVar As String
'blabla
End Sub

- au niveau du module et seulement de ce module :
Dim maVar As Integer

Sub essai()
Call Affectation
Call Multipli
MsgBox maVar
End Sub

Sub Affectation()
maVar = 12
End Sub

Sub Multipli()
maVar = maVar * 10
End Sub

-au niveau de tous les modules du classeur :
En entête d'un module standard :
Public maVar As Double

dans ce cas, maVar sera accessible de toutes tes procédures, dans tous les modules du classeur...

Un lien sur les variables : https://silkyroad.developpez.com/VBA/LesVariables/
0