Macro synthese

Annette

XLDnaute Occasionnel
Bonsoir le forum,

Je reviens vers vous pour obtenir de l'aide pour une macro (je suis un peu plus douée pour les formules :)).

Je souhaite par le biais d'une macro, récupérer les données par condition de 31 onglets nommés.
ceci afin d'alléger mon classeur car les formules l'allourdissent drôlement.
En souhaitant avoir été claire.

Si une bonne âme pouvait me proposer une solution :rolleyes:.

Merci pour votre aide.

Cordialement
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Bonsoir à tous

Annette
Ce sujet a déjà été traité de nombreuses fois sur le forum.
Donc consulter les archives, comme le conseille d'ailleurs la charte du forum ;)
Demandeur
1 – Un outil de recherche sur le forum permet de voir si la question a déjà été posée.
Ne pas hésiter à l’utiliser.
Lien vers le moteur de recherche
Voir aussi du côté de fonctionnalité native d'Excel:
Données/Consolider
 
Dernière édition:

Annette

XLDnaute Occasionnel
Re : Macro synthese

Bonsoir Staple1600,

Merci pour votre réponse, mais j'ai déjà effectuée une recherche et les résultats ne me conviennent pas car à part changer quelques plages dans une macro, je ne sais pas ... mais ne désepère pas un jour de pouvoir arriver à créer moi-même une jolie macro.
Ma demande est, je pense un peu particulière.
Avez-vous ouvert le classeur joint ? Des détails y sont inscrits.
Je continue de chercher :).

Cordialement
P.S: Pour notre autre discussion, je continue délaborer et reviens vers vous lorsque le fichier "sera cadenassé".
 

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Re


Annette
1) Si le demandeur ne spécifie dans son premier message qu'il a fait des recherches dans les archives, on ne peut pas le deviner ...
(Entre nous, soit dit, si recherches il y a eu, on devrait trouver des bouts de codes VBA traduisant les essais infructueux déjà tentés, non ? ;))

2) Oui, j'ai ouvert la PJ (que j'ai trouvé un peu trop sommaire ;) , manque de détails)


3) Je n'ai pas oublié nos précédents échanges dans ton autre fil.

PS: Je ne suis plus le genre de membre à proposer des solutions clés en main ;)
Je suis plus enclin à inciter le demandeur à "mouiller le maillot", à mettre les mains dans le cambouis.
Bref à s'impliquer dans la résolution de sa question.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Re


Annette
Voici un début de piste que je vous laisse creuser un peu
la macro a c'est pour boucler sur les feuilles désirées
Code:
Sub a()
Dim ws  As Worksheet
For Each ws In Worksheets
If Len(ws.Name) = 2 Then
MsgBox ws.Name
End If
Next
End Sub
la macro b filtre les données désirées
Code:
Sub b()
'on filtre
ActiveSheet.Range("$B$10:$W$21").AutoFilter Field:=8, Criteria1:="AA"
'ici code pour copier le résultat du filtre
End Sub
Il faudrait donc mixer et compléter ces deux macros pour copier les résultats des filtres sur la feuille synthèse.

Qu'en pensez-vous ?
 

Annette

XLDnaute Occasionnel
Re : Macro synthese

Staple 1600,

Merci pour ce retour.
Veuillez pardonner ma parfaite méconnaissance pour les macros mais je tente de décrypter:

Dans la macro A il me faut nommer les 31 feuilles comme ceci ?
If Len(ws.Name) = 2 Then
If Len(ws.01,02,03,etc...) = 2 Then

Dans la macro B les critères peuvent contenir n'importe quel nom (d'où mon idée de me réferer à la cellule Y4 de l'onglet synthèse) et la plage ("$B$10:$W$21") peut elle aussi être plus ou moins longue (tout dépendra du nombre de lignes récupérées pour tel ou tel article).

Mis à part ceci je n'en sait pas plus sur les macros...:eek:.

Qu'en pensez-vous ?
 

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Re

Annette
Je suis dans un bon jour ;)
Alors voici une macro presque aboutie
Code:
Sub a()
Dim ws  As Worksheet, pf As Range, pcopy As Range, dl&
For Each ws In Worksheets
If Len(ws.Name) = 2 Then
ws.Range("$B$10:$W$21").AutoFilter Field:=8, Criteria1:="AA"
Set pf = ws.[_FilterDatabase]
Set pcopy = pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
dl = Sheets("Synthese").Cells(Rows.Count, "I").End(3).Row
pcopy.Copy Sheets("Synthese").Cells(dl + 1, "B")
End If
Next
End Sub
Sélectionner les cellules en rouge sur la feuille Synthese puis faire Effacer tout
ensuite lancer la macro
Je vous laisse peaufiner la suite (notamment la suppression des filtres sur les feuilles 01,02,... 31)

NB: Il nous reste à rendre le critère du filtre variable (liée à un InputBox ou à la cellule Y4 de la feuille Synthese)

Si vous avez des questions, sur les lignes de codes , n'hésitez pas ;)
(sans oublier au préalable de consulter l'aide en ligne de VBA -> touche F1)

PS
: Chercher Len dans l'aide VBA (L'équivalent de len en formule est NBCAR)
Dans la macro A il me faut nommer les 31 feuilles comme ceci ?
If Len(ws.Name) = 2 Then
If Len(ws.01,02,03,etc...) = 2 Then
Il s'agit ici de boucler sur les feuilles dont le nom ne contient que deux caractères:
ce qui est le cas des feuilles 01,02,....31

et la plage ("$B$10:$W$21") peut elle aussi être plus ou moins longue (tout dépendra du nombre de lignes récupérées pour tel ou tel article).
Il y a pléthore d'exemple pour déterminer la dernière ligne non vide d'une colonne, ou d'un plage de cellule
Un indice : End(xlUp) ou en raccourci End(3)
 
Dernière édition:

Annette

XLDnaute Occasionnel
Re : Macro synthese

Staple 1600,

Grâce à vous j'avance ...
J'ai pu résoudre le critère du filtre variable mais je m'interroge sur plusieurs autres points.

1) N'est-il pas possible à chaque changement de critère de faire un RAZ auto du précédent "tableau trié créé" ?
2) Je trouve bizarre qu'un langage aussi puissant que VB doive poser des filtres sur tableaux des onglets concernés afin de récupérer des données de tel ou tel article.
Dernier point, la macro peut-elle se lancer automatiquement sans passer par un bouton dès que le changement d'article est effectué ?

A part ces demandes spéciales, la macro fait le travail comme il faut mais je dois vous avouer que les filtres sur tableau me gènent car en fin de compte, les tableaux des onglets ne contiennent pas seulement des données...

Si vous êtes toujours dans votre bon jour ... je suis preneuse :).

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Re


Annette
Veuillez pardonner ma parfaite méconnaissance pour les macros
2) Je trouve bizarre qu'un langage aussi puissant que VB doive poser des filtres sur tableaux des onglets concernés afin de récupérer des données de tel ou tel article.
paradoxal, non ? :rolleyes:


Ma macro n'est qu'une possibilité parmi d'autres et comme je lai précisé plus bas
Je vous laisse peaufiner la suite (notamment la suppression des filtres sur les feuilles 01,02,... 31)
Je suis plus enclin à inciter le demandeur à "mouiller le maillot", à mettre les mains dans le cambouis.
Bref à s'impliquer dans la résolution de sa question.
Nous sommes désormais le jour d'après, et il est temps pour moi de rejoindre les bras de Morphée.

Je repasserai voir ultérieurement où en sont vos progrès ;)

PS
J'ai pu résoudre le critère du filtre variable
Pourquoi ne pas publier votre code dans le fil dans ce cas ?
Cela pourrait intéresser d'autres membres du forum qui passeraient dans ce fil.
 
Dernière édition:

Annette

XLDnaute Occasionnel
Re : Macro synthese

Vous avez raison, la nuit porte conseil, peut-être m'en donnera-t-elle ?

Bonne nuit
 

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Re


Annette
Vous avez zappé mon PS dans mon précédent message ?
Car je ne vois pas vos modifications du code VBA que je vous ai soumis apparaitre dans le fil ?

Bonne nuit également.

EDITION: Une petite dernière modif pour la route
Code:
Sub b()
Dim ws  As Worksheet, pf As Range, pcopy As Range, dl&, The_Crit$
The_Crit = InputBox("Saisir le critère", "Synthétisons, crénom!", "AA")
For Each ws In Worksheets
If Len(ws.Name) = 2 Then
ws.Range("$B$10:$W$21").AutoFilter 8, The_Crit
Set pf = ws.[_FilterDatabase]
Set pcopy = pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12)
dl = Sheets("Synthese").Cells(Rows.Count, "I").End(3).Row
pcopy.Copy Sheets("Synthese").Cells(dl + 1, "B")
ws.AutoFilterMode = False
End If
Next
End Sub
 
Dernière édition:

Annette

XLDnaute Occasionnel
Re : Macro synthese

Bonjour Staple 1600, bonjour le forum,

Effectivement, le PS a été complètement zappé :eek: et je vous remercie de rappeler que la base de ce forum est le partage.
J'ai fait le changement suivant:

The_Crit = InputBox("Saisir le critère", "Synthétisons, crénom!", "AA")
The_Crit = Range ("$Y$4")

Pour que la recherche s'effectue d'après la valeur de la cellule Y4 de la feuille synthèse.

Je remarque aussi qu'il n'y a plus de filtre sur les tableaux (c'est parfait comme ça).
Il ne reste plus qu'a résoudre avec votre aide :) ou bien l'aide d'un autre membre l'histoire du RAZ auto et du déclenchement évènementiel.

Merci pour vos suggestions.

Cordialement
 

Annette

XLDnaute Occasionnel
Re : Macro synthese

Pour faire suite à ma recherche de la macro qu'il me faut, j'ai ajouté ce morceau de code mais le changement s'effectue à la sélection de la cellule Y4 et non comme je le voudrais à son changement de valeur.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$Y$4" Then

Code complet:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$Y$4" Then
Dim ws As Worksheet, pf As Range, pcopy As Range, dl&, The_Crit$
The_Crit = Range("$Y$4")
For Each ws In Worksheets
If Len(ws.Name) = 2 Then
ws.Range("$B$10:$W$21").AutoFilter 8, The_Crit
Set pf = ws.[_FilterDatabase]
Set pcopy = pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12)
dl = Sheets("Synthese").Cells(Rows.Count, "I").End(3).Row
pcopy.Copy Sheets("Synthese").Cells(dl + 1, "B")
ws.AutoFilterMode = False
End If
Next
End If
End Sub

Auriez-vous des suggestions à me proposer ?
Merci pour votre aide.

Cordialement
 

jem37

XLDnaute Nouveau
Re : Macro synthese

Bonjour,

J'ai un petit soucis avec mon filtre, lorsque j'ai un affichage global, la mise en page est parfaite (bordure,...) mais une fois que je filtre un matériel précis, la mise en page est pas super. Dans l'exemple que j'ai joint, essayer de filtré le matériel "lit" et regarder le résultat de la mise en page obtenue. savez vous comment résoudre se problème ? (J'ai pensé à créer une macro avec deux version. 1 pour une version imprimable ou on a les cellules fusionné et 1 pour une version de filtrage avec aucune cellules fusionné. mais le problème c'est que j'ai aucune idée de comment créer cette macro, quel code entré ou autre en bref je n'est jamais utilisé de macro de ma vie.)

Merci d'avance pour vos réponse.
 

Fichiers joints

Annette

XLDnaute Occasionnel
Re : Macro synthese

Bonjour jem37,

Pour votre demande merci de bien vouloir créer votre propre discussion (bouton en haut à gauchede la page forum).

Cordialement
 

Annette

XLDnaute Occasionnel
Re : Macro synthese

A mon code non optimisé, je souhaite y intégrer ce morceau de code pour le RAZ auto dès changement de cellule (en fait juste avant la récupération de données).
Code:
Range("B5:W500").Select
Selection.ClearContents
Range("A1").Select
ActiveWorkbook.Save

Ci-joint mon fichier avec la macro actuelle

Merci pour vos suggestions
 

Fichiers joints

Annette

XLDnaute Occasionnel
Re : Macro synthese

Bonsoir le forum,

Après quelques recherches, je suis arrivée "à fixer mon problème de valeur de cellule".
Maintenant je souhaite y intégrer ce morceau de code pour le RAZ auto dès changement de cellule (en fait juste avant la récupération de données).

Code:
Range("B5:W500").Select
Selection.ClearContents
Range("A1").Select
ActiveWorkbook.Save

Ci-joint mon fichier avec la macro actuelle

Merci pour vos suggestions
 

Fichiers joints

Annette

XLDnaute Occasionnel
Re : Macro synthese

Plusieurs essais plus tard, voici mon code fonctionnel qui suit:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$Y$4" Then
Range("B5:W500").Select
Selection.ClearContents
Range("$A$1").Select
Dim ws As Worksheet, pf As Range, pcopy As Range, dl&, The_Crit$
The_Crit = Range("$Y$4")
For Each ws In Worksheets
If Len(ws.Name) = 2 Then
ws.Range("$B$10:$W$21").AutoFilter 8, The_Crit
Set pf = ws.[_FilterDatabase]
Set pcopy = pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12)
dl = Sheets("Synthese").Cells(Rows.Count, "I").End(3).Row
pcopy.Copy Sheets("Synthese").Cells(dl + 1, "B")
ws.AutoFilterMode = False
End If
Next
End If
End Sub

Je ne sais pas si il peut être optimisé et si un membre voit une amélioration, je suis preneuse :).

Un grand merci au forum et plus particulièrement à Staple1600.

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Macro synthese

Bonsoir à tous

Annette
Un peu de lecture
Evenements de l'objet Worksheet
pour savoir comment faire ceci (by your own ;))
Maintenant je souhaite y intégrer ce morceau de code pour le RAZ auto dès changement de cellule (en fait juste avant la récupération de données).
Edition: désolé pour la collision, pendant que tu postais ton dernier message, je rédigeais le mien ;)

Et une petite cure de régime de code VBA en passant ;)
Code VB:
Sub RAZ()
Sheets("NOMDETAFEUILLE").Range("B5:W500")=Empty
'remplacer NOMDETAFEUILLE par le nom de la feuille concernée pare le RAZ
'nom à mettre entre des " "
End Sub
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas