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 :

Pbl alimentation/récupération dans Array pour autofilter


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut Pbl alimentation/récupération dans Array pour autofilter
    Dans un listbox multicolonnes a selections multiples (sur un userform) je selectionne des lignes (factures).
    Ensuite j'ai besoin de récupérer ces lignes pour alimenter un tri sur une feuille via Autofilter (avec nf) et n'afficher ainsi que les factures selectionnées.
    Mon idée était d'alimenter un Array afin de pouvoir en extraire mes données (en listant les arguments par exemple).
    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
     
    <div style="margin-left:40px">For i = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(i) = True Then 'je repère bien les selections
    nf = Me.ListBox1.List(i, 2) 'nf pour alimenter Autofilter
    MsgBox Me.ListBox1.List(i, 2) 'pour voir si je les ai bien => OK
     
    L = Array(Me.ListBox1.List(i, 2)) 
     
    If IsArray(L) = True Then 'Pour vérifier que je crée bien un tableau
    MsgBox ("VARIABLE = TABLEAU") 'Il y est bien, sauf qu'il est vide (comme s'il était sans argument) ???!!!!
    Else: MsgBox ("Pas de tableau")
     
    End If
    Next 
    End if</div>
    Je voudrais pouvoir récupérer les valeurs des arguments de L sous la forme
    msgbox L(1)
    msgbox L(2)
    msgbox L(3)...

    Mais je n'y arrive pas malgré les quelques heures passées dessus...
    Je vois bien déjà que je n'ai qu'un seul argument dans array, alors que je devrais en avoir autant que de sélections, mais je n'ai pas réussi à trouver.
    Ceci est mon premier message sur le forum. J'espère en avoir respecté les règles. Peut être aussi qu'Array n'est pas appropriée et qu'il y a plus simple. Merci à ceux qui pourront me dépanner ou m'éclairer.
    Bien cordialement.
    AD

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    tu peux alors utiliser un tableau dynamique et le dimentionner avec le nombre des sélections .

    Exemple, avec une listbox à une colonne (à toi de jouer avec le reste)

    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
    Private Sub Command1_Click()
      If List1.SelCount = 0 Then Exit Sub
      Dim montableau() As String, I As Integer
      ReDim montableau(List1.SelCount - 1)
      n = 0
      For I = 0 To List1.ListCount - 1
       If List1.Selected(I) Then
         montableau(n) = List1.List(I)
         n = n + 1
       End If
      Next
      ' et maintenant, juste pour voir ce qu'on a fait
      For I = 0 To UBound(montableau)
        MsgBox montableau(I)
      Next
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut Pbl alimentation/récupération dans Array pour autofilter (suite)
    Bonsoir et merci pour votre réponse

    J'ai adapté le code comme ci-après (ListBox1...).
    Mais cela ne fonctionne pas: SelCount se met en inversion vidéo et le message suivant apparaît : "Erreur de compilation - Membre de méthode ou de données introuvable." => erreur 461

    J'ai vérifié ma version de VBA : c'est Visual Basic 6.3
    Il semble que je ne dispose pas de SelCount?! (L'aide à la frappe ne fonctionne pas... => pas dans la liste des "propriétés" proposés...)
    Pas de résultat non plus pour SelCount dans l'aide intégrée de Microsoft VBA?!
    Comment est-ce possible ?!

    Par contre j'ai bien trouvé sur le Web
    Visual Basic Reference
    SelCount Property
    Returns the number of selected items in a ListBox control.
    Syntax
    object.SelCount
    Bien cordialement.


    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 CommandButton6_Click()
     
    If ListBox1.SelCount = 0 Then Exit Sub
    Dim montableau() As String, I As Integer
    ReDim montableau(ListBox1.SelCount - 1)
    n = 0
    For I = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(I) Then
     
    montableau(n) = ListBox1.List(I)
     
    n = n + 1
    End If
    Next
    ' et maintenant, juste pour voir ce qu'on a fait
    For I = 0 To UBound(montableau)
    MsgBox montableau(I)
    Next
    End Sub

  4. #4
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour, il te faut un tableau à plusieurs dimensions.

    http://silkyroad.developpez.com/vba/tableaux/#LII-C

    cordialement

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re,...

    Je vois en effet que SelCount n'existe pas en VBA !

    Alors :

    soit tu utilises en effet un tableau dynamique que tu redimensionnes à chaque fois avec Redim Preserve,

    soit tu le dimensionnes une fois pour toutes après avoir fabriqué un "VbaSelCount" (qui ne fait que compoter le nombre d'articles sélectionnés !

    Exemple, donc (en reprenant mon 1er exemple) :

    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
    Private Sub Command1_Click()
      If vbaselcount = 0 Then Exit Sub
      Dim montableau() As String, I As Integer
      ReDim montableau(vbaselcount - 1)
      n = 0
      For I = 0 To List1.ListCount - 1
       If List1.Selected(I) Then
         montableau(n) = List1.List(I)
         n = n + 1
       End If
      Next
      ' et maintenant, juste pour voir ce qu'on a fait
      For I = 0 To UBound(montableau)
        MsgBox montableau(I)
      Next
    End Sub
    
    Private Function vbaselcount() As Integer
       For I = 0 To List1.ListCount - 1
         If List1.Selected(I) Then
            vbaselcount = vbaselcount + 1
         End If
       Next
    End Function

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Re,...

    Je vois en effet que SelCount n'existe pas en VBA !

    Alors :

    soit tu utilises en effet un tableau dynamique que tu redimensionnes à chaque fois avec Redim Preserve,

    soit tu le dimensionnes une fois pour toutes après avoir fabriqué un "VbaSelCount" (qui ne fait que compoter le nombre d'articles sélectionnés !

    Exemple, donc (en reprenant mon 1er exemple) :

    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
    Private Sub Command1_Click()
      If vbaselcount = 0 Then Exit Sub
      Dim montableau() As String, I As Integer
      ReDim montableau(vbaselcount - 1)
      n = 0
      For I = 0 To List1.ListCount - 1
       If List1.Selected(I) Then
         montableau(n) = List1.List(I)
         n = n + 1
       End If
      Next
      ' et maintenant, juste pour voir ce qu'on a fait
      For I = 0 To UBound(montableau)
        MsgBox montableau(I)
      Next
    End Sub
    
    Private Function vbaselcount() As Integer
       For I = 0 To List1.ListCount - 1
         If List1.Selected(I) Then
            vbaselcount = vbaselcount + 1
         End If
       Next
    End Function

    Désolé de ne pas vous suivre. Je ne comprends pas vos indications. Je suis débutant en VBA...
    Je n'ai même pas le commencement d'une ID pour fabriquer un "VBASelCout" pour pouvoir interpréter votre code. D'ailleurs si j'arrivais à compter le nombre de selections de ma listbox j'aurai déjà moins de soucis... J'ai cherché l'équivalent de SelCount en VBA mais je n'ai rien trouvé. Il doit pourtant exister une fonction équivalente. Compter des sélections est un problème assez récurent...
    Afin de rester "pratique" pouvez vous m'indiquer l'erreur dans ma ligne de code suivante (alimentation Array). Je vois bien qu'elle est incorrecte puisqu'elle n'indique qu'un seul argument, mais je ne sais pas comment l'écrire autrement.
    L = Array(Me.ListBox1.List(i, 2))
    Pour la suite (récupération des arguments) je devrai pouvoir m'en sortir.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Citation Envoyé par fred65200 Voir le message
    bonjour, il te faut un tableau à plusieurs dimensions.

    http://silkyroad.developpez.com/vba/tableaux/#LII-C

    cordialement
    Merci, mais c'est un poil court comme réponse. J'ai regardé le lien et je ne suis pas plus avancé qu'avant (voir pire). Je suis plutôt dans la catégorie des débutants et je ne comprends déjà pas vraiment le fonctionnement d'un tableau à UNE dimension...
    Bien cordialement.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/10/2008, 17h39
  2. Réponses: 3
    Dernier message: 06/02/2008, 15h06
  3. Récupération de données pour mettre dans un fichier .txt
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 24/01/2008, 11h29
  4. Récupération d'URL pour ajouter un script dans la page
    Par poissonrouge dans le forum Langage
    Réponses: 1
    Dernier message: 17/09/2007, 15h39
  5. Réponses: 2
    Dernier message: 21/07/2006, 18h40

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