Critère de trie lié à une cellule, MacroExcel

Résolu/Fermé
BROCH002 Messages postés 10 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 janvier 2012 - 28 déc. 2011 à 09:13
BROCH002 Messages postés 10 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 janvier 2012 - 2 janv. 2012 à 07:58
Bonjour,

je n'ai aucune connaissance en VBA et je construis des macro via l'enregistreur ExceL

J'ai un fichier qui gère des références (2000) par des macros.
j'ai créé une macro de filtre pour traiter chaque référence, et l'ai dupliqué autant de foi qu'il y a de référence.
Existe-il un moyen de modifier ces macros automatiquement pour tout changement de référence. une liste de référence se trouvant dans la feuil3 servant de base de données, exemple:

3 feuilles.

Feuil1, Base de donnée.
Feuil2, Page d'affichage des données triées
Feuil3, liste des références.

Ce que j'essaye de réaliser c'est lié dans la macro, le critère de trie à la cellule correspondante "A1" dans la feuil3 (BLEU dans l'exemple". modifié en "Vert").

Sub MACRO1()


Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
"BLEU", Operator:=xlAnd
Sheets("Feuil2").Range("A2").FormulaR1C1 = "BLEU"
Range("B2").FormulaR1C1 = "=Feuil1!R[-1]C[2]"
With Range("B2")
.Value = .Value
End With
Sheets("Feuil2").Select

End Sub


Sub MACRO1()


Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
"VERT", Operator:=xlAnd
Sheets("Feuil2").Range("A2").FormulaR1C1 = "VERT"
Range("B2").FormulaR1C1 = "=Feuil1!R[-1]C[2]"
With Range("B2")
.Value = .Value
End With
Sheets("Feuil2").Select

End Sub



Les données de la feuil1 ce mettant a jour à chaque fois que je réceptionne la fichier à trier.

Est-ce un rêve utopique, ou est-ce réalisable?

Merci de votre collaboration, les références sont changeantes en permanence, vous comprenez mon problème.

Merci d'avance de votre aide.

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2011 à 11:03
bonjour

pas trop compris ta deùande mais....

si tu veux fitrer sur par exemple "bleu" ou "vert" ou autre coluleur"

Sub filtrer_svt_critere(critère)
Application.ScreenUpdating = False
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
critère, Operator:=xlAnd

With Sheets("Feuil2")
     .Range("A2") = critère
     .Range("B2").FormulaR1C1 = "=Feuil1!R[-1]C[2]"
     .Activate
End Sub

Sub tester()
filtrer_svt_critere "VERT"
End Sub


remarques:
il ne sert à rien d'utiliser display.alerts dans ce cas; d'autre part si tu l'utilises il faut ABSOLUMENT le fermer par False car sinon toutes les autre macros resteront displayalerts= true d'où sérieux problèmes à venir

j'ai supposé que B2 était en feuille 2 mais pourquoi écrire une formule (tu pourrais alors l'écrire à la main sans macro puisque tu applelles toujours la m^me cellule)


0
BROCH002 Messages postés 10 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 janvier 2012
28 déc. 2011 à 17:23
Bonjour,

Le problème viens du fait que A1 est la première cellule et que j'en ai 2000 autres, Dernière actuelle A2132.
Ce que je souhaiterais c'est que la macro face référence au contenu de la cellule et que si il change, la macro s'adapte pour le trie.
dans mon exemple c'est une couleur (Bleu) ,si je change la cellule A1 en Vert, la macro modifie "bleu" en "Vert".

bonne soirée
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
28 déc. 2011 à 19:04
attends! "vert", c'est un texte ou la couleur de la cellule ?

A1 est la seule qui déclenche le filtre?
0
BROCH002 Messages postés 10 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 janvier 2012
Modifié par BROCH002 le 28/12/2011 à 20:53
J'ai mis des couleurs comme j'aurais pu mettre une réf y, ce n'est pas une couleur.
Il y a actuellement 2132 références, de A1 à A2132 dont certaines changes tous les jours, par réception de mise à jour, ces références sont triées par des macros remplissant une feuille.
Autant de macros que de références. Si la cellule A1 change, actuellement je change la macro1. Ce que je souhaiterais c'est qu'elle se modifie seule, en liant le code du trie de la macro à la valeur de la cellule. Il peut y avoir 15 à 20 références qui changent journellement d'où ma recherche d'automatisation.

Merci d'avance.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
29 déc. 2011 à 11:04
Bonjour vous 2,

Si j'ai bien compris (et j'en doute), la fonction de michel s'adapte parfaitement à votre souci. Suffit de changer la procédure d'appel de la fonction en y intégrant la valeur contenue en A1 comme critère :
Sub filtrer_svt_critere(critère)
Application.ScreenUpdating = False
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
critère, Operator:=xlAnd

With Sheets("Feuil2")
     .Range("A2") = critère
     .Range("B2").FormulaR1C1 = "=Feuil1!R[-1]C[2]"
     .Activate
End Sub

Sub tester()
Dim Crit As String
Crit = Sheets("Feuil1").Range("A1")
filtrer_svt_critere Crit
End Sub

Non? Ben alors j'ai pô compris...
0
Bonjour,

j'ai fait le test,
En lançant la macro "Tester", la cellule A2 de la feuil2 affiche l'intitulé de la colonne A de la feuil1 (Couleur). Le critère de trie de la colonne A de la feuil1 est l'intitulé de cette colonne (Couleur). Le trie en feuil2 indiquant 0.
Ce que je souhaite, c'est que ce soit la cellule A1 de la feuil3 qui s'affiche en A2 de la Feuil2 et comme critère de trie en colonne A de la feuil1.

Lorsque je change la macro "Tester" de cette manière:

Sub tester()
Dim Crit As String
Crit = Sheets("Feuil3").Range("A1")
filtrer_svt_critere Crit
End Sub

Cela bug.

c'est pas très claire, je voudrais bien vous faire parvenir un fichier (fluet), mais je ne sais pas comment le joindre à ce forum.

cordialement et bonnes fêtes.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
29 déc. 2011 à 12:06
Cela bug. Manque cruel de précision...
A tenter :
Sub tester() 
Dim Crit As String 
With Sheets("Feuil3")
    Crit = .Range("A1") 
End With
filtrer_svt_critere Crit 
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 déc. 2011 à 12:15
c'est que ce soit la cellule A1 de la feuil3
!!!!!!
C'est nouveau ca!
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « non vous n'avez pas compris mon problème (rarement, je n'ai pas bien expliqué) il faut en plus que.... »
0
Bonjour, Michel_m

Je n'ai que transcris le résultat de la macro en spécifiant ce qui est attendu.
De quelle manière doit on le faire sans lever un tel courroux.
si je vous ai blessé c'est bien involontaire.

Je vais tester la modification proposer par pijacu.

Merci de votre aide à vous deux.
0
Bonjour,

Merci pijacu, vous m'avez bien aidé, dans le fichier test, cela fonctionne.
je vais tenter de l'appliquer à mon fichier de 2000 références.

Bonne fêtes à tous les deux et merci de votre aide.

Broch002
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
30 déc. 2011 à 08:42
De rien.
Bonne fêtes à toi aussi.
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour, Pijacu.

Comment demander au critère de trie d'être" différent de Bleu (" <>bleu") au lieu de ("Bleu"). J'ai cherché avec le code de trie classique avec les <>, et il ressort comme erreur (police devenant rouge).

Application.ScreenUpdating = False
Sheets("Détail Commande").Range("$C$5:$O$30000").AutoFilter Field:=5, Criteria1:= _
<>critère, Operator:=xlAnd

Mes codes classiques
trie pour "bleu"
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
"BLEU", Operator:=xlAnd.

trie pour différent de bleu.
Sheets("Feuil1").Range("$A$5:$H$50000").AutoFilter Field:=1, Criteria1:= _
"<>BLEU", Operator:=xlAnd

Comment puis-je modifier ce critère.
Merci d'avance.

Broch002.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
30 déc. 2011 à 13:19
Bonjour,
Avez vous essayé d'enregistrer cette procédure par l'enregistreur de macro?
Si oui, quel est le code donné,
Si non, essayez et revenez avec le code de l'enregistreur...
0
BROCH002 Messages postés 10 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 2 janvier 2012
2 janv. 2012 à 07:58
Bonjour,

Voici la macro complète, enregistrer avec l'enregistreur.

Sub BLEU()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Feuil1").Select
ActiveSheet.Range("$A$5:$H$50000").AutoFilter Field:=2, Criteria1:= _
"<>BLEU", Operator:=xlAnd
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
ActiveSheet.Range("$A$1:$H$3000").AutoFilter Field:=2

End Sub.

Ce que cette macro réalise, c'est une élimination de tout ce qui n'est pas "bleu" dans la Feuil1.
Dans l'ordre, je filtre par "différent de", je sélectionne toutes les lignes triées puis je les efface.
et j'annule le filtre pour n'avoir que le bleu.

Merci d votre aide.
0