Macro pour compilation d'onglets sur un seul avec mise à jour

Bonjour!

New bee du VBA, je me suis cassé les dents avec différentes macros, je n'ai pas trouvé de solution et sollicite votre aide

J'ai un document qui regroupe des infos dans plusieurs onglets.

Je cherche à faire un onglet (nommé RECAP) qui compile les lignes (uniquement si il y a des infos saisies) de certains de ces onglets sachant que chaque onglet à regrouper à la même structure. Cet onglet RECAP doit être actualisable pour intégrer les nouvelles données saisies dans les onglet à compiler.

Doivent être listés dans mon onglet RECAP, tous les onglets de "AURA" à "PACA" et j'aimerai que la ligne 1 soit la même que dans les onglets compliés, et de pouvoir ajouter, sur cette ligne 1 un filtre pour trier les données en fonction des colonnes, de la même manière que dans les onglets à compiler.

Les onglets SYNTHESE et En tête ne doivent pas figurer dans l'onglet récap.

L'onglet "En tête" sera créé une fois le RECAP fonctionnel (doigts croisés, en touchant du bois). Je me servirais de quelques données de RECAP pour le créer

J'espère avoir été clair dans mon explication, voici en ficher joint, le ficher type du document que je voudrais travailler.

Merci d'avance pour votre temps et votre aide!

Bonjour Julboul, bonjour le forum,

Apparemment ce n'est pas trop compliqué à faire. Deux choses ne sont pas claires pour moi :

1- uniquement si il y a des infos saisies ? cela veut-il dire qu'il faut au moins une cellule non vide dans la ligne ?...

2 - Quand tu aura lancé ton récap une première fois, qu'est-ce qui fera que les données déjà compilées ne le soient les prochaine fois. Ne faudrait-il pas envisager une colonne supplémentaire pour indiquer si l'on veut supprimer la ligne de la procédure, ou un autre moyen...

Bonjour ThauThème,

Pour répondre à votre première question, oui, il faut au moins une cellule non vide par ligne à compiler.

Pour la seconde question, j'espère vous comprendre, pour essayer d'être plus clair: je voudrais que le RECAP prennent en compte les ajouts futurs de lignes dans les onglets à compiler.

Merci de votre aide!

Re,

En pièce jointe, ton fichier modifié. Dans l'onglet RECAP, clique sur le bouton RECAP... Le code commence par supprimer toutes les données de récap puis fait la bouce...

173julboul-v01.xlsm (72.74 Ko)

Merci ThauThème!

C'est déjà avancée géniale après deux jours de galère (même si j'apprends beaucoup)!

Est-il possible d'intégrer la mise en forme dans le récap? bordures, couleur de police, couleur de remplissage, retour à la ligne automatique.

Encore merci pour ton temps!

Re,

C'est possible mais ça va considérablement ralentir de temps d exécution de la macro...

Sub Macro1()
Dim R As Worksheet 'déclare la variable R (Recap)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim NOI As String 'déclare la variable NOI (Nom des Onglet Interdits)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TL As Variant 'déclare la variable TL (Tableau de la Ligne)
Dim LI As Long 'déclare la variable LI (LIgne)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
NOI = "RECAP,SYNTHESE,En tête" 'définit la liste NOI des onglets interdits
Set R = Worksheets("RECAP") 'définit l'onglet R
R.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelle anciennes données
LI = 2 'initialise la ligne LI
For Each O In Worksheets 'boucle 1 : sur tous les onglets O du classeur
        If InStr(1, NOI, O.Name, vbTextCompare) = 0 Then 'condition 1 : si le nom de l'onglet de la boucle n'est pas compris dans NOI
        TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
        For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
            For J = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes J du tableau des valeurs TV
                If TV(I, J) <> "" Then 'condition 2 : si la donnée ligne I colonne J de TV n'est pas vide
                    O.Rows(I).Copy R.Cells(LI, 1) 'copy la ligne I de l'onglet O dans la cellule ligne LI, colonne 1 de l'onglet R
                    LI = LI + 1 'incrémente la ligne LI
                    Exit For 'sort de la boucle 3
                End If 'fin de la condition 2
            Next J 'prochaine colonne de la boucle 3
        Next I 'prochaine ligne de la boucle 2
    End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Fait !" 'message
End Sub

Un grand merci Thauhem!

C'est génial, je vais me pencher sur la macro ce weekend pour la comprendre, et ça devrait le faire avec tes commentaires.

Encore merci pour ton temps!

Re-bonjour Thauthem,

Je m'aperçois en pratiquant le doc avec ta seconde macro qu'a chaque actualisation de l'onglet récap grâce à ton bouton magique, le tri de l'onglet récap et des onglets compilés ne fonctionne plus de manière efficace.

Si je supprime le tri et que je le relance sur un onglet, cela fonctionne à nouveau. As-tu une solution pour régler ce détail?

Merci!

Rechercher des sujets similaires à "macro compilation onglets seul mise jour"