Excel - Consolidation de données

Bonjour,

Je viens vers vous car j’ai plusieurs soucis sur une macro trouvée sur le net.

Je souhaiterais établir une consolidation de plusieurs fichiers excel. Les fichiers à consolider et le fichier de consolidation sont présentés exactement de la même façon et stockés dans le même dossier. Le nom de l’onglet ainsi que les cellules sont les mêmes. Etant donné que j’ai de nombreuses cellules à consolider, je souhaiterais aussi que l’on puisse faire appel à la macro à chaque fois que l’on colle dans une cellule =nom_macro.

Mon premier souci concerne le code pour retrouver définir le chemin de la cellule (chemin d’accès dossier + nom fichier + nom onglet + cellule). En fait, c’est surtout la localisation de la cellule que je ne sais pas faire. J’ai essayé activecell.xpath et chercher sur le net mais je n’arrive à pas trouver la propriété qui va en suivant…… J’ai un code qui fonctionne mais seulement pour une cellule précise et c’est pour rendre cette cellule variable que j’éprouve des difficultés. Le code retrouvé me donne une cellule une cellule sous la forme d’un texte et il faut que je j’aille cliquer dedans pour que la cellule passe en nombre donc si vous avez une astuce…

Mon second souci sera peut-être résolu par le premier car j’utilise déjà une macro qui récupère le nom de l’onglet donc peut être qu’en l’adaptant cela fonctionnera.

Je joins un exemple de fichiers avec les codes adaptés que j’ai trouvé sur le net

Merci par avance pour votre aide

Cordialement

19consolidation.xlsm (16.96 Ko)

Bonjour,

J'ai réussi à adapter / modifier la macro de base et cela fonctionne sur la cellule active. Je planche pour adapter cela à toutes les cellules où il sera noté "à consolider".

Je mets le bout de code qui fonctionne sur la cellule active :

Sub sommescellule()

Dim objShell As Object, objFolder As Object
Dim Chemin As String
Dim Chemin2 As Object
Dim fichier As String
Dim nomfeuille As String
Dim cellule As String
Dim fichierconso As String

nomfeuille = ActiveSheet.Name

fichierconso = ThisWorkbook.Name

cellule = ActiveCell.Address
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

'Sélection du répertoire
Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"

'format du fichier (par exemple xlsx)
fichier = Dir(Chemin & "*.xls")

Do While Len(fichier) > 0

If fichier <> fichierconso Then
Workbooks.Open Filename:=Chemin & fichier
Sheets(nomfeuille).Select
Application.Goto Workbooks(fichier).Sheets(nomfeuille).Range(cellule)
Range(cellule).Copy
Application.Goto Workbooks(fichierconso).Sheets(nomfeuille).Range(cellule)
Range(cellule).Select
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlAdd, SkipBlanks _
:=False, Transpose:=False

Workbooks(fichier).Close SaveChanges:=False

End If
fichier = Dir()
Loop

End Sub

Hello,

Tu veux récupérer quelques cellules précises ou tout le tableau sans les en-têtes ?

Bonjour,

Pour la seconde partie, je souhaite consolider seulement les cellules où il y a écrit à consolider et cela dans tous les onglets de mon fichier "consolidation". Je ne veux pas récupérer tout le tableau et si, dans un onglet, il n'y a pas de cellule "à consolider" on passe à l'onglet suivant... Le code ci-dessous ne fonctionne pas car il ne s'arrête pas en fait... et ne fait la modification que d'une cellule où c'est écrit "à consolider". Dans le code suivant, je fais appel à la macro "sommecellule" de mon post précédent. Ma troisième étape sera de consolider aussi du texte pour récupérer des commentaires et de les séparer dans une même cellule avec "alt+entrée".

Sub test()

Dim c As Range, strAdd As String, Plage As Range

Set Plage = Sheets("Données").UsedRange '<-- nom de feuille à adapter

Set c = Plage.Find(What:="à consolider")
If Not c Is Nothing Then
strAdd = c.Address
Range(strAdd).Select
Selection.Clear
sommescellule
Do
' Adéfinir.ComboBox1.AddItem c.Offset(0, 1) '<-- Adéfinir = l'endroit où se trouve le ComboBox (Feuille ou UserForm)
Set Plage = Sheets("Données").UsedRange
Set c = Plage.FindNext(c)

Loop While Not c Is Nothing And c.Address <> strAdd
End If
Next
End

Hello,

Voici un code qui affiche à l'écran l'adresse des cellules où est indiqué "à consolider".

C'est la feuille Données du classeur actif qui est interrogée.

Sub testing()
    Const strconso As String = "à consolider"
    Dim rngPlage As Range, rngCellule As Range
    Set rngPlage = ActiveWorkbook.Worksheets("Données").UsedRange
    For Each rngCellule In rngPlage
        If rngCellule.Value = strconso Then MsgBox rngCellule.Address
    Next rngCellule
    Set rngPlage = Nothing
End Sub

Bonjour et merci.

Je vais essayer d'implémenter ce code.

Cdt

Rechercher des sujets similaires à "consolidation donnees"