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

Résolu/Fermé
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 - 20 août 2009 à 15:49
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 21 août 2009 à 18:44
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.
A voir également:

10 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
20 août 2009 à 16:55
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
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 7
20 août 2009 à 17:26
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
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
20 août 2009 à 21:03
Bonjour,
C'est ou que cela ne fonctionne pas ?
0
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 7
20 août 2009 à 21:35
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
20 août 2009 à 22:56
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
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 7
21 août 2009 à 12:41
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 août 2009 à 12:59
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
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 7
21 août 2009 à 13:21
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 août 2009 à 13:24
hum hum euh Et Polux et pingu ils puent du c_l ???
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
21 août 2009 à 14:18
Bonjour pijaku,
Je ne sais pas se qu'il faut penser de votre message ..... c'est pas bien beau.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024
21 août 2009 à 15:06
Bonjour,
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
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
21 août 2009 à 15:22
Merci pijaku.
Au fait, c'est ou chez vous ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024
21 août 2009 à 15:43
Et 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
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
21 août 2009 à 18:44
Merci pijaku, c'est parfait, en plus il y a le profil.
A une prochaine.
0
Arn's Messages postés 23 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 26 août 2009 7
21 août 2009 à 13:31
Non, c'est vrai. Merci à eux aussi.
0