Combobox ma boucle ne se fait pas

Bonjour, bonsoir et bonne année à tous et toutes.

Je tente d'effectuer une boucle afin de récupérer les enregistrements d'un tableau sur la base de la colonne N° client.

Le début du code se passe bien mais ne fait rien lorsque je suis sur la boucle pour récupérer les lignes correspondantes.

Malgré un pas à pas je ne comprends pas ce qui cloche.

Je joins mon fichier.

D'avance merci pour le coup de main et une petite explication.

Merci

bonsoir,

combobox.value est toujours de typestring et ton N° client est un nombre, remplace cette instruction pour faire une comparaison sur des chaines de caractères

If NmrClient.Offset(0, 2).Value  = Me.CbNmrClient.Value Then 

par

If NmrClient.Offset(0, 2).Value & "" = Me.CbNmrClient.Value Then ' changement ici

je me suis permis d'adapter le reste de ce code, voici le code adapté incluant la correction.

Private Sub BtnExtraction_Click()
    ' Déclaration des variables
    Dim NmrClient As Range
    Dim ListeNumeroClient As Range
    Dim NbLignes As Long
    Dim LigneActive As Long
    Dim NomFeuille As String

    ' Affectation des variables
    Set ListeNumeroClient = Feuil1.Range("A2", Feuil1.Range("A1").End(xlDown))
    NbLignes = ListeNumeroClient.Rows.Count
    LigneActive = 1 ' changement ici

    ' On insère une nouvelle feuille
    NomFeuille = FrmExtractionData.CbNmrClient.Text
    Sheets.Add After:=Worksheets(Worksheets.Count)
    With ActiveSheet ' changement ici
        .Name = NomFeuille ' changement ici, provoque une erreur si une feuille de ce nom existe déjà !
        Feuil1.Range("A1").EntireRow.Copy .Cells(LigneActive, 1) ' changement ici

        ' On boucle chaque n° se trouvant dans la liste
        For Each NmrClient In ListeNumeroClient
            ' On recherche le n° qui a été saisi dans la liste
            If NmrClient.Offset(0, 2).Value & "" = Me.CbNmrClient.Value Then ' changement ici
                ' Si le n° est trouvé, on récupère l'enregistrement
                LigneActive = LigneActive + 1 ' changement ici
                NmrClient.EntireRow.Copy .Cells(LigneActive, 1) ' changement ici
            End If
        Next NmrClient
    End With ' changement ici
End Sub

le code ne gère pas le cas où une feuille existerait déjà.

Bonjour h2so4,

Merci pour la rapidité de ta réponse. Désolé mais je ne comprends pas trop ton intro. Le problème viendrait du fait que Combo en String rentre en opposition avec N° Client et nécessite l'ajoute et modification (& ""), dans ce cas quel est le but des ("") qui fonctionne parfaitement ?

A la lumière de tes commentaires, je revois ma position et mon (pseudo) raisonnement.

En effet, comme le traitement se fera en fin d'année, je vois mal l'utilisateur sélectionner chaque numéro pour créer les feuilles mais en attendant d'avoir mieux on fera avec.

Il faut que je trouve une solution ou le bout de code pour un traitement (en boucle certainement) de ma feuille SOURCE afin de créer chaque feuille au lancement d'une macro.

J'avoue que je suis une quiche en boucle mais je vais voir ce que je peux trouver sur le Net. Merci de m'avoir permis de revoir ma copie mais la tâche me semble ardue.

Si tu as une idée ou un début de piste, je suis preneur bien évidemment.

Cordialement

bonjour,

une proposition,

Sub macro_extraction()
    ' Déclaration des variables
    Dim NmrClient As Range
    Dim ListeNumeroClient As Range
    Dim NbLignes As Long
    Dim LigneActive As Long, LigneClient As Long
    Dim NomFeuille As String
    Dim numeroclient
    ' Affectation des variables
    Set ListeNumeroClient = Feuil1.Range("A2", Feuil1.Range("A1").End(xlDown))
    NbLignes = ListeNumeroClient.Rows.Count

    ' On insère une nouvelle feuille
    LigneClient = 2
    numeroclient = Feuil3.Cells(LigneClient, 1)
    Do While numeroclient <> ""
        NomFeuille = numeroclient
        Sheets.Add After:=Worksheets(Worksheets.Count)
        With ActiveSheet ' changement ici
            .Name = NomFeuille ' changement ici, provoque une erreur si une feuille de ce nom existe déjà !
            LigneActive = 1 ' changement ici
            Feuil1.Range("A1").EntireRow.Copy .Cells(LigneActive, 1) ' changement ici
            ' On boucle chaque n° se trouvant dans la liste
            For Each NmrClient In ListeNumeroClient
                ' On recherche le n° qui a été saisi dans la liste
                If NmrClient.Offset(0, 2).Value = numeroclient Then ' changement ici
                    ' Si le n° est trouvé, on récupère l'enregistrement
                    LigneActive = LigneActive + 1 ' changement ici
                    NmrClient.EntireRow.Copy .Cells(LigneActive, 1) ' changement ici
                End If
            Next NmrClient
            LigneClient = LigneClient + 1
            numeroclient = Feuil3.Cells(LigneClient, 1)
        End With
    Loop
End Sub

Re Bonjour,

Je n'ai pas d'autre mot que de te dire UN GRAND MERCI .

Tu m'évites un travail colossale de recherches et de test .

J'ai testé ta macro qui fonctionne à merveille mais, si je peux encore me permettre et j'aurais dû le préciser avant, c'est que la macro travaille sur la liste se trouvant dans la feuille "Liste" mais si j'ai un nouveau client qui se rajoute dans la feuille "SOURCE" avec un numéro de client, cette liste ne sera pas à jour.

Y a t il un moyen de contourner ce problème ?

D'avance merci

bonjour,

je te propose une formule dans ta feuille liste pour avoir une liste en permanence à jour (à vérifier que les fonctions utilisées (sort et unique) sont bien disponibles dans ta version)

Re,

J'ai saisi ta formule dans une autre cellule de la feuille et la liste se crée également avec les mêmes données. Je vais transposer tout ton travail dans le vrai document afin de tester ta formule et l'ensemble des modifications.

J'espère que tu auras l'occasion (c'est pas dans l'immédiat) de suivre mon prochain problème et secrètement, je l'espère. C'est toujours sur le même projet et hélas je ne sais pas comment faire (pour moi c'est du chinois ). J'avais eu un coup de main de U.Milité sur ce site qui m'avait arrangé partiellement et on s'en contente pour l'instant. Le sujet était "Completer feuille par boucles ou autres ?"

J'y reviendrai dans un autre sujet. Un exemple de ce qu'il avait fait à l'époque sur une seule cellule :

=SI(NBVAL(SEMAINES)>=LIGNES($11:11);INDEX(FACTURE!$A$13:$A$36;PETITE.VALEUR(SI(SEMAINES>0;LIGNE(SEMAINES)-12);LIGNES($11:11)));"")

LOL, c'est pas triste.

En tout cas, un grand merci pour ta disponibilité et ton aide . Ce n'est peut être pas grand chose pour toi (vu ton cursus) mais c'est vraiment génial pour nous.

Pour les modérateurs, je ne ferme pas le sujet le temps de tester et de garder le contact avec h2so4 si problème.

Rechercher des sujets similaires à "combobox boucle fait pas"