Prb d'execution de Macro: Module VS Worksheet

Résolu/Fermé
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016 - Modifié par pijaku le 12/03/2015 à 07:55
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016 - 6 avril 2015 à 08:20
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
21 mars 2015 à 10:39
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
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 718
23 mars 2015 à 09:06
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
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 718
23 mars 2015 à 12:06
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 lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
24 mars 2015 à 02:05
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 718
24 mars 2015 à 21:47
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 lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
6 avril 2015 à 08:20
Hello gbinforme,

Merci pour ces precisions !
super sympa de ta part
0

Discussions similaires