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 :

capture

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 Fe

En 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

7fichier-modele.xlsm (118.43 Ko)

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

14fichier-modele.xlsm (126.21 Ko)

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

7fichier-modele.xlsm (129.58 Ko)

Super c'est top merci beaucoup !!!

Rechercher des sujets similaires à "actualisation macro"