Transfert de plages de plusieurs feuilles suivant critères sur une feuille
Bonjour à tous,
Je travaille sous excel 365 et le problème se pose sur un classeur contenant plusieurs feuilles (dans l'exemple j'en ai mis 4 mais il peut y en avoir 50)
Je cherche une solution afin de récupérer un ensemble de cellule sur plusieurs ligne dans les différentes feuilles (1, 2, 3,...) pour lesquelles la valeur de la colonne statut est différente de "Annulée" ou "close" et de les reporter dans la feuille synthèse.
Je vous joins un fichier que j'ai épuré de toute données afin d'éclairer un peu plus mes propos.
Je précise que je souhaiterai réaliser l'opération par le déclenchement d'une macro par le bouton MAJ sur la feuille synthèse
En vous remerciant pour votre aide
Thierry
Bonjour et bienvenue sur le forum
Un essai à tester. Te convient-il ?
Bye !
Bonjour GMB,
Merci de t'intéresser à mon problème.
Ta macro correspond bien à ce que je veux, mais je ne la comprends absolument pas, pourrais-tu me la commenté afin que puisse me 'lapproprier un peu plus.
J'aurai une demande complémentaire...
Maintenant que l'on a récupérer toutes les lignes qui nous intéresse serait-il possible de mettre un lien hypertexte sur le numéro placé en colonne A de la feuille synthèse afin que lorsque l'on clique dessus on soit automatiquement positionné sur la ligne de la feuille correspondante (la sélection de la cellule contenant le numéro en colonne A de la feuille 1,2,3 est suffisant).
Et en bonus serait-il également possible de rappeler le nom de l'onglet idéalement dans la colonne B mais pour simplifier on peut envisager de la positionner en colonne A. Je ne sais pas si tes tableaux sont facilement manipulables.
Si jamais j'avais besoin de vérifier une autre condition comment faudrait-il s'y prendre? Je m'explique je voudrais éventuellement limiter la remonté des lignes contenant un numéro dans la colonne A des feuilles 1, 2, 3, car dans l'utilisation il sera possible qu'il y ait d'autres infos que je souhaite ne pas voir.
Désolé pour mes infos à l'emporte pièce, mais je butais tellement sur cette première étape que maintenant que je vois une solution, le fonctionnement du fichier final est plus clair.
Encore Merci
Thierry
Bonjour à tous !
Pour votre information, la demande est multipostée....
Bonsoir JPL
Effectivement, je me suis permis de multiposter ma demande car les réponses apportées en premier lieu ne répondent pas vraiment a mes attentes.
En effet je souhaite trouver une solution en Vba et propositions faites sont de me toiner vers du powerquery.
C’est peut-être le plus efficace mais je ne maitrice absolument pas.
En vba meme si je ne suis pas capable de trouver le code pour repondre a ma demande je suis plus a l’aise pour l’adapter.
Ici la proposition de GMB a repond totalement a ma demande.
Voilà j’espère que mon explication te suffira comme justification…
Je ne vois pas vraiment l’intérêt de ton propose si ce n’est d’apporter de la suspicion sur ma demande qui est somme toute légitime.
Cdlt
Thierry
Bonjour
Nouvelle version. Pour ce qui concerne les liens hypertextes, désolé mais je n''y suis pas parvenu.
Bye !
Bonjour à tous
Avec beaucoup de lecture et l'aide de quelque un d’entre vous j'ai réussi à créer une macro qui répond exactement à mon besoin.
Certes les puristes y trouveront certainement à redire, mais n'étant pas un développeur VBA, je crée des macros dans un but de me simplifier la tache.
Du coup je la poste si elle peut aider d'autre personne qui comme moi cherchait un déblocage pour obtenir une macro répondant à son besoin
Option Explicit
Sub Liste()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Application.EnableEvents = False
Dim Feuille As Worksheet ' Feuilles
Dim Fsynth As Worksheet ' Feuille synthèse
Set Fsynth = Feuil2 ' Définition feuille de synthèse
Dim lvS As Long ' 1er ligne vide de la feuille synthèse
Dim dlS As Long ' Détermination de la dernière ligne de la feuille synthèse
Dim dlF As Long ' Détermination de la dernière ligne de la feuille traitée
Dim n As Long ' Numéro de la ligne en cours dans la feuille traitée
Dim c As Range ' Cellule devant repondre au critère dans la feuille traitée
Dim rngc As Range ' Plage des cellules devant repondre au critère dans la feuille traitée
Dim rngtbl As Range
Fsynth.Select
ActiveSheet.Unprotect ""
lvS = Fsynth.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Détermination de la 1ere ligne vide sur la synthèse
If lvS > 17 Then Fsynth.Range("A17:k" & lvS).Delete ' si 1ere ligne vide sur la synthèse > 17 alors on supprime toutes les données
lvS = Fsynth.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Détermination de la 1ere ligne vide sur la synthèse
Fsynth.Range("A" & lvS).Select ' Sélection de la cellule en colonne A de la 1ere ligne vide sur la synthèse
For Each Feuille In ThisWorkbook.Worksheets ' Traitement de chaque feuille du classeur
If (Feuille.Name <> "Paramètres" And Feuille.Name <> "Synthèse" And Feuille.Name <> "CR" And Left(Feuille.Name, 3) <> "Exp") Then ' On exclue les feuilles...
dlF = Feuille.Range("A" & Rows.Count).End(xlUp).Row 'Détermination de la dernière ligne de la feuille traité
For n = 17 To dlF ' On va traiter de la ligne 17 à la derniere ligne de la feuille en cours
' On défini les critères pour lesquels on veut récupérer les lignes
If ((Feuille.Range("H" & n) = "" And IsNumeric(Feuille.Range("A" & n)) = True) Or (Feuille.Range("H" & n) = "Ouverte" And IsNumeric(Feuille.Range("A" & n)) = True) Or (Feuille.Range("H" & n) = "25%" And IsNumeric(Feuille.Range("A" & n)) = True) Or (Feuille.Range("H" & n) = "50%" And IsNumeric(Feuille.Range("A" & n)) = True) Or (Feuille.Range("H" & n) = "75%" And IsNumeric(Feuille.Range("A" & n)) = True) Or (Feuille.Range("H" & n) = "100%" And IsNumeric(Feuille.Range("A" & n)) = True)) Then
Feuille.Range("A" & n & ":I" & n).Copy Destination:=Fsynth.Range("A" & lvS) ' On copie la ligne répondant au critère et on la colle dans la synthèse
' On défini un lien hyper texte vers la ligne de la feuille concernée
Fsynth.Range("A" & lvS).Hyperlinks.Add Anchor:=Fsynth.Range("A" & lvS), Address:="", SubAddress:="'" & Feuille.Name & "'!A" & n & ":I" & n & " "
lvS = Fsynth.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Détermine la nouvelle ligne vide sur la synthèse pour coller la nouvelle ligne répondant au critère toujours sur la même feuille
End If
Next
lvS = Fsynth.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Détermine la nouvelle ligne vide sur la synthèse pour coller la nouvelle ligne répondant au critère de la nouvelle feuille
End If
Next
dlS = Fsynth.Range("A" & Rows.Count).End(xlUp).Row ' mise à jour de la dernière ligne dans le bilan
Set rngtbl = Range(Cells(17, 1), Cells(dlS, 9)) ' définition plage tableau synthèse
' mise en forme tableau synthèse
rngtbl.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = RGB(14, 56, 102)
.TintAndShade = 0
.Weight = xlMedium
End With
Fsynth.Select
ActiveSheet.Protect ""
Fsynth.Range(Cells(8, 3).Address).Select
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
Application.EnableEvents = True
MsgBox "La mise à jour est terminée", 64, "Etat de mise à jour"
End Sub