IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupération liste des valeurs d'un filtre auto [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Récupération liste des valeurs d'un filtre auto
    Bonjour à tous,

    J'ai un soucis pour créer des boucles.

    JE souhaiterais faire un boucle sur les valeurs d'un filtre auto et je ne sais comment faire.

    Exemple:

    Colonne B avec comme valeurs:
    Zone 1
    Zone 2
    Zone 1
    Zone 3
    Zone 2
    Zone 2
    Zone 1
    Zone 3

    Je souhaiterais faire une boucle du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For each value of colonne B (sans doublon):
     
    display value.
     
    end
    Donc résultat attendu

    Zone 1
    Zone 2
    Zone 3

    Merci d'avance.

    Cordialement.

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Si tu appliques un filtre avant de faire ta boucle, tu peux utiliser la propriété SpecialCells:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cel As Range
    For Each cel In Range("A:A").SpecialCells(xlCellTypeVisible)
        '...
    Next cel
    Cela te permet de parcourir seulement les cellules visibles.

    Ensuite, pour ne pas avoir de doublons, tu peux créer un array que tu complètes au fur et à mesure de ta boucle avec les valeurs de cellules que tu parcourt. A chaque iteration, si la valeur est dans l'Array, c'est qu'elle a déjà été affichée, donc pas besoin de l'afficher à nouveau.

    Une autre solution :
    • Copier les cellules à parcourir (en utilisant SpecialCells)
    • Coller dans une autre feuille
    • Utiliser la fonctionnalité d'Excel pour éliminer les doublons et obtenir le code correspondant avec l'enregistreur de macro.
    • Afficher toutes les données de cette nouvelle liste

    Il faudra utiliser l'enregistreur de macro pour obtenir un début de code pour cette dernière solution.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci Riaolle,

    Cependant je ne vois pas comment faire étant débutant en vba je voudrais faire un code correspondant à cece:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub toto()
    Dim Cel As Range
    Dim ListeValeurs() As String
    For Each Cel In Range("D6:D30000")
        if Cel est non presente dans ListeValeurs then
        ListeValeurs(i) = Cel
        End If
    Next Cel
    End Sub
    Quelqu'un pourrait il m'aider svp.

    Merci

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Sub test()
        Dim cel As Range
        Dim listVal(0) As String
        Dim n As Long
        Dim i As Long
        i = 0
        n = Cells(.Rows.Count, 1).Row    'permet d'avoir la dernière ligne de la feuille
     
        For Each cel In Range("D6:D" & n).SpecialCells(xlCellTypeVisible)    'boucl sur les cellules visibles de la feuille
            If IsError(Application.Match(cel.Value, listVal, 0)) Then           'si on ne trouve pas la valeur de la cellule dans le tableau
                i = i + 1
                ReDim Preserve listVal(i)          'on augmente la taille du tableau de 1
                listVal(i) = cel.Value                 'on ajoute au tableau
            End If
        Next cel
     
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci Riaolle,

    ependant le code ne fonctionne pas.

    J'ai essayé de le modifier comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub test()
        Dim cel As Range
        Dim listVal() As String
        Dim i As Long
     
        i = 0
     
    ' VARIABLES POUR TRAITEMENT '
    Dim PremiereLigne As Integer
    Dim ColonneZone As String
    Dim DerniereLigne As Integer
    Dim DerniereColonne As String
     
    ' PREMIERE LIGNE DE DONNEES '
    PremiereLigne = 6
    ' PREMIERE COLONNE DE DONNEES '
    ColonneZone = "D"
    ' DERNIERE LIGNE VIS A VIS DE LA COLONNE ZONE '
    DerniereLigne = Worksheets("GENERAL SOURCE").Range(ColonneZone & Rows.Count).End(xlUp).Row
     
        For Each cel In Range(ColonneZone & PremiereLigne & ":" & ColonneZone & DerniereLigne).SpecialCells(xlCellTypeVisible)    'boucl sur les cellules visibles de la feuille
            If IsError(Application.Match(cel.Value, listVal, 0)) Then           'si on ne trouve pas la valeur de la cellule dans le tableau
                i = i + 1
                ReDim Preserve listVal(i)          'on augmente la taille du tableau de 1
                listVal(i) = cel.Value                 'on ajoute au tableau
            End If
        Next cel
     
        For i = LBound(listVal) To UBound(listVal)
        MsgBox listVal(i)
        Next i
     
    End Sub
    Dans la definition de la variable listval fallait enlever le 0 car sinon ce n'était pas un tableau dynamique par contre le code bloque au niveau de la ligne application.match et je ne vois pas pourquoi.

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    le code bloque au niveau de la ligne application.match
    Est-ce que tu peux donner un peu plus de précisions. Est-ce qu'il y a un message d'erreur? Si oui, lequel? Est-ce que ça bloque dès la première iteration?

    EDIT : et utilise les balises code (#) quand tu écris du code, c'est plus facile à lire

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Désolé Riaolle pour les #.

    Le code erreur est le suivant:

    Erreur d'execution '5':
    Argument ou appel de procédure incorrect

  8. #8
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Tu as cette erreur tout simplement car tu n'appel pas comme il faudrait ta fonction Match :
    Aide microsoft pour match

    En effet ce n'est pas un objet application mais un objet fonction du coup WorksheetFunction.Match et non Application.Match
    C'est en creusant qu'on fait des trous

  9. #9
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Tu as cette erreur tout simplement car tu n'appel pas comme il faudrait ta fonction Match
    WorksheetFunction.Match et non Application.Match
    On peut utiliser les 2 syntaxes. D'après ce que j'ai lu sur d'autres forums, la différence se trouve dans la gestion d'erreur. Mais j'ai pas tout à fait compris comment... la seule chose que je crois avoir comprise, c'est qu'a priori, Application.Match aurait une gestion d'erreur plus simple.

    Essaie en ajoutant:
    juste après avoir déclaré toutes tes variables.

  10. #10
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Il est vrai mais l'avantage de WorksheetFunction c'est que tu connais l'erreur tout de suite
    L'autre avantage est que tu peux utiliser Intellisense

    Même si il est vrai que en cas d'erreur tu plantes la macro
    C'est en creusant qu'on fait des trous

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour, bonjour !

    Non Al_22 ‼   C'est d'abord avant tout un objet Application

    WorksheetFunction n'ayant été rajouté bien plus tard et apparemment juste pour planter le VBA !
    Je l'ai pourtant encore expliqué récemment …
    Via Application cela ne plante pas si test via IsError ou IsNumeric ou via une affectation à une variable Variant.
    La ligne de code n° … Ah zut le code n'a pas été balisé conformément aux règles de ce forum !
    Bref la ligne ne pose pas de souci …

    Voilà, voilà !

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Je me confonds en excuse Marc-L
    C'est l'aide VBA qui m'a induit en erreur

    Et puis j'ai jamais connu les Application. en vba mais seulement en .net du coup je pensais pas qu'on pouvais les utiliser aussi
    Bref comme dirai l'autre "my bad"
    C'est en creusant qu'on fait des trous

  13. #13
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Ne pas se confondre en excuses pour si peu !

    Ayant moi-même déjà commis des bourdes plus importantes sur ce forum,
    dont une commac aussi à cause de l'aide VBA induisant en erreur …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci à vous tous.

    Cependant que ce soit l'un ou l'autre j'ai toujours le meme message d'erreur.

  15. #15
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Citation Envoyé par riaolle Voir le message
    Essaie en ajoutant:
    juste après avoir déclaré toutes tes variables.
    Normalement avec ce que t'as donné riaolle ça devrait être bon

    @Marc-L
    Si jamais tu repasses dans le coin je veux bien savoir ce qu'est une commac (jamais entendu parler de ça)
    C'est en creusant qu'on fait des trous

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par anthony77350 Voir le message
    Récupération liste des valeurs d'un filtre auto
    « - Hé Manu, tu descends ?
       - Et pourquoi faire ?! »

    Ici c'est pareil !   La "présentation" initiale nous laissant dans le brouillard,
    n'ayant donc aucune idée de la destination, je n'envisage déjà même pas une quelconque solution ! …

    Quant au message d'erreur, il est nécessaire de publier le code déjà balisé conformément aux règles de ce forum,
    il y a même une démonstration pour les moins doués, puis d'indiquer le numéro de la ligne déclenchant l'erreur,
    le numéro de l'erreur et le message de l'erreur.

    Pour rappel, lire l'aide associée au message d'erreur peut déjà mettre sur la piste de sa résolution …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Voici le code balisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Sub test()
     
    ' VARIABLES POUR TRAITEMENT '
    Dim PremiereLigne As Integer
    Dim ColonneZone As String
    Dim DerniereLigne As Integer
     
    Dim Cellule As Range
    Dim ListeValeurs() As String
    Dim i As Long
     
    ' PREMIERE LIGNE DE DONNEES '
    PremiereLigne = 6
    ' PREMIERE COLONNE DE DONNEES '
    ColonneZone = "D"
    ' DERNIERE LIGNE VIS A VIS DE LA COLONNE ZONE '
    DerniereLigne = Range(ColonneZone & Rows.Count).End(xlUp).Row
     
    ' VARIABLE NOMBRE DE VALEURS TROUVEES '
    i = 0
    ' BOUCLE SUR LA COLONNE ZONE '
    For Each Cellule In Range(ColonneZone & PremiereLigne & ":" & ColonneZone & DerniereLigne).SpecialCells(xlCellTypeVisible)    'boucl sur les cellules visibles de la feuille
        If IsError(WorksheetFunction.Match(Cellule.Value, ListeValeurs, 0)) Then           'si on ne trouve pas la valeur de la cellule dans le tableau
            i = i + 1
            ReDim Preserve ListeValeurs(i)          'on augmente la taille du tableau de 1
            ListeValeurs(i) = Cellule.Value                 'on ajoute au tableau
        End If
    Next Cellule
     
    For i = LBound(ListeValeurs) To UBound(ListeValeurs)
        MsgBox ListeValeurs(i)
    Next i
     
    End Sub
    L'erreur est sur la ligne 24.
    Etant débutant, j'ai fait mes recherches avant de poser des questions.
    Sinon je ne vois pas l'interêt de poser le problème.

    Merci à vous

  18. #18
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Al__22 Voir le message
    Si jamais tu repasses dans le coin je veux bien savoir ce qu'est une commac (jamais entendu parler de ça)
    C'est vrai que l'usage actuel n'a plus la même signification …
    Je parlais d'une erreur maousse, bref une énorme, limite grave !


    Citation Envoyé par anthony77350 Voir le message
    L'erreur est sur la ligne 24.
    Là Al_22 a raison comme ListeValeurs n'est pas initialisée …
    Et en appliquant donc ce qui a pourtant été clairement indiqué,
    à savoir remplacer   WorksheetFunction   par   Application   ?!
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    La première version était avec Apllication et j'ai la même erreur.

  20. #20
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Et j'attends toujours une réponse quant au but recherché ?

    Sinon modifie ton code en testant d'abord si la variable i est égale à zéro
    car dans ce cas il n'y a même pas besoin de Match

    Au passage on peut définir au préalable le nombre maximal d'éléments de la variable tableau
    via la fonction de feuille de calculs SOUS.TOTAL …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/10/2015, 13h49
  2. [POO] Récupération liste clef valeur depuis une applet
    Par Phoxtrot dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/04/2008, 12h59
  3. liste des valeur dans grille de paramètre
    Par racha dans le forum Reports
    Réponses: 1
    Dernier message: 05/04/2008, 19h17
  4. Liste des valeurs de l'attribut xml:lang
    Par ribrok dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 26/02/2008, 14h35
  5. Obtenir la liste des valeurs possibles d'un type
    Par pascalT dans le forum Langage
    Réponses: 5
    Dernier message: 05/10/2004, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo