Macro moyenne à partir de fichiers sources

sircroco

XLDnaute Nouveau
Bonsoir,

J'espère que vous allez bien,
J'ai besoin de votre aide pour une simple macro dans le fichier conso moyenne qui fait la moyenne des consommations des trois fichiers sources en fonction de la référence (fonction recherche sûrement à intégrer, j'ai éparpillé exprès les références dans le fichier "conso moyenne").
En gros, on clique sur le bouton, on choisit nos 3 fichiers sources mois 1, mois 2 et mois 3, et cela nous donne au final la consommation moyenne (ou totale si c'est difficile pour vous) des trois mois.

Les fichiers sont en PJ, vous allez très vite comprendre ce que je souhaite.

Je vous adresse mes meilleurs salutations, bon réveillon !
 

Pièces jointes

  • macro Conso moyenne des 3 mois.xlsm
    15.5 KB · Affichages: 10
  • source mois 1.xlsx
    9.3 KB · Affichages: 9
  • source mois 2.xlsx
    9.3 KB · Affichages: 8
  • source mois 3.xlsx
    9.3 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour sircroco, le forum,

Pas besoin de macro, c'est un problème classique avec des formules de liaison.

Ouvrez les 4 fichiers joints et en C2 du fichier des moyennes entrez cette formule :
Code:
=(RECHERCHEV(B2;'[source mois 1.xlsx]Feuil1'!$B$4:$E$1000;4;0)+RECHERCHEV(B2;'[source mois 2.xlsx]Feuil1'!$B$4:$E$1000;4;0)+RECHERCHEV(B2;'[source mois 3.xlsx]Feuil1'!$B$4:$E$1000;4;0))/3
Vous pouvez ensuite fermer les 3 autres fichiers, les formules s'adaptent.

Joyeux Noël à tous !
 

Pièces jointes

  • source mois 1.xlsx
    9.3 KB · Affichages: 8
  • source mois 2.xlsx
    9.3 KB · Affichages: 4
  • source mois 3.xlsx
    9.3 KB · Affichages: 5
  • Conso moyenne des 3 mois(1).xlsx
    18.6 KB · Affichages: 6
Dernière édition:

sircroco

XLDnaute Nouveau
bonjour le forum, j'espère que vous allez bien.

Mon problème c'est que les sources à utiliser sont différents chaque mois, aujourd’hui on est décembre donc on utilise septembre octobre novembre, mais quand on sera en janvier on devra utiliser octobre nov décembre, ce sont des extractions mensuelles dans un lecteur réseau.

Ce que je souhaite concrètement c'est un bouton où on va sélectionner les trois sources (correspondent aux extractions des trois derniers mois) avec une sorte de fonction getopenfilename x3 par exemple.

Je ne sais pas comment faire pour prendre plusieurs fichiers à la fois avec la fonction Getopenfilename.
Voilà ce que ça donnerait ce que je souhaite :

Sub macro

- Sélection des trois fichiers dans le repértoire X (bureau par exemple) : Source 1 sélectionné, Source 2 sélectionné, Source 3 sélectionné

With range C2:C & rows count (de notre fichier macro conso)

.formula ="=Vlookup($B2,'[" & Source 1 sélectionné.Name &"]Feuil1'!$b:$e,4,0) + Vlookup($B2,'[" & Source 2 sélectionné.Name &"]Feuil1'!$b:$e,4,0) + Vlookup($B2,'[" & Source 3 sélectionné.Name &"]Feuil1'!$b:$e,4,0) / 3"

.Value = .Value

End with
End sub


J'ai réussi à faire un bouton rechercheV pour la sélection de un seul fichier source... mais pas de 3, voici :

Code:
Sub recherche()

ChDrive "C"
ChDir "C:\Users\pc\Desktop"
fichier1 = Application.GetOpenFilename
If fichier1 = False Then Exit Sub


    With Range("b2:b" & Cells(Rows.Count, 1).End(xlUp).Row)

    Set Source = Workbooks.Open(fichier1)

        .Formula = "=VLOOKUP($a2,'[" & Source.Name & "]Donnees'!$b:$d,2,0)"
        .Value = .Value

    Workbooks(Source.Name).Close

    End With
End Sub


Remerciement à Jack67 de m'avoir aidé
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour,
Code à combiner avec ton code
VB:
Sub Utilisation_FileDialog_Ouvrir()
    Dim objOuvrir As FileDialog
    Dim objFichiers As FileDialogSelectedItems
    Dim x As Long
    Dim Wb As Workbook
    'Affiche la fenêtre "Ouvrir"
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = ""
        'Efface les filtres existants.
        .Filters.Clear
        'Définit une liste de filtres pour le champ "Type de fichiers".
        .Filters.Add "Classeurs Excel", "*.xlsx" 
        'Indique le type d'affichage dans la boîte de dialogue
        .InitialView = msoFileDialogViewDetails
        .Show
    End With
    'Définit le ou les fichiers à ouvrir
    Set objFichiers = Application.FileDialog(msoFileDialogOpen).SelectedItems
    'On sort si aucun fichier n'a été sélectionné
    If objFichiers.Count = 0 Then Exit Sub
    Application.ScreenUpdating = False
    'Boucle sur le ou les fichiers Excel sélectionnés pour les ouvrir
    For x = 1 To objFichiers.Count
        Set Wb = Workbooks.Open(objFichiers(x))
        '
        'traitement
        MsgBox Wb.Name 'introduit ici ton code
        '
        'Referme le classeur sans enregistrer les modifications.
        Wb.Close False
    Next
    Application.ScreenUpdating = True
End Sub
J'espère que ça résoudra ton problème.

Bonnes fêtes de fin d'année.
 

sircroco

XLDnaute Nouveau
Bçonjour cp4, je te remercie tout d'abord de ta réponse, ce code a l'air de très bien correspondre à ma demande, cependant je n'arrive pas à intégrer mon code dedans sûrement à cause de la boucle, voici ce que j'ai fait :

Code:
Sub Utilisation_FileDialog_Ouvrir()
    Dim objOuvrir As FileDialog
    Dim objFichiers As FileDialogSelectedItems
    Dim x As Long
    Dim Wb As Workbook
    'Affiche la fenêtre "Ouvrir"
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = ""
        'Efface les filtres existants.
        .Filters.Clear
        'Définit une liste de filtres pour le champ "Type de fichiers".
        .Filters.Add "Classeurs Excel", "*.xlsx"
        'Indique le type d'affichage dans la boîte de dialogue
        .InitialView = msoFileDialogViewDetails
        .Show
    End With
    'Définit le ou les fichiers à ouvrir
    Set objFichiers = Application.FileDialog(msoFileDialogOpen).SelectedItems
    'On sort si aucun fichier n'a été sélectionné
    If objFichiers.Count = 0 Then Exit Sub
    Application.ScreenUpdating = False
    'Boucle sur le ou les fichiers Excel sélectionnés pour les ouvrir
    For x = 1 To objFichiers.Count
  
        Set Wb = Workbooks.Open(objFichiers(x))

       With Range("c2:c" & Cells(Rows.Count, 1).End(xlUp).Row)

        .Formula = "=VLOOKUP($b2,'[" & Workbooks.Open(objFichiers(1)).Name & "]Feuil1'!$b:$e,4,0) + VLOOKUP($b2,'[" & Workbooks.Open(objFichiers(2)).Name & "]Feuil1'!$b:$e,4,0) + VLOOKUP($b2,'[" & Workbooks.Open(objFichiers(3)).Name & "]Donnees'!$b:$e,4,0) "
      
        .Value = .Value
      
        Wb.Close False
    Next
    Application.ScreenUpdating = True
End Sub


Les fichiers sont en PJ. je pense que ça bloque avec la boucle, il faut trouver un moyen de faire la somme des recherchesV dans cette boucle...

Est-il possible aussi d'intégrer le chemin où l'on souhaite récupérer les fichiers ? pour un gain de temps, par exemple : C:\Users\pc\Desktop\Travail\Sources
 

Pièces jointes

  • macro conso totale des 3 mois.xlsm
    17.8 KB · Affichages: 3
  • source mois 1.xlsx
    9.3 KB · Affichages: 4
  • source mois 2.xlsx
    9.3 KB · Affichages: 2
  • source mois 3.xlsx
    9.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
Re,

Sans modifier les formules de liaison cette macro permet la mise à jour des 3 fichiers sources :
Code:
Sub MAJ_Sources()
Dim n As Byte
ChDir ThisWorkbook.Path & "\"
With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = True
    .Title = "Choisissez les 3 fichiers à ouvrir"
    If .Show Then
        If .SelectedItems.Count = 3 Then
            Application.ScreenUpdating = False
            Application.DisplayAlerts = False
            For n = 1 To 3
                With Workbooks.Open(.SelectedItems(n))
                    .SaveAs Left(.FullName, InStrRev(.FullName, "\")) & "source mois " & n
                    .Close
                End With
            Next
        End If
    End If
End With
End Sub
Fichiers zippés joints.

A+
 

Pièces jointes

  • Macro Conso moyenne des 3 mois(1).zip
    76.1 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 009
Membres
103 089
dernier inscrit
johnjohn1969