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 :

Afficher des données dans un UserForm avec condition [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut Afficher des données dans un UserForm avec condition
    Bonjour,

    Je bloque sur le code qui devrait me permettre d'afficher par un double clic les données sélectionnées dans un ListBox.

    Mon code est le suivant :

    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 UserForm_Initialize()
    Dim I As Byte ', j As Byte
     
        With Worksheets("Données")
            ListDonnéesSaisies.ColumnCount = 4 'nombre de colonnes
            ListDonnéesSaisies.ColumnWidths = "80;80;100;70" 'largeur des colonnes
            DerLig = .Range("C" & Rows.Count).End(xlUp).Row
     
             For I = 2 To DerLig
     
            'Si la valeur en majuscule de la ligne I, colonne 77 (BY!) est egale à FAUX
            If UCase(Feuil2.Cells(I, 77).Value) = "FAUX" Then
     
                ListDonnéesSaisies.AddItem .Range("C" & I).Value
                ListDonnéesSaisies.List(ListDonnéesSaisies.ListCount - 1, 1) = Format(.Range("C" & I).Offset(0, 1), "hh:mm")
                ListDonnéesSaisies.List(ListDonnéesSaisies.ListCount - 1, 2) = .Range("C" & I).Offset(0, 2)
                ListDonnéesSaisies.List(ListDonnéesSaisies.ListCount - 1, 3) = .Range("C" & I).Offset(0, 3)
     
            End If
            Next I
        End With
    End Sub
    ListDonnéesSaisies est une ListBox.
    Les données affichées à ce stade sont correctes.

    En cliquant 2 fois sur la ligne sélectionnée, j'ouvre un UserForm mais les données affichées ne correspondent pas à ma sélection.

    En revanche, si je supprime ma condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(Feuil2.Cells(I, 77).Value) = "FAUX" Then
    le résultat attendu est bon.

    Quelqu'un peut m'aider ?
    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Feuil2.Cells(I, 77).Value = False Then
    Note aussi que, pour la bonne règle, tu devrais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = .Range("C" & .Rows.Count).End(xlUp).Row
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = .Range("C" & Rows.Count).End(xlUp).Row
    Ca n'aurait d'importance que si la feuille active était une feuille de graphique.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut
    Bonjour Daniel,

    et merci pour ta réponse.
    En définitive, ce n'est pas dans ce code que j'ai un souci. il fonctionne parfaitement.

    En revanche, je pense que ce la provient de celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ListDonnéesSaisies_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
     
        With Worksheets("Données")
            If ListDonnéesSaisies.ListIndex = -1 Then Exit Sub
            ValidNomM = .Range("E" & ListDonnéesSaisies.ListIndex + 3)
            ValidComNais = .Range("H" & ListDonnéesSaisies.ListIndex + 3)
        End With
        UsfSelection.Hide
        UsfValidNais.Show
    End Sub
    Il ne prend pas le numéro de la ligne de ma sélection mais ajoute des lignes au résultat de ListDonnéesSaisies (+ 3 ?).
    Qu'en penses-tu ?

    Comment faire pour qu'il prenne le numéro de la ligne ?
    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Le numéro de position dans la listbox est donné par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListDonnéesSaisies.ListIndex + 1
    La valeur de "ListIndex" est 0 pour la première ligne de la ListBox, 1 pour la deuxième, etc. Maintenant, si la première ligne de la listbox correspond à la ligne 3 de la feuille, il est normal de mettre "+3".

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2009
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 276
    Par défaut
    Bonjour Daniel,

    Je suis d'accord sur ce fait mais si je mets ma condition sur les lignes dont la cellule "BY" est FALSE, le résultat retourné n'est pas celui attendu.

    Un exemple sera plus compréhensif.
    En PJ, une capture des données test.

    Si je retire ma condition, ma ListBox affiche tous les "DATE - NOM - PRENOM" dans l'ordre de ma feuille. Si je double-clic sur une ligne au choix, mon UserForm s'ouvre avec les bonnes données.

    En revanche, si je laisse ma condition, ma ListBox affiche les NOMS et PRENOMS dont la colonne "G" (pour ce test) est égale à FAUX, soit :

    02/02/2013        BB        B
    02/02/2013        AA        A
    15/04/2013        BB        B
    Si je clique sur la dernière ligne, le résultat envoyé correspond à l'enregistrement de la ligne 5 soit

    02/02/2013        AA        A
    alors qu'il aurait dû afficher les données de la ligne 8

    Merci pour les observations
    Cdt
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    C'est normal, parce que tu n'as plus de correspondance entre le rang de la ligne dans la listbox et le numéro de ligne.
    1. tu peux utiliser "ListDonnéesSaisies.Value" pour retrouver la ligne sur la feuille. C'est parfois impossible s'il y a des doublons.
    2. tu ajoutes un champ masqué à ta listbox dans lequel tu mets le numéro de ligne. Au remplissage, tu ajoutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListDonnéesSaisies.List(ListDonnéesSaisies.ListCount - 1, 4) = C.Row
    Pour le traitement, tu ne sers plus de "ListIndex", mais de ce champ.

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

Discussions similaires

  1. Problème avec des données dans un userform
    Par Hef-aîr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2014, 11h54
  2. Modifier des données dans un tableau avec un userform
    Par sebastien-16600 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2013, 21h23
  3. Afficher des données dans un popup
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 122
    Dernier message: 03/05/2006, 09h46
  4. [BDE] Afficher des données dans un TDBComboBox
    Par $grm$ dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/09/2004, 10h37
  5. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22

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