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.

3 réponses

  1. Modérateur
    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
    1. 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
    2. Modérateur
      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
    3. Merci pour ces éclaircissements.

      Joyeux été!
      0
    4. En fait, je n'arrive pas à m'en servir. Où mettre un code qui part du classeur "été_" et qui va dans l'autre?
      0
    5. Modérateur
      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é_".
      0