Actualisation MACRO
Bonjour,
Je ne comprends que difficilement le langage macro et j'ai du mal à me former seul. J'étais donc sur le forum pour trouver une solution à mon problème. Je l'ai trouvé partiellement mais encore besoin d'aide.
J'ai un classeur Excel avec plusieurs feuilles du même format (colonne et ligne identique) - le but était de consolider les données dans une feuille (consolidation = ajout des données - pas de calcul, somme etc...).
J'ai utilisé la macro suivante :
Sub CONSOLIDATION()
Dim Fe As Worksheet
Dim Plage As Range
'parcourir la collection en évitant la feuille de consolidation, paramètres et TCD
For Each Fe In ThisWorkbook.Worksheets
If Fe.Name <> "CONSO" And Fe.Name <> "Paramètres" And Fe.Name <> "TCD" Then
With Fe
'définie la plage sans la ligne de titres
Set Plage = .Range(.Cells(3, 1), _
.Cells( _
.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, _
.Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
'colle les valeurs dans la feuille de consolidation
'après la dernière ligne non vide
Plage.Copy _
Worksheets("CONSO").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next Fe
End Sub
Cependant le but est de rendre vivante cette base de donnée. C'est à dire que quand s'ajoute une ligne dans un onglet, le but est d'actualiser l'onglet CONSO. Pour cela je réexécute la macro mais elle reprend l'ensemble des données sous la dernière consolidation.
Exemple: dans la conso j'ai 26 lignes consolidées. Si j'ajoute une ligne dans un onglet et que je ré-excute la macro elle va débuter à la ligne 27 et me remettre les 26 lignes précédentes + la ligne ajoutée dans l'un des onglets, ce qui me fera un total de 26+27 lignes....
Comment puis-je faire pour juste "actualiser" ma base de données svp? Et j'imaginais le faire via un bouton directement sur le fichier histoire que cela soit simple d'utilisation...
Merci grandement pour votre aide,
Cordialement,
Mélissa
Bonjour Melissa,
Sans fichier difficile de t'aider.
Cependant, pour éviter que ta consolidation sous les précédentes il conviendrait de vider l'ensemble du contenu de ta feuille consolidation avant de remettre les nouvelles données.
La fonction : Sheets("CONSO").Range("A1:G50000").ClearContents devrait répondre à ce que tu veux faire
En adaptant évidement la zone "A1:G50000" à tes données pour éviter de supprimer tes en-têtes par exemple.
De plus pour lancer ton code à chaque changement de valeur dans une feuille du classeur et être sûre que ta feuille consolidation est toujours à jour. Tu peux mettre le code suivant dans ton classeur :
Bonsoir,
Tout d'abord merci pour ce retour ultra rapide!!
Alors j'ai essayé en ajoutant les éléments que vous avez mentionné ce qui donne cela :
Private Sub Workbook_sheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
CONSOLIDATION
Application.EnableEvents = True
End Sub
Sub CONSOLIDATION()
Dim Fe As Worksheet
Dim Plage As Range
'parcourir la collection en évitant la feuille de consolidation, paramètres et TCD
For Each Fe In ThisWorkbook.Worksheets
If Fe.Name <> "CONSO" And Fe.Name <> "Paramètres" And Fe.Name <> "TCD" Then
With Fe
'définie la plage sans la ligne de titres
Set Plage = .Range(.Cells(3, 1), _
.Cells( _
.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, _
.Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
'colle les valeurs dans la feuille de consolidation
'après la dernière ligne non vide
Plage.Copy _
Worksheets("CONSO").Range("A65536").End(xlUp).Offset(1, 0)
End If
Sheets("CONSO").Range("A2:S50000").ClearContents
Next Fe
End Sub
Le problème c'est que finalement quand je l'exécute j'ai feuille blanche...(hormis la première ligne que je remplis directement moi -même - c'est pour cela que je commence la macro à la deuxième ligne).
Salut Melimeli,
si je comprends bien, quelle que soit la feuille d'origine, une nouvelle ligne de données peut et doit se recopier sur la première ligne vide de ta feuille de consolidation?
- Ces lignes de données, je suppose, doivent être complétées avant copie ou existe-t-il un critère qui déclenche cette copie ?
- Si modif' il y a, quid?
Pour ta dernière question (feuille blanche), tu effaces systématiquement ta feuille CONSO juste après l'avoir remplie...
Plage.Copy _
Worksheets("CONSO").Range("A65536").End(xlUp).Offset(1, 0)
End If
Sheets("CONSO").Range("A2:S50000").ClearContents
Next FeEn quittant la Sub, il n'y a donc plus rien!
A+
Bonjour,
A nouveau merci de l'intérêt porté et de votre aide.
J'ai mis le fichier en PJ en ayant modifié quelques données afin d'alléger le fichier. De toute façon il n'est pas très complet pour le moment.
La démarche est la suivante : chaque responsable complète au fur et à mesure l'onglet correspondant à son périmètre. Il s'agit d'un fichier "vivant" qui est donc amené à évoluer chaque jour.
Le but pour moi est ensuite de consolider tous les onglets dans un seul afin d'analyser au global différents indicateurs.
Ainsi ce que je souhaiterais (au mieux) c'est de pouvoir consolider les données via un bouton actualisation sur le fichier consolidation. Ainsi si une ligne a été ajoutée à un onglet il faudrait qu'elle s'ajoute à l'onglet consolidation quand j'appuie sur le bouton "actualisez".
Pour le moment ma macro consolidé les données une fois et quand je la ré-exécuter elle ajoutait à nouveau toutes les lignes au lieu d'ajouter uniquement les derniers éléments ajoutés dans les onglets...C'est pourquoi j'ai intégré la procédure 'feuille blanche' comme indiqué dans une réponse ci-dessus mais j'ai du mal le faire.
Comme jee n'ai pas réussi à faire cela je n'ai pas non plus insérer de bouton "actualisez"...
Merci par avance pour votre aide,
Cordialement,
Mélissa
Bonjour Mélissa,
J'ai fait Deux modifications :
Mis l'instruction qui vide la feuille CONSO au début et non à la fin. Comme ça je ne supprime pas les données que ta macro vient de générer.
J'ai mis le code pour que ta macro se lance à chaque modification. Dans l'onglet Workbook comme je t'avais dit de le faire.
Pour moi ça fonctionne ! Si tu préfère lancer manuellement via un bouton pas de souci il n'y a qu'à demander
Dans l'attente de lire ta réponse !
La bise,
Girodo
Bonjour,
Girodo vous aviez mis un fichier joint? Car je n'ai pas trouvé.
J'avais essayé de mettre les formules dites mais je n'avais pas réussi...
Mélissa
Wups !!
En effet, je l'ai rajouté à mon précédent message
Super !!!
Est-ce que je peux encore demandé un service? Est-ce possible d'ajouter un bouton d'actualisation à enclencher manuellement? Cela me permettra de faire des états fin de mois à J+15 sans que les actions des 15 jours suivant le mois soient intégrés? S'il faut je peux peut-être essayer de le créer si vous m'expliquez comment faire?
Mélissa,
J'ai repris rapidement le fichier modèle que tu m'a préparé je ne comprend pas vraiment ton histoire de J+15.
Peux-tu me détailler ton problème avec un exemple que je puisse y réfléchir ?
Bonjour,
En fait je souhaiterais pouvoir actualiser moi-même le fichier via un bouton qui exécute la macro. En cliquant sur une bulle l'onglet consolidation d'actualiserait avec les données des différents onglets - au lieu d'aller dans le développeur et faire exécuter. Ce fichier est à destination de collègue qui n'ont aucune connaissance des macros (et moi que très faible) - du coup ils ne savent juste pas l'exécuter.
Oublie mon J+15 - ça ne veut rien dire
Dans ma version ça se fait tout seul ! Dès que tu fait une modif dans les onglets précédent ça lance ta macro CONSOLIDATION et hop ça met à jour la feuille conso, teste tu verras
Si tu préfère mettre la feuille conso à jour manuellement j'ai enlevé la Mise à jour auto et créé un bouton !
Girodo
Super c'est top merci beaucoup !!!