Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Compiler dans une feuille de synthèse plusieurs feuilles
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.
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 é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 ?
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.
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.
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.
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.
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
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("A265536").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
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.