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 qui ne sort aucune donnée alors que les filtres sont réinitialisés [XL-2016]


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 qui ne sort aucune donnée alors que les filtres sont réinitialisés
    Bonjour le forum,

    Tout d'abord je tiens à préciser que mes codes sont sûrement loin d'être optimaux, je n'utilise pas de TS ou autres, je n'ai vraiment plus de temps pour m'attarder sur de nouvelles connaissances qui me prendront du temps à réussir à mettre en place... à cause des délais cours qui m'ont été dernièrement imposés. J'aurai donc besoin de votre aide sur un point en particulier qui vient de me poser problème ce matin.

    En effet, j'ai une ComboBox contenant des Codes BG qui est alimentée automatiquement en fonction des valeurs renseignées à la fois dans la ComboBox Pavé 4 et Pavé 5. Le souci est que lorsque je change la valeur renseignée, à travers la ComboBox Pavé 5 par exemple, j'ai une erreur qui apparaît :

    Erreur d'Exécution '1004': Pas de cellules correspondantes

    Mon tableau filtré est complètement vide.

    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
    Private Sub T_Cons_CBP5_Change()
        Dim derLig As Integer
        Dim CBR As Range, CellCBR As Range
        Dim WbO As Worksheet
     
        Set Wb = ThisWorkbook
        Set WbO = Wb.Sheets(1)
     
        derLig = WbO.Cells(WbO.Rows.Count, 1).End(xlUp).Row
     
        WbO.Range("A2").AutoFilter
     
        WbO.Range("A2").AutoFilter Field:=12, Criteria1:=T_Cons_CBP5.Value
     
        Set CBR = WbO.Range(WbO.Cells(2, 2), WbO.Cells(derLig, 2)).SpecialCells(xlCellTypeVisible)
     
        T_Cons_CBBG.Clear
     
        For Each CellCBR In CBR
            T_Cons_CBBG.AddItem CellCBR.Value
        Next
    End Sub
    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 T_Cons_CBBG_Change()
        Dim derLig As Integer
        Dim CBR As Range, CellCBR As Range
        Dim WbO As Worksheet
     
        Set Wb = ThisWorkbook
        Set WbO = Wb.Sheets(1)
     
        derLig = WbO.Cells(Rows.Count, 2).End(xlUp).Row
     
        WbO.Range("A2").AutoFilter
     
        WbO.Range("A2").AutoFilter Field:=2, Criteria1:=T_Cons_CBBG.Value
     
        Set CBR = WbO.Range(WbO.Cells(2, 3), WbO.Cells(derLig, 3)).SpecialCells(xlCellTypeVisible)
     
        For Each CellCBR In CBR
            T_Cons_TBLib.Text = CellCBR.Value
        Next
    End Sub
    L'erreur se situe sur cette ligne, du second code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CBR = WbO.Range(WbO.Cells(2, 3), WbO.Cells(derLig, 3)).SpecialCells(xlCellTypeVisible)
    Je ne comprends pas vraiment pourquoi l'erreur existe... Ou bien je n'ai pas bien saisi la manière dont s'exécute la superposition des codes, je vais donc expliquer comment je perçois le déroulement, afin que vous puissiez comprendre ma manière de le percevoir.

    Dans la succession, l'initialisation des 2 ComboBox se fait simultanément. En effet, c'est la valeur saisie dans le Pavé 4 qui va déterminer les valeurs disponibles dans les 2 ComboBox.

    Dans la procédure T_Cons_CBP5_Change()
    Le code...
    détermine le numéro de la dernière ligne
    réinitialise les filtres
    réalise un filtre sur la colonne 12 - correspondant aux valeurs Pavé 5 - en fonction de la valeur renseignée grâce à la Liste Déroulante
    définit une plage de cellules correspondant aux résultats filtrés - colonne 2 correspond aux codes BG
    vide la ComboBox des codes BG
    remplit la ComboBox des codes BG avec chaque cellule de la plage préalablement définie

    Dans la procédure T_Cons_CBBG_Change()
    Le code...
    détermine le numéro de la dernière ligne
    réinitialise les filtres

    réalise un filtre sur la colonne 2 - correspondant aux valeurs des codes BG - en fonction de la valeur renseignée grâce à la Liste Déroulante
    définit une plage de cellules correspondant aux résultats filtrés - colonne 3 correspond aux libellés associés aux codes BG
    (ligne d'erreur)
    remplit la TextBox Libellé avec le résultat choisi. Sachant qu'un code BG est unique, il n'y aura qu'un seul libellé à afficher dans la TextBox.

    Je souhaiterai ainsi savoir si le déroulé que j'ai écrit correspond au déroulé que j'ai imaginé. Lors de la première boucle je n'ai aucun problème. Je choisis librement mon Pavé 4 et mon Pavé 5, et cela met à jour ma combobox Codes BG. Le choix du code m'inscrit le libellé associé dans la TextBox Libellé. Tant que je ne change pas la valeur renseignée en Pavé 4 ou Pavé 5, je n'ai aucun problème. Mais dès que j'y touche, j'ai le code erreur 1004 comme cité au-dessus. Me serai-je trompé dans l'écriture de l'AutoFilter ? Je pense que l'erreur ne peut venir que de là puisque plus aucune valeur n'est disponible dans mon tableau. Il est ouvert à côté pour visualiser l'avancement dans le code.

    Merci grandement pour votre aide

  2. #2
    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
    Problème résolu ! Avec l'aide d'un collègue, nous avons créé 2 procédures événementielles se déclenchant lors du clic sur la barre de défilement. Cela me permet de réinitialiser complètement les valeurs saisies dans la TextBox des Libellés et de vider la ComboBox des Codes BG.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub T_Cons_CBP5_DropButtonClick()
        If T_Cons_TBLib.Text <> "" And T_Cons_CBBG.Value <> "" Then
            T_Cons_TBLib.Text = ""
            T_Cons_CBBG.Clear
        End If
    End Sub
    Private Sub T_Cons_CBP4_DropButtonClick()
        If T_Cons_TBLib.Text <> "" And T_Cons_CBBG.Value <> "" Then
            T_Cons_TBLib.Text = ""
            T_Cons_CBBG.Clear
        End If
    End Sub
    La seconde partie dans la résolution de problème se passe dans ce code. Nous avons tout simplement intégré une condition de contrôle qui vérifie si les valeurs dans la ComboBox des Codes BG ainsi que la TextBox des Libellés sont vides (donc correspondent soit à une première utilisation du UserForm soit à un DropButtonClick sur l'une des 2 ComboBox.

    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
    Private Sub T_Cons_CBBG_Change()
        Dim derLig As Integer
        Dim CBR As Range, CellCBR As Range
        Dim WbO As Worksheet
     
        Set Wb = ThisWorkbook
        Set WbO = Wb.Sheets(1)
     
        derLig = WbO.Cells(Rows.Count, 2).End(xlUp).Row
     
        WbO.Range("A2").AutoFilter
     
        If T_Cons_CBBG.Value <> "" Then
            WbO.Range("A2").AutoFilter Field:=2, Criteria1:=T_Cons_CBBG.Value
     
            Set CBR = WbO.Range(WbO.Cells(2, 3), Cells(derLig, 3)).SpecialCells(xlCellTypeVisible)
     
            For Each CellCBR In CBR
                T_Cons_TBLib.Text = CellCBR.Value
            Next
        End If
    End Sub
    Bonne journée à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Requête SQL qui me dis aucun enregistrement alors que c'est faux..
    Par jossdu39 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/11/2015, 10h22
  2. Réponses: 13
    Dernier message: 27/04/2012, 15h43
  3. Réponses: 1
    Dernier message: 13/01/2008, 21h02
  4. Un URL qui ressemble a un GET alors que c'est un POST
    Par neoncyber dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2007, 18h20
  5. [Javascript] IE(page qui ne s'affiche pas alors que code html présent)
    Par Woufeigh dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2007, 19h54

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