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érer une certaine colonne de toute les lignes contenant une colonne égale à false [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Par défaut Récupérer une certaine colonne de toute les lignes contenant une colonne égale à false
    Bonjour,

    Voila j'ai une bdd comme ceci:
    Nom : ok.png
Affichages : 283
Taille : 18,5 Ko

    Pour vous remettre dans le contexte, cette bdd me sert de journal de trading.

    J'ai un premier UserForm qui me permet de d'ouvrir une position et un autre UserForm qui me permet de fermer une position.
    Le problème que je rencontre se situe sur le deuxième UserForm.

    J'ai une listBox qui me permetra de selectioner toutes les actions non cloturée.
    Pour cela j'ai crée un champs "closed" qui sera à "true" pour cloturer et "false" pour non cloturer.

    Concrètement j'aimerais récupérer le Ticker/ISIN de toutes les positions ayant comme valeur de la colonne "closed" égale à false.

    J'ai trouver la fonction Find() mais elle ne récupére que la première ligne correspondant à la condition donnée or moi je veux toutes les valeurs correspondantes à cette même condition sous forme d'array.

    Merci beaucoup.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    essayez avec ça : adapte les colonnes que tu cherche a intégrer dans ton 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
    Dim plage As Range
    Set plage = Sheets("feuil1").Range("L2:L" & [A65536].End(xlUp).Row) 'adapter le nom de ton onglet
     
     i = 0
    For Each Cell In plage
     If Cell.Value = "True" Then
        ListBox1.ColumnCount = 6
        ListBox1.ColumnWidths = "50;70;40;180;55;55"
        ListBox1.AddItem
        ListBox1.Column(0, i) = Cell.Address
       ListBox1.Column(1, i) = Cell(1, -5)
        ListBox1.Column(2, i) = Cell(1, -6)
        ListBox1.Column(3, i) = Cell(1, -2)
        ListBox1.Column(4, i) = 0
       ListBox1.Column(5, i) = Cell.Value
        i = i + 1
     End If
        Next Cell

  3. #3
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonsoir
    essayez avec ça : adapte les colonnes que tu cherche a intégrer dans ton 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
    Dim plage As Range
    Set plage = Sheets("feuil1").Range("L2:L" & [A65536].End(xlUp).Row) 'adapter le nom de ton onglet
     
     i = 0
    For Each Cell In plage
     If Cell.Value = "True" Then
        ListBox1.ColumnCount = 6
        ListBox1.ColumnWidths = "50;70;40;180;55;55"
        ListBox1.AddItem
        ListBox1.Column(0, i) = Cell.Address
       ListBox1.Column(1, i) = Cell(1, -5)
        ListBox1.Column(2, i) = Cell(1, -6)
        ListBox1.Column(3, i) = Cell(1, -2)
        ListBox1.Column(4, i) = 0
       ListBox1.Column(5, i) = Cell.Value
        i = i + 1
     End If
        Next Cell
    Bonjour, Merci d'avoir répondu à mon post.

    Le code marche parfaitement ! Merci beaucoup.

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Aussi débutant en VBA et je m'excuse des fautes de français et aussi si mon explication n'est pas précise
    pour les colonne de la listbox le comptage des colonne commence par 0
    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
    Dim plage As Range
    ' nommer la colonne L de L2 à la dernière ligne non vide de la colonne L avec le nom "plage" puisque la valeur True ou false existe dans cette colonne non ???
    Set plage = Sheets("feuil1").Range("L2:L" & [A65536].End(xlUp).Row) 'adapter le nom de ton onglet
     
     i = 0
    For Each Cell In plage ' pour chaque cellule de la plage nommé
     If Cell.Value = "True" Then ' si la valeur de la cellule égal à "true"
        ListBox1.ColumnCount = 6 'ta listebox sera composé de 6 colonne
        ListBox1.ColumnWidths = "50;70;40;180;55;55" ' ici la largeur de chaque colonne de ta listbox
        ListBox1.AddItem ' instruction d'ajout à la listbox
        ListBox1.Column(0, i) = Cell.Address ' la colonne n°1 de la listbox loge l'adress de la cellule et tu peux changer si tu veux
       ListBox1.Column(1, i) = Cell(1, -5) ' le moins 5 c'est la cinquième  colonne avant la colonne L
        ListBox1.Column(2, i) = Cell(1, -6) ' le moins 6 c'est la sixième  colonne avant la colonne L
        ListBox1.Column(3, i) = Cell(1, -2) ' le moins 2 c'est le deuxième colonne avant la colonne L
        ListBox1.Column(4, i) = 0 ' tu peux insérer la valeur 0 dans la cinquième colonne de la listbox ou autres
       ListBox1.Column(5, i) = Cell.Value ' ici la valeur de la cellule à savoir true
        i = i + 1
     End If
        Next Cell

  5. #5
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Aussi débutant en VBA et je m'excuse des fautes de français et aussi si mon explication n'est pas précise
    pour les colonne de la listbox le comptage des colonne commence par 0
    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
    Dim plage As Range
    ' nommer la colonne L de L2 à la dernière ligne non vide de la colonne L avec le nom "plage" puisque la valeur True ou false existe dans cette colonne non ???
    Set plage = Sheets("feuil1").Range("L2:L" & [A65536].End(xlUp).Row) 'adapter le nom de ton onglet
     
     i = 0
    For Each Cell In plage ' pour chaque cellule de la plage nommé
     If Cell.Value = "True" Then ' si la valeur de la cellule égal à "true"
        ListBox1.ColumnCount = 6 'ta listebox sera composé de 6 colonne
        ListBox1.ColumnWidths = "50;70;40;180;55;55" ' ici la largeur de chaque colonne de ta listbox
        ListBox1.AddItem ' instruction d'ajout à la listbox
        ListBox1.Column(0, i) = Cell.Address ' la colonne n°1 de la listbox loge l'adress de la cellule et tu peux changer si tu veux
       ListBox1.Column(1, i) = Cell(1, -5) ' le moins 5 c'est la cinquième  colonne avant la colonne L
        ListBox1.Column(2, i) = Cell(1, -6) ' le moins 6 c'est la sixième  colonne avant la colonne L
        ListBox1.Column(3, i) = Cell(1, -2) ' le moins 2 c'est le deuxième colonne avant la colonne L
        ListBox1.Column(4, i) = 0 ' tu peux insérer la valeur 0 dans la cinquième colonne de la listbox ou autres
       ListBox1.Column(5, i) = Cell.Value ' ici la valeur de la cellule à savoir true
        i = i + 1
     End If
        Next Cell
    Merci beaucoup tout fonctionne parfaitement !

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    cliquez sur résolu svp

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    regarde l'aide sur autofilter c'est relativement simple dans ton cas

    regarde le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test1()
        With ActiveSheet
            .[A1].Value = IIf(.[A1].Value = "", "x", [A1].Value)
            With .Range("A1:L12")
                .AutoFilter Field:=12, Criteria1:="=false"
                MsgBox .SpecialCells(xlVisible).Address
                .AutoFilter
            End With
            .[A1].Value = IIf(.[A1].Value = "x", "", [A1].Value)
        End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  2. Réponses: 1
    Dernier message: 22/04/2009, 22h39
  3. afficher toutes les lignes d'une colonne d'une BDD + infos relatives à 1 ligne
    Par ju0123456789 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/02/2009, 19h20
  4. Réponses: 6
    Dernier message: 19/02/2007, 13h34
  5. Concaténer toutes les lignes d'une colonne
    Par metalcoyote dans le forum Oracle
    Réponses: 6
    Dernier message: 10/05/2006, 15h51

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