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

Résolu
Alem13 Messages postés 44 Statut Membre -  
Alem13 Messages postés 44 Statut Membre -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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. Alem13 Messages postés 44 Statut Membre
       
      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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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