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

Résolu
BROCH002 Messages postés 13 Statut Membre -  
BROCH002 Messages postés 13 Statut Membre -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. BROCH002 Messages postés 13 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      attends! "vert", c'est un texte ou la couleur de la cellule ?

      A1 est la seule qui déclenche le filtre?
      0
    2. BROCH002 Messages postés 13 Statut Membre
       
      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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. broch002
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. Broch002
       
      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
  4. Broch002
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      De rien.
      Bonne fêtes à toi aussi.
      A+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Broch002
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. BROCH002 Messages postés 13 Statut Membre
       
      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