Prb d'execution de Macro: Module VS Worksheet

Résolu
Littleshoe Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Littleshoe Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
Salut tout le monde,

Je debute sur VBA et j'ai comme le titre du poste l'indique un petit soucis avec l'exécution d'une macro.
Voici le code:

Sub Macro1()

    Range("A1:A19").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "E1"), Unique:=True
    Range("E2:E100").Select
    Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

    Range("H1:H19").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "K1"), Unique:=True
    Range("K2:K20").Select
    Selection.Sort Key1:=Range("K2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal


End Sub


Elle l'assignant a un bouton la macro fonctionne (le code est dans un module), mais je n'arrive pas a la mettre en place en l,insérant dans la feuille et a la faire exécuter avec le Mode (Activate) ou Selection Change,

Pouvez m'aider?

Merci d'avance,
A voir également:

3 réponses

Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour
D'après ce que vous dites, si vous voulez intégrer ce code dans le module de la feuille avec Worksheet_SelectionChange, cela signifie que chaque fois que vous sélectionnerez une quelconque cellule, ça exécutera un filtre suivi d'un tri. Etes-vous bien sûr que cela fasse cela?,
cdlt
0
Littleshoe
 
Bonjour,
et merci pour votre reponse,

Pour repondre a votre question : J'ai une liste de produit dans une feuille. l'operateur peut en ajouter. Du coup en ajoutant des produits, la macro permet de filtrer, creer une liste dans une nouvelle colonne sans les doublons et de les ranger par ordre alphabetic. Cette nouvelle liste est relie a une liste deroulante dynamique (avec la fonction decaler).
En gros a chaque fois que l'operateur rajoute un produit, la liste deroulante est mise a jour.

Le code fonctionne en tant que module, mais je n'arrive ni a la faire fonctionner en mode Worksheet_Activate ni en mode Worksheet_SelectionChange.

Est possible?
Merci d'avance
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour Littleshoe,

Voici ta macro telle que je l'ai comprise qui fonctionne comme tu voudrais sur changement et avec des plages qui s'agrandissent automatiquement.

Private Sub Worksheet_Change(ByVal sel As Range)
If Not Intersect(Range("A:A"), sel) Is Nothing Then
    ' modification colonne A
    Columns("E").ClearContents
    Cells(1, "A").Resize(Cells(Rows.Count, "A").End(xlUp).Row, 1).AdvancedFilter _
         Action:=xlFilterCopy, CopyToRange:=Range("E1"), Unique:=True
    ' copie colonne E triée sans doubles
    With Cells(1, "E").Resize(Cells(Rows.Count, "E").End(xlUp).Row, 1)
        .Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End With
End If
If Not Intersect(Range("H:H"), sel) Is Nothing Then
    ' modification colonne H
    Columns("K").ClearContents
    Cells(1, "H").Resize(Cells(Rows.Count, "H").End(xlUp).Row, 1).AdvancedFilter _
        Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True
    ' copie colonne K triée sans doubles
    With Cells(1, "K").Resize(Cells(Rows.Count, "K").End(xlUp).Row, 1)
        .Sort Key1:=Range("K2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    End With
End If
End Sub
0
Littleshoe
 
salut gbinforme,

Merci pour ton message et surtout ta reponse.

Mais du coup il y a plusieurs choses que je ne comprend pas:
- If Not Intersect(Range("A:A"), sel) Is Nothing Then?

- Cells(1, "A").Resize(Cells(Rows.Count, "A").End?

Pourquoi as tu change la macro qui marchait correctement sous un bouton?
Est ce parce que cette macro ne fonctionnait pas si on l'appliquait a une feuille?

Merci pour d'avance.
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

If Not Intersect(Range("A:A"), sel) Is Nothing Then
Ceci teste si la modification a été effectuée dans la colonne A

Cells(1, "A").Resize(Cells(Rows.Count, "A").End?
Ceci détermine la longueur de ta plage

Est ce parce que cette macro ne fonctionnait pas si on l'appliquait a une feuille?

Il me semble que c'était ta question ? je n'arrive pas a la mettre en place en l,insérant dans la feuille et a la faire exécuter avec le Mode (Activate) ou Selection Change,

Ta fonction limitait ta saisie à 19 lignes, je l'ai mise évolutive et fonctionnelle sur "Selection Change"
0
Littleshoe Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Hello, desole pour la temps de reponse, mais avec 7 de decalge horaire, c'est pas evident.

Merci pour te reponse, cela m'a beaucoup aide,
Ainsi, si on veut mettre une macro (module) a une macro inserer dans "Worksheet", il faut que le language soit adequat?
Alors pourquoi la fonction bugge quand j'ai voulu la mettre sous "Selection Change"?
Qu'est que l'ordinateur comprenait pas?

Je sais si c'est comprehensible...

Merci d'avance.
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonsoir,
Qu'est que l'ordinateur comprenait pas?
Sans avoir la façon dont tu as testé, ce n'est pas facile de savoir.
Je comprends que tu es été perturbé par ma modification mais elle était destinée à te faire voir que lorsque l'on fait une macro il ne faut pas figer les plages car si tu rentrais en ligne 20 elle n'était plus prise en compte et une macro ce n'est pas fait pour devoir la modifier chaque fois qu'il y a une ligne de plus : c'est l'inconvénient de la fonction Range qui est figée.
0
Littleshoe Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   > gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention  
 
Hello gbinforme,

Merci pour ces precisions !
super sympa de ta part
0