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 :

Relever le numéro de ligne en fonction d'une valeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 46
    Par défaut Relever le numéro de ligne en fonction d'une valeur
    Salut à tous,

    J'ai dans un tableau de ce genre
    N° de ligne élément
    1 A
    2 A
    3 B
    4 A
    5 B

    J'ai crée ce code afin de chercher l'élément que je souhaite (prédéfini au préalable dans une combobox de userform) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Cmd_val_Click()
        If ComboBox1 <> "" And ComboBox2 = "" Then
            Dim C As Range
            With Sheets("Table_Composant")
                For Each C In .Range("B3", .Cells(Rows.Count, 2).End(xlUp))
                    If C.Value = ComboBox1.Value Then
                        'relève moi le numero des lignes où se trouve C.value
                    End If
                 Next C
            End With
        End If
     
    End Sub
    Mon problème est que je sais pas quoi mettre pour obtenir un ensemble de données correspondant au numéro de ligne de chaque élément.
    Dans le tableau ci-dessus si nous avons sélectionné au préalable l'élément "A", les solutions seraient {1, 2, 4}.
    J'ai mis mon problème en commentaire dans le code au niveau du 2ème IF.

    Je vous remercie d'avance.
    Karl

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour Karl,

    Tu peux tester comme ceci :
    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
    Private Sub Cmd_val_Click()
        If ComboBox1 <> "" And ComboBox2 = "" Then
            Dim C As Range, s As String
            With Sheets("Table_Composant")
                For Each C In .Range("B3", .Cells(Rows.Count, 2).End(xlUp))
                    If C.Value = ComboBox1.Value Then
                        s = s & C.Row & ", "
                        'relève moi le numero des lignes où se trouve C.value
                    End If
                 Next C
            End With
        End If
        s = Left(s, Len(s) - 2)
        MsgBox s
    End Sub
    Pour le moment c'est juste un MsgBox mais tu peux faire ce que tu veux de la variable s.

    EDIT :
    For Each C In .Range("B3", .Cells(Rows.Count, 2).End(xlUp)) fonctionne ?
    la syntaxe n'est pas plutot
    For Each C In .Range(Range("B3"), .Cells(Rows.Count, 2).End(xlUp))ou
    For Each C In .Range([B3], .Cells(Rows.Count, 2).End(xlUp))

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public dico As Object
    Sub test()
    Dim r As Range, i As Integer
     Set dico = CreateObject("Scripting.Dictionary")
    Set r = ActiveSheet.Range("A1").CurrentRegion
    For i = 2 To r.Rows.Count
        If dico.exists(r(i, 2).Value) = False Then dico.Add r(i, 2).Value, i
    Next
     
    End Sub
     
    Sub testVeleur()
    Debug.Print dico.Item("B")
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 46
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Bonjour Karl,

    Tu peux tester comme ceci :
    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
    Private Sub Cmd_val_Click()
        If ComboBox1 <> "" And ComboBox2 = "" Then
            Dim C As Range, s As String
            With Sheets("Table_Composant")
                For Each C In .Range("B3", .Cells(Rows.Count, 2).End(xlUp))
                    If C.Value = ComboBox1.Value Then
                        s = s & C.Row & ", "
                        'relève moi le numero des lignes où se trouve C.value
                    End If
                 Next C
            End With
        End If
        s = Left(s, Len(s) - 2)
        MsgBox s
    End Sub
    Pour le moment c'est juste un MsgBox mais tu peux faire ce que tu veux de la variable s.

    EDIT :
    For Each C In .Range("B3", .Cells(Rows.Count, 2).End(xlUp)) fonctionne ?
    la syntaxe n'est pas plutot
    For Each C In .Range(Range("B3"), .Cells(Rows.Count, 2).End(xlUp))ou
    For Each C In .Range([B3], .Cells(Rows.Count, 2).End(xlUp))
    Super ! Exactement ce que je souhaitais pour la variable s !

    Pour la syntaxe, apparemment ça fonctionne.
    au départ, j'avais mis cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each C In .Range(.[B3], Cells(Rows.Count, 4).End(xlUp))
    Mais il ne m'acceptait pas le "." devant les crochets... Du coup j'ai mis des guillemets...
    Pour tout te dire, j'ai commencé (j'étais au niveau 0) le codage en général il y a 2 semaines environ. Il y a donc certaines règles syntaxiques que je n'ai pas encore assimilé... Quand j'ai des problème, je débogue et cherche ou essaye des choses ^^
    Donc au final le code marchait mais j'ai corrigé par ce que tu m'as proposé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each C In .Range(.[B3], .Cells(Rows.Count, 2).End(xlUp))
    je te remercie pour ta réponse en tout cas

    Dans ton code, tu as marqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     s = Left(s, Len(s) - 2)
    A quoi cela correspond ?

    Karl

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Simplement parce qu'avec s = s & C.Row & ", " j’ajoute ", " après chaque numéro de ligne.

    Donc à la fin j'ai un truc de ce genre : 1, 5, 6, 7, 12,
    Mais comme c'est pas beau j'enlève les deux derniers caractères, le point-virgule et l'espace, avec s = Left(s, Len(s) - 2)
    Si pas clair regarde dans l'aide VB les fonctions Left et Len (les équivalents de =Gauche et =NBCAR en formule Excel)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 46
    Par défaut
    Ah ok, pour l'explication c'est bon. Ce soir je me coucherai moins bête encore
    Merci

  7. #7
    Invité
    Invité(e)
    Par défaut
    Juste pour information vue que tu as résolu ton problème!

    sur mon poste #3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub testVeleur()
    Valeur= Sheets("Table_Composant").cells( dico.Item(ComboBox1.Value ),"B").value
    End Sub

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

Discussions similaires

  1. listview couleur d'une ligne en fonction d'une valeur
    Par Kanetsugu dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/03/2012, 11h48
  2. liste des numéro de ligne où on trouve une valeur
    Par homerlehamster dans le forum Excel
    Réponses: 2
    Dernier message: 23/11/2010, 09h52
  3. [XL-2003] Supprimer une ligne en fonction d'une valeur de cellule
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/09/2009, 17h20
  4. [XL-2007] Extraire des lignes en fonction d'une valeur de cellule dans un autre fichier
    Par MisterTambo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/08/2009, 10h42
  5. Réponses: 1
    Dernier message: 10/02/2008, 19h56

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