Boucle calcul d'une même cellule de plusieurs fichiers
Bonjour à tous !
J’ai réussi à créer une macro qui me demande via une boite de dialogue de sélectionner un répertoire puis d’aller chercher la valeur d’une cellule précise, de les additionner et me donner le résultat dans le fichier qui contient la macro.
Pour faire plus simple, la macro récupère les valeurs de la cellule B5 de toutes les onglets « feuil2 » des fichiers Excel du dossier sélectionné, les additionnent et le total de ses valeurs est inscrit dans la cellule A5 de mon fichier qui contient la macro.
Maintenant, j’aimerais pouvoir avec une seule macro répéter cette action sur une plage de cellule :
Le but est de récupérer la valeur des cellules B5 des onglets « feuil2 » et inscrire le résultat dans la cellule A5 de mon fichier avec la macro, puis de faire la somme des valeurs des cellules B5 des onglets « feuil2 » et inscrire le résultat dans la cellule B5, et ainsi de suite.
Sauf erreur de ma part, il faut créer une boucle, mais je n’arrive pas à visualiser comment faire, étant peu calé en VBA.
en espérant avoir été assez clair et qu’un membre du forum pourra m’aider.
N’hésitez pas si vous avec besoin d’informations supplémentaires.
Salut,
Il est bien entendu plus facile de travailler sur une macro fournie que sur du vent, mais bon, je tente le coup.
Selon moi, si tu crées une boucle comme tu l'imagines, tu ouvres d'abord le fichier A, puis le B, puis le C, ........ afin de récupérer les valeurs des cellules A5 puis tu vas à nouveaux ouvrir tous ces fichiers x fois afin de récupérer les autres valeurs.
Il vaudrait donc mieux, selon moi, prendre note de toutes les valeurs nécessaires dans le fichier A lorsqu'il est ouvert, par exemple avec des ''compteurs'', soit des variables que tu chargerais des différentes valeurs trouvées. Par exemple : tu ouvres le fichier A et tu charges les valeurs des cellules A5, B5, C5, etc. dans autant de variables que nécessaires puis lorsque tu ouvriras le fichier B, tu additionnerais les nouvelles valeurs trouvées aux variables déjà à moitié chargées, etc.
Si tu fournis au minimum ton fichier de base avec sa macro, on pourra mieux d'aider.
Amicalement.
Bonjour Ghoster, bonjour le forum,
Pas clair ton histoire ...
1. Un classeur ne peut contenir qu'un seul onglet portant le même nom.
récupérer la valeur des cellules B5 des onglets « feuil2 » et inscrire le résultat dans la cellule A5 de mon fichier avec la macro, puis de faire la somme des valeurs des cellules B5 des onglets « feuil2 » et inscrire le résultat dans la cellule B5, et ainsi de suite.
pourquoi le pluriel (des cellules B5 des onglets « feuil2 ») ? Franchement je ne comprends rien à ta demande...
[Édition]
Oooops, pardon ! c'est moi qui avait mal lu...
Bonjour le fil, bonjour le forum,
Le code commenté ci-dessous devrait convenir :
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim RD As FileDialog 'déclare la variable RD (Recherche de Dossier)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim F As String 'déclare la variable F (Fichier)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim T As Double 'déclare la variable T (Total)
Dim C As Integer 'déclare la variable C (Compteur)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination
Set OD = CD.Worksheets(1) 'définit l'onglet destination (à adapter à ton cas)
Set RD = Application.FileDialog(msoFileDialogFolderPicker) 'définit la recherche de dossier RD
RD.AllowMultiSelect = False 'n'autorise qu'une seule sélection
If RD.Show = -1 Then CA = RD.SelectedItems(1) 'si un dossier est sélectionné, définit le chemin d'accès CA
CA = CA & "\" 'redéfinit le chemin d'accès CA
F = Dir(CA & "*.xlsx") 'définit le premier fichier ayant l'extension .xlsx comme premier fichier du dossier choisi
Do While F <> "" 'exécute tant qu'il existe des fichiers F
Set CS = Workbooks.Open(CA & F) 'définit le classeur source CS
Set OS = CS.Worksheets("Feuil2") 'définit l'onglet source OS
'définit la cellule de destination DEST
If OD.Range("A5") = "" Then Set DEST = OD.Range("A5") Else Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
DEST.Value = OS.Range("B5").Value 'récupère dans la DEST la valeur de la cellule B5 de l'onglet source
T = T + OS.Range("B5").Value 'calcule le total T
C = C + 1 'incrémente le compteur C
CS.Close False 'ferme le classeur source sans enregistrer
F = Dir 'définir le prochain fichier ayant l'extension .xlsx comme fichier suivant du dossier choisi
Loop 'boucle
OD.Range("B5").Resize(C, 1).Value = T 'renvoie le total T dans toules les cellules
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End SubSalut ghostery37
Comme indiqué, je veux bien - sur la base de la macro que tu me fourniras - t'indiquer comment la modifier en fonction de tes besoins.
Fournis-moi éventuellement un ficher-source en plus du fichier-cible déjà demandé.
Amicalement.
Bonjour,
Merci pour ces premiers retours. Je joints 4 fichiers à ce message, les fichiers 1; 2 et 3 qui contiennent les valeurs à additionner, et le fichier "résultat attendu" avec les valeurs souhaitées après exécution de la macro.
Pour mon code, voici la partie ou je récupère les valeurs des cellules parcourues, les additionnent et place le résultat dans mon classeur qui contient la macro:
For Each F In FS If UCase(Right(F.Name, 5)) = ".XLSX" Then 'condition : si le fichier à une extension ".xlsx"
Workbooks.Open (F) 'ouvre le fichier
Set CS = ActiveWorkbook
Set OS = CS.Sheets("feuil2") ‘choix de l’onglet source
SO = SO + OS.Range("B5").Value ‘somme des cellules B5 des fichiers parcours
CS.Close SaveChanges:=False 'ferme le classeur source sans enregistrer
End If 'fin de la condition
Next F 'prochain fichier de la boucle
DEST.Value = SO 'place la somme dans la cellule DESTJ'essaye ta macro dans la journée ThauThème et vous tiens au courant !
Salut,
Si tu places le fichier ci-joint dans un dossier avec tous les fichiers-source à visiter - et uniquement ces fichiers-là - tu peux lancer le code en place derrière le bouton.
Dans tes exemples, tu as parfois des données sur les feuilles 1 !
Amicalement.
Merci beaucoup à nouveau !
Dès que j'ai un peu de temps j'essaye les deux solutions proposés précédemment.
Aujourd'hui au mieux, sinon ce sera ce week-end.
Dans tout les cas, je vous tiens au courant.
C'est parfait Yvouille, c'est exactement ce que je voulais.
Je passe le sujet en résolu.
Encore un grand merci à vous tous.