VBA:Sélectionner 2ème classeur ouvert ou un cl. au nom variable
Résolu
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.
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
-
ModérateurBonjour,
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é...-
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 -
Modérateurde 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/ -
-
-
-