[Excel] Macro : consolider 2 fich. en param.

Résolu
Bonjour à tous,

Je cherche à consolider deux fichiers (plus exactement : les 3 premières colonnes de la troisième feuille de chaque fichier, mais peu importe) par l'intermédiaire d'une macro. Ne connaissant pas a priori le nom de ces deux fichiers, je demande à l'utilisateur de les choisir :

Classeur1 = Application.GetOpenFilename("Classeurs Excel,*.xls")
If Classeur1 = False Then Exit Sub
Classeur2 = Application.GetOpenFilename("Classeurs Excel,*.xls")
If Classeur2 = False Then Exit Sub


J'aimerais passer ces noms de fichiers, que je ne connais pas, en argument à la fonction consolidate. (J'ai conscience que mon vocabulaire n'est pas le bon.)

En fait, j'aimerais que, dans le bout de code suivant, les variables "Classeur1" et "Classeur2" soient interprétées, et remplacées par le nom de fichier qui correspond :

Workbooks.Open fileName:= _
        "U:\MonChemin\Synth.xls"
'(C'est le fichier de synthèse dans le quel je veux faire ma consolidation.)

Selection.Consolidate Sources:=Array( _
        "'U:\MonChemin\[Classeur1]Feuil3'!A:C" _
        , _
        "'U:\MonChemin\[Classeur2]Feuil3'!A:C" _
        ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

Je suppose que c'est simplement une question de syntaxe.

Merci d'avance pour vos réponses.

10 réponses

  1. Bonjour,

    En déclarant Classeur1 et Classeur2 en variables globales du module, elles peuvent être utilisées par toutes les fonctions du module.

    ;o)
    0
    1. Elles sont déjà déclarées en variables globales. Je pense que ce n'est pas le problème.

      Je me suis mal exprimé, Consolidate est une méthode, et pas une fonction.
      Je veux simplement consolider deux fichiers dont je ne connais pas le nom.

      Ces deux noms sont stockés dans deux variables : "Classeur1" et "Classeur2".

      En plus, "Classeur1" et "Classeur2" contiennent le chemin absolu (U:\MonChemin\Fichier1]), et pas le chemin relatif (Fichier1).

      N'hésitez pas à me poser des questions si vous ne comprenez pas.
      0
      1. Bonjour,
        C'est ou que cela ne fonctionne pas ?
        0
        1. A l'exécution de ce code :

          Selection.Consolidate Sources:=Array( _
                  "'U:\MonChemin\[Classeur1]Feuil3'!A:C" _
                  , _
                  "'U:\MonChemin\[Classeur2]Feuil3'!A:C" _
                  ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False


          J'obtiens un message d'erreur : impossible d'ouvrir le fichier. (C'est normal, il s'agit de chemins absolus.)
          Mais, même s'il s'agissait de chemins relatifs, est-ce la bonne syntaxe pour intégrer dans ces lignes des variables qui contiennent chacune un nom de fichier ?
          0
          1. Bonjour,
            J'ai un sérieux doute car la fonction Cosolidate est utiliser pour consolider les données, en utilisant la fonction SUM.; alors que vous voulez intégrer un nom de fichier ?
            0
            1. Oui, Consolidate permet de consolider des données. Ces données sont contenues dans les deux classeurs que je veux manipuler.
              Si je savais à l'avance comment s'appellent ces deux classeurs (Fichier1.xls et Fichier2.xls, par exemple), j'aurais écrit ceci :

              Selection.Consolidate Sources:=Array( _
                      "'U:\MonChemin\[Fichier1.xls]Feuil3'!A:C" _
                      , _
                      "'U:\MonChemin\[Fichier2.xls]Feuil3'!A:C" _
                      ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False


              Mais je voudrais remplacer dans le code ci-dessus Fichier1.xls et Fichier2.xls par des variables qui contiennent les noms des fichiers désirés.

              Comment faire ?
              0
              1. Modérateur
                Salut,
                Je n'ai pas testé... Peut être ouvrir les fichiers avant de lancer cette procédure.
                Dim NOMFICH As String, CHEMIN1 As String
                CHEMIN1 = "U:\MonChemin\"
                NOMFICH = CHEMIN1 & classeur1
                Workbooks.Open Filename:=NOMFICH
                NOMFICH = CHEMIN1 & classeur2
                Workbooks.Open Filename:=NOMFICH
                Windows("nom_du_fichier_qui_contient_ta_macro").Activate
                Workbooks.Open fileName:= _
                "U:\MonChemin\Synth.xls"
                '(C'est le fichier de synthèse dans le quel je veux faire ma consolidation.)

                Selection.Consolidate Sources:=Array( _
                "'U:\MonChemin\[Classeur1]Feuil3'!A:C" _
                , _
                "'U:\MonChemin\[Classeur2]Feuil3'!A:C" _
                ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
                0
                1. Nan, en fait je viens de comprendre ce qui n'allait pas (ça fait un bout de temps que je suis dessus) :

                  Dans ce bout de code :
                  Selection.Consolidate Sources:=Array( _
                          "'U:\MonChemin\[Classeur1]Feuil3'!A:C" _
                          , _
                          "'U:\MonChemin\[Classeur2]Feuil3'!A:C" _
                          ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

                  Il fallait d'une part, pour interpréter les variables, écrire :
                  Selection.Consolidate Sources:=Array( _
                          "'U:\MonChemin\[" & Classeur1 & "]Feuil3'!A:C" _
                          , _
                          "'U:\MonChemin\[" & Classeur2 & "]Feuil3'!A:C" _
                          ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

                  (avec des guillemets et des & au bon endroit, ce qui est loin d'être évident.)
                  Et d'autre part, écrire C1:C3 pour dire que je voulais les trois premières colonnes, au lieu de A:C :
                  Selection.Consolidate Sources:=Array( _
                          "'U:\MonChemin\[" & Classeur1 & "]Feuil3'!C1:C3" _
                          , _
                          "'U:\MonChemin\[" & Classeur2 & "]Feuil3'!C1:C3" _
                          ), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

                  Merci de t'être penché sur mon problème, en tous cas. (Une fois de plus.)
                  Même si ce n'est pas toi qui m'a apporté la solution, je trouve ça vraiment sympa d'aider les gens comme ça, j'admire.
                  0
                  1. Modérateur
                    hum hum euh Et Polux et pingu ils puent du c_l ???
                    0
                    1. Bonjour pijaku,
                      Je ne sais pas se qu'il faut penser de votre message ..... c'est pas bien beau.
                      0
                    2. Modérateur
                      @Le PingouBonjour,
                      Il ne faut surtout rien penser de mal, je faisais juste remarquer qu'il m'avait remercié mais vous avait oublié tous les 2. Il a d'ailleurs rectifier cet oubli.
                      C'est pas très poli, mais chez nous c'est tombé dans le langage familier.
                      Excuse moi si je t'ai offensé d'une quelconque manière, ça partait en tous cas d'un bon sentiment.
                      0
                    3. @pijakuMerci pijaku.
                      Au fait, c'est ou chez vous ?
                      0
                    4. Modérateur
                      @Le PingouEt voilà, on y vient... Après cette histoire nous allons encore passer pour des demeurés...(je plaisante) Je suis du Pas de Calais!!!
                      Bon continuons, s'il le faut, en MP avant de se faire gronder...
                      0
                    5. @pijakuMerci pijaku, c'est parfait, en plus il y a le profil.
                      A une prochaine.
                      0
                  2. Non, c'est vrai. Merci à eux aussi.
                    0