Compiler dans une feuille de synthèse plusieurs feuilles

jl456

XLDnaute Junior
Bonjour à tous,

Je vous explique mon problème.

j'ai 4 feuilles formatées de la même façon :
- projection
- à démarrer
- démarré
- ajourné

je voudrais compiler dans une feuille "synthèse" certaines colonnes des 3 premières feuille (la feuille "ajourné" ne m'intéresse pas).
Par exemple, en colonne A de la feuille "synthèse", je voudrais copier/coller les données de la colonne "statut" de la feuille "projection" puis suivie sans espace des mêmes données de la feuille "à démarrer" et ainsi de suite...

Je ne suis pas très fort en macro, c'est pourquoi je sollicite votre aide.

Je joins un fichier pour exemple.

Je vous remercie tous pour votre aide.
 

Pièces jointes

  • Exemple.xls
    36.5 KB · Affichages: 308
  • Exemple.xls
    36.5 KB · Affichages: 281
  • Exemple.xls
    36.5 KB · Affichages: 302

Papou-net

XLDnaute Barbatruc
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonsoir jl456,

Voici ton fichier avec une macro attachée au bouton <SYNTHÈSE> que j'ai ajouté sur la feuille du même nom.

Cette macro fonctionnera également si tu ajoutes des feuilles par la suite. Seules les feuilles <Synthèse> et <Ajourné> en resteront exclues.

Espérant avoir répondu.

Cordialement.
 

Pièces jointes

  • JL456.zip
    16.1 KB · Affichages: 870

jl456

XLDnaute Junior
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonsoir Papou-net,

Merci énormément pour votre aide et votre rapidité.
La macro fonctionne parfaitement.
Cependant lorsqu'on la rafraichit, les lignes se décalent vers le bas, y-a-t'il un moyen d'éviter cela ?

Merci beaucoup pour votre aide.

JL456
 

Papou-net

XLDnaute Barbatruc
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonsoir Papou-net,

Merci énormément pour votre aide et votre rapidité.
La macro fonctionne parfaitement.
Cependant lorsqu'on la rafraichit, les lignes se décalent vers le bas, y-a-t'il un moyen d'éviter cela ?

Merci beaucoup pour votre aide.

JL456

Re : JL456

Voilà qui est fait.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • JL456-1.zip
    16.2 KB · Affichages: 771

dragonwood

XLDnaute Nouveau
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonjour,

Je vois que tout fonctionne correctement. Serait-il possible d'ajouter des commentaires pour mieux comprendre, car j'essaie d'adapter ce code avec mes documents et rien ne fonctionne.

Merci :D
 

Papou-net

XLDnaute Barbatruc
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonjour,

Je vois que tout fonctionne correctement. Serait-il possible d'ajouter des commentaires pour mieux comprendre, car j'essaie d'adapter ce code avec mes documents et rien ne fonctionne.

Merci :D

Bonsoir dragonwood, et bienvenue sur le forum,

Voici quelques explications sur le code :

Code:
Sub Synthese()
[COLOR="Green"][B]With Sheets("Synthèse")
  .Range("A2:D65536").Delete[/B][/COLOR]
  [COLOR="Blue"][B]For Each sh In Sheets[/B][/COLOR]
    [COLOR="DarkOrange"][B]Select Case sh.Name
      Case "Synthèse", "Ajourné"
      Case Else[/B][/COLOR]
        [COLOR="Magenta"][B]For lg = 2 To sh.Range("A65536").End(xlUp).Row[/B][/COLOR]
          [COLOR="Magenta"][B]LgS =[/B][/COLOR] [COLOR="Green"][B].UsedRange.Rows.Count[/B][/COLOR] + 1
          [COLOR="Green"][B].Cells(LgS, 1)[/B][/COLOR] = [COLOR="Magenta"][B]sh.Cells(lg, 1)[/B][/COLOR]
          [COLOR="Green"][B].Cells(LgS, 2)[/B][/COLOR] = [COLOR="Magenta"][B]sh.Cells(lg, 7)[/B][/COLOR]
          [COLOR="Green"][B].Cells(LgS, 3)[/B][/COLOR] = [COLOR="Magenta"][B]sh.Cells(lg, 8)[/B][/COLOR]
          [COLOR="Green"][B].Cells(LgS, 4)[/B][/COLOR] = [COLOR="Magenta"][B]CDate(sh.Cells(lg, 9))[/B][/COLOR]
        [COLOR="Magenta"][B]Next[/B][/COLOR]
    [COLOR="DarkOrange"][B]End Select[/B][/COLOR]
  [COLOR="Blue"][B]Next[/B][/COLOR]
[COLOR="Green"][B]End With[/B][/COLOR]
End Sub

Toutes les instructions écrites en vert se rapportent à la feuille "Synthèse"

La boucle en bleu balaie toutes les feuilles du classeur

La boucle en orange scrute le nom des feuilles du classeur : si le nom de la feuille analysée est "Synthèse" ou "ajourné", il n'y a aucune action. Dans tous les autres cas, on fait une boucle de lecture sur chaque feuille (lignes en violet), de la cellule "A2" à la dernière cellule remplie de la colonne "A". On stocke le n° de ligne de cette dernière cellule dans la variable "LgS". Puis on copie chaque cellule de la ligne dans la feuille "Synthèse", sur la 1ère ligne vide (LgS + 1, Lgs représentant la dernière ligne remplie)

Quelques explications complémentaires :

With Sheets("Synthèse")
.Range("A2: D65536").Delete
: supprime les cellules de la plage "A2: D65536" de la feuille "Synthèse" puisque l'instruction débute par un point

For Each sh In Sheets : pour chaque objet feuille (sh) dans la collection des feuilles du classeur

Select Case sh.Name : instruction "Case" attachée au nom de la feuille (sh.Name)
Case "Synthèse", "Ajourné" : si on est sur les feuilles "Synthèse" ou "ajourné", pas d'action puisque pas d'instruction avant le prochain Case

Case Else : pour tous les autres noms de feuilles

sh.Range("A65536").End(xlUp).Row : sur la feuille sh, remonte de la dernière cellule en colonne "A" jusqu'à la première cellule non vide rencontrée et relève le n° de ligne de celle-ci grâce à l'instruction Row

LgS = .UsedRange.Rows.Count + 1 : UsedRange représente la plage de cellules remplies sur la feuille "Synthèse", puisque débutant par un point. RowsCount compte le nombre de lignes contenues dans cette plage. On ajoute 1 à ce nombre pour obtenir le n° de la première ligne vide et pour l'affecter à la variable LgS.

Voilà, pardon si je me suis montré un peu trop élémentaire dans ces explications, mais je ne connais pas ton niveau en VBA. Ne pas oublier, toutefois, de consulter l'aide VBA pour d'autres précisions.

Espérant avoir aidé.

Cordialement.
 

dragonwood

XLDnaute Nouveau
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Merci beaucoup Papou-net, cela m'aide énormément!

Il me reste un problème, rien ne s'affiche même si je tente de l'adapter... Je tente de faire comme l'exemple ci-haut, une résumé de plusieurs feuilles sur la même feuille. J'ai seulement besoin de l'information des 9 premières colonnes de chaque feuilles (dont les 5 premières colonnes contiennent des formules) puis de trier le tout en ordre alphabétique. Pour les besoin de taille de fichier, j'ai enlever des feuilles du document.

Merci

Dragonwood
 

Pièces jointes

  • liste présence.zip
    32.5 KB · Affichages: 220
Dernière édition:

dragonwood

XLDnaute Nouveau
Re : Compiler dans une feuille de synthèse plusieurs feuilles

Bonsoir,

Désolé, je viens de me rendre compte qu'il manquait le code VBA dans le fichier. Je débute dans le VBA, j'ai seulement fait un cours il y a déjà deux ans..le tout s'oublie vite :(

Le voici:


Sub subSommaire()
With Sheets("Band")
.Range("A2":"D65536").Delete
For Each sh In Sheets
Select Case sh.Name
Case "Band"
Case Else
For lg = 8 To sh.Range("A65536").End(xlUp).Row
LgS = .UsedRange.Rows.Count + 1
.Cells(LgS, 1) = sh.Cells(lg, 1)
.Cells(LgS, 2) = sh.Cells(lg, 2)
.Cells(LgS, 3) = sh.Cells(lg, 3)
.Cells(LgS, 4) = sh.Cells(lg, 4)
.Cells(LgS, 5) = sh.Cells(lg, 5)
.Cells(LgS, 6) = sh.Cells(lg, 6)
.Cells(LgS, 7) = sh.Cells(lg, 7)
.Cells(LgS, 8) = sh.Cells(lg, 8)
.Cells(LgS, 9) = sh.Cells(lg, 8)
Next
End Select
Next
End With
End Sub

Merci

Dragonwood
 
Dernière édition:

g.terro

XLDnaute Nouveau
Bonjour
Y a t'il une méthode pour ne compter qu'un certain nombre de lignes et non pas la totalité.
par exemple entre la ligne 2 et une ligne qui contiendrait un texte connu comme TOTAL par exemple.
Toute les lignes en dessous de la cellule TOTAL ne seraient pas copiées dans synthèse
J'ai essayé en utilisant srtsearch mais cela ne donne pas le résultat escompté

Sub Synthese()
Dim oSht As Worksheet
Dim lastRow As Long, i As Long
Dim strSearch As String
Dim t As Long
' t = GetTickCount
With Sheets("Synthèse")
.Range("A2:D65536").Delete
For Each feuille In Sheets
Select Case feuille.Name
Case "Synthèse", "Ajourné"
Case Else
lastRow = feuille.Range("A" & Rows.Count).End(xlUp).Row
strSearch = "TOTAL"

For i = 2 To lastRow - 2
If feuille.Range("A" & i).Value <> strSearch Then

LgS = .UsedRange.Rows.Count + 1
.Cells(LgS, 1) = feuille.Cells(lastRow, 1)
.Cells(LgS, 2) = feuille.Cells(lastRow, 7)
.Cells(LgS, 3) = feuille.Cells(lastRow, 8)
.Cells(LgS, 4) = CDate(feuille.Cells(lastRow, 9))
End If
Next i
End Select
Next
End With
End Sub

merci
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote