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 :

AutoFilter n'actualise pas suite à un ComboBox_Change


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut AutoFilter n'actualise pas suite à un ComboBox_Change
    Re-Bonjour le forum !

    Cette fois-ci, je n'ai vraiment pas trouvé la solution... Je vous mets les 2 codes en brut et vous explique leurs fonctionnements, ainsi que l'endroit où ça bloque.

    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
    36
    Private Sub ComboBox1_Change()
        Dim CBG As Range, cellule As Range
        Dim derLig As Integer
     
        ComboBox2.Clear
     
        derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
     
        Range("A2:A" & derLig).AutoFilter
     
        Range("A2").AutoFilter Field:=13, Criteria1:=ComboBox1.Value, visibledropdown:=True
     
        Set CBG = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
     
        For Each cellule In CBG
            ComboBox2.AddItem (cellule.Value & " - " & Cells(cellule.Row, 4).Value)
        Next
    End Sub
    Private Sub ComboBox2_Change()
        Dim CodeBG As String
        Dim derLig As Integer
        Dim FP As Range
     
        derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
     
        CodeBG = Left(ComboBox2.Value, 4)
        Range("A2").AutoFilter Field:=3, Criteria1:=CodeBG, visibledropdown:=True
     
        If derLig > 1 Then
            Set FP = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
            TB1.Text = Cells(FP.Row, 1).Value
            TB2.Text = Cells(FP.Row, 12).Value
            TB1.Enabled = False
            TB2.Enabled = False
        End If
    End Sub
    NB1 : Le second code ne comprenait pas du tout la partie avec la variable derLig à l'origine, je l'ai rajoutée par après lorsque l'erreur était déjà existante pour savoir si ça me comptait la ligne ou non.
    Le premier code a pour objectif de :
    • Vider la ComboBox2
    • Déterminer la dernière ligne non vide et l'attribuer à la variable derLig
    • Revenir au filtre général en sélectionnant toute la table
    • Filtrer en fonction du résultat de la Liste Déroulante de la ComboBox1
    • Définir une nouvelle plage de cellules en fonction des résultats du filtre
    • Générer la liste déroulante de la ComboBox2 grâce à cette plage



    Le second code a pour objectif de :
    • Déterminer la dernière ligne non vide et l'attribuer à la variable derLig
    • Sortir le CodeBG qui correspond aux 4 caractères premiers caractères vers la gauche de la valeur dans la ComboBox2
    • Filtrer une seconde fois les résultats (déjà filtrés par le premier code) afin de n'afficher qu'une seule ligne - qui correspond au CodeBG
    • Définir une nouvelle plage, qui ici correspond à une ligne unique : résultat des filtres successifs
    • Attribuer à la TextBox1 et à TextBox2 leurs valeurs respectives
    • Verrouiller la modification à ces deux TextBox


    Le problème
    Tout se passe très bien lors de la première boucle, à savoir - Sélectionner dans la ComboBox1 PUIS sélectionner dans la ComboBox2. Le problème dans la réalisation du code (du coup dans ma réalisation à moi hihi) c'est que lorsque je décide, après avoir sélectionné au préalable une valeur dans la ComboBox2, de changer de nouveau ma variable dans la ComboBox1 grâce au menu déroulant, l'AutoFilter ne s'effectue pas et je me retrouve ainsi avec une page vide...Ce qui engendre indéniablement une erreur sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FP = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
    Puisqu'il n'existe plus rien de visible. Néanmoins, l'AutoFilter s'est effectué en sous-marin puisque lorsque je l'ai effectué d'une autre façon (sans que ça corresponde à ce que je recherche), j'ai trouvé un résultat.

    NB : Je perçois l'AutoFilter pendant une fraction de seconde avant qu'il ne disparaisse, visuellement parlant.

    Pour faire une synthèse
    Pb1 : AutoFilter "invisible"
    Pb2 : Ligne "Set FP" renvoie une erreur puisque rien n'est visible

    Question : Pourquoi le ComboBox2.Clear ne s'effectue-t-il pas lorsque je modifie la ComboBox1 avec la Liste Déroulante ? - ComboBox2.Clear est dans la Private Sub ComboBox1_Change()

    Solution envisageable : Serait-il possible, puisqu'il n'y a qu'une ligne de résultat affichée, de sortir les résultats directement grâce au numéro de ligne associé ?

    Je vous remercie pour l'attention portée à ma demande !

    Je vous souhaite à tous une agréable fin de journée

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Avant de lancer un AUtoFilter sur une plage déjà filtrée, il faut supprimer le filtre précédent avec un Range("A2").AutoFilter sans paramètre.

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour Menhir, et merci de ta réponse

    A quel endroit j'inscris cette ligne de code ? Pourrais-tu me préciser en quelle ligne il faudrait l'écrire s'il te plaît ?

    En analysant ta réponse, j'ai essayé de le placer à 2 endroits :

    Au tout début du ComboBox1_Change(), juste après la déclaration des variables - toujours la même erreur

    Entre les lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
     
    'ici
     
        Range("A2:A" & derLig).AutoFilter
    Devrais-je remplacer la ligne Range("A2:A" & derlig).AutoFilter par Range("A2").AutoFilter ? Est-ce que cela aura le même effet ? Je me pose cette question, car j'ai été surpris la première fois que j'ai utilisé le Range("A2").AutoFilter que ça filtre l'entièreté de ma table alors que je ne saisis que A2 en paramètre de Range.

    Bonne journée

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    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
    19
    20
    Private Sub ComboBox2_Change()
        Dim CodeBG As String
        Dim derLig As Integer
        Dim FP As Range
     
        derLig = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
     
        CodeBG = Left(ComboBox2.Value, 4)
        Range("A2").AutoFilter field:=3, Criteria1:=CodeBG, visibledropdown:=True
     
        On Error Resume Next
        Set FP = Range("C2:C" & derLig).Offset(0).SpecialCells(xlCellTypeVisible)
     
        If Err = 0 Then
            TB1.Text = Cells(FP.Row, 1).Value
            TB2.Text = Cells(FP.Row, 12).Value
            TB1.Enabled = False
            TB2.Enabled = False
        End If
    End Sub
    J'ai rajouté la ligne On Error Resume Next ainsi que la condition If Err = 0 Then... Ces lignes me permettent d'outrepasser l'erreur générée par l'AutoFilter. Bien que ce ne soit pas optimisé, puisque l'AutoFilter est effectué 2 fois (1 fois en invisible, 1 fois en visible) - Je ne mets pas en Résolu, puisque je n'ai pas trouvé la solution que je cherchais, néanmoins je peux continuer mon code en utilisant cette solution temporaire.

Discussions similaires

  1. IE n'actualise pas pour 1 valeur
    Par toniodp dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/03/2007, 09h05
  2. [VBA-E] Excel n'actualise pas les données
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/12/2006, 09h17
  3. [AJAX] Liste déroulante qui ne s'actualise pas avec XMLHttpRequest
    Par zoom61 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/11/2006, 09h52
  4. [AJAX] Donnée ne s'actualise pas
    Par karim53 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/10/2006, 15h13
  5. Enregistrement+actualisation= pas glop
    Par Tarba dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 21/06/2006, 09h11

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