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 :

Travailler avec cellules filtrées [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 24
    Par défaut Travailler avec cellules filtrées
    Bonjour, et merci de l'intérêt pour ce problème.

    J'ai précédemment remplis une ListBox (lstDatte) avec mes données filtré
    Je voudrais maintenant récupérer certaines valeures de d'autres colonnes (sur la même ligne) lors de sélection de ma ListBox.

    Voici ce que j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim i As Integer
     
     
    bxPest ‘Filtre Automatique sur mes données
     
    i = lstDatte.ListIndex + 6
     
    With ThisWorkbook.Worksheets("Appl Pest").Range("A4").CurrentRegion.SpecialCells(xlCellTypeVisible)
     
    Rechercher.txtProduit = .Cells(i, 3)
     
    End With
    Toutefois ça ne fonctionne pas...

    Quelqu'un a-t-il une idée ?

    Merci et bonne journée!

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir,
    le peu de code que tu montre ne donne aucune idée sur le problème. c'est pas clair comme formulation du problème. du moins pour moi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 24
    Par défaut Désolé pour le manque de clarté....
    Toutes ces fonctions sont dans un UserForm

    Voici mon code pour remplir la listbox

    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
     
    Private Sub Af_Pa_Eng()
    Dim rng As Range
    Dim ligne As Range
     
    With ThisWorkbook.Worksheets("Appl Fert")
     
    ‘Désactiver les filtres si il y en a déja
    Worksheets("Appl Fert").AutoFilterMode = False
     
     
    ‘Créer les filtres Automatiques
    Range("A3:J3").Selection.AutoFilter
    Selection.AutoFilter Field:=3, Criteria1:=bxProduit
      Set rng = .Range("A4").CurrentRegion
      Set rng = .Range("A4:M" & rng.Rows.Count + 7).SpecialCells(xlCellTypeVisible)
     
     
    ‘Remplir la ListBox à l’aide des données filtrées 
      For Each ligne In rng.Rows
      If Cells(ligne.Row, 3) <> "" Then
      lstDatte.AddItem Cells(ligne.Row, 1) & "                      " & Cells(ligne.Row, 2)
     
      End If
      Next ligne
    End With
    End Sub



    Lorsque l’on clique dans la ListBox remplie avec données filtrées, je tente de récupérer la donnée, mais mon code tient compte de toute les données (pas de filtre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i As Integer
     
    i = lstDatte.ListIndex + 6
     
    With ThisWorkbook.Worksheets("Appl Pest").Range("A4").CurrentRegion.SpecialCells(xlCellTypeVisible)
     
    Rechercher.txtProduit = .Cells(i, 3)
     
    End With

    Est-il possible de définir un "Range" seulement avec les cellules visibles, comme je l'ai fait pour remplir mon ListBox?

    Merci encore!

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Personnellement je ne travaille jamais (par habitude je consens) avec les currentregion ou userdrange.

    Peut être ta listbox avec 2 colonnes c'est mieux (propriété ColumnCount=2)
    Une approximation à voir et à adapter
    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
    Dim LastLig As Long
     
    Private Sub Af_Pa_Eng_Click()
    Dim rng As Range, c As Range
     
    Me.lstDatte.Clear
    With ThisWorkbook.Worksheets("Appl Fert")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A3:M" & LastLig).AutoFilter Field:=3, Criteria1:="=" & Me.bxProduit
        If .Range("A3:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
        For Each c In .Range("A4:A" & LastLig).SpecialCells(xlCellTypeVisible)
            Me.lstDatte.AddItem c.Value
            Me.lstDatte.List(lstDatte.ListCount - 1, 1) = c.Offset(0, 1).Value
        Next c
        End If
    End With
    End Sub
     
    Private Sub lstDatte_Click()
    Dim c As Range
    Dim Code As String  'à adapter
     
    Code = Me.lstDatte
    Set c = ThisWorkbook.Worksheets("Appl Fert").Range("A4:A" & LastLig).SpecialCells(xlCellTypeVisible).Find(Code, lookat:=xlWhole)
    If Not c Is Nothing Then
        Me.txtProduit = c.Offset(0, 1)
        Set c = Nothing
    End If
    End Sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 24
    Par défaut Bonjour Mercatog
    Tout d'abord merci pour ta réponse. J'ai toutefois une "erreur définie par l'application ou par l'objet" sur la ligne "Set c = ThisWorkbook.Worksh....
    Et ce malgré l'adaptation de "Dim Code", et l'ajout de "Dim LastLig"

    Aussi, j'ai vu que tu avais ajouté la fonction "find". Cette fonction (sur laquel tu m'as gentiment aidé hier ) ne risque pas d'avoir le défault de ne pas traiter les doublons dans ma ListBox? Je m'explique : si dans ma ListBox j'ai des données qui sont entièrement identiques, mais diférenciables par d'autre colonnes (d'où les TextBox), la fonction demeurera-t-elle sur la première valeur?

    Merci encore pour ton intérêt, et bonne journée!

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    J'ai mis lastLig en début de module (variable globale pour le module)
    Il ne fallait pas la re déclarer dans Sub lstDatte_Click(), sinon, elle sera initialisée à 0. d'où l'erreur.

    Pour ton 2ème point, oui, find cherche. la première occurrence du mot cherché.
    J'avais proposé ce code ne pas pour répondre entièrement à ton besoin, mais seulement pour t'indiquer comment procéder.

    Par contre, il est souhaitable d'être le plus clair et exhaustif possible dans la formulation du problème, pour pouvoir recevoir des pistes précises.

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

Discussions similaires

  1. [XL-2003] Décaler d'une cellule vers le bas avec un filtre automatique appliqué
    Par BtjpsspgrW dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2014, 16h11
  2. [XL-2003] Créer un bouton filtre sans doublon avec cellule protégée
    Par sevy1 dans le forum Excel
    Réponses: 12
    Dernier message: 11/01/2012, 19h34
  3. Ouvrir le poste de travail (avec ShellExecute) ?
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/08/2003, 11h09
  4. Documentation sur la manière de travailler avec le XML en java
    Par DelPiero62 dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/03/2003, 09h16
  5. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 19h09

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