Chercher dans une feuille si l'élément d'une listbox est présent

Bonjour,

J'ai deux fichiers différents. Mes macro sont présent dans un seul fichier A, et vont chercher des informations dans le second B. Aucun souci pour aller chercher les données.

Cependant, j'aimerai maintenant complété le deuxième fichier B. Seulement voilà, mon fichier B est composé de 3 feuilles qui n'ont pas la même structure. Donc je doit faire des manip différentes pour chaque feuilles. Ce n'est pas ça qui me pose le plus de problème je pense.

Ensuite à chaque fois l'élément recherché (présent dans la deuxième colonne d'une listbox) n'est présent que dans une feuille.

J'utilise donc le code suivant :

Dim Lig As Long
 Call ouvre_materiel_externe
For i = 0 To n
     If ListBox1.Selected(i) And Application.CountIf(CS.Worksheets("HYDREKA").Columns(d), ListBox1.List(i, 0)) > 0 And Application.CountIf(CS.Worksheets("HYDREKA").Columns(c), ComboBox2.Value) > 0 And Application.CountIf(CS.Worksheets("HYDREKA").Columns(f), ListBox1.List(i, 1) > 0) Then
        Lig = Application.Match(ListBox1.List(i, 0), .Columns(d), 0)
        .Cells(Lig, 17) = TextBox6.Value
    ElseIf ListBox1.Selected(i) And Application.CountIf(CS.Worksheets("IJINUS").Columns(c), ListBox1.List(i, 0)) > 0 And Application.CountIf(CS.Worksheets("IJINUS").Columns(b), ComboBox2.Value) > 0 And Application.CountIf(CS.Worksheets("IJINUS").Columns(e), ListBox1.List(i, 1) > 0) Then
        Lig = Application.Match(ListBox1.List(i, 0), .Columns(c), 0)
        .Cells(Lig, 16) = TextBox6.Value
    ElseIf ListBox1.Selected(i) And Application.CountIf(CS.Worksheets("AUTRES LOUEURS").Columns(c), ListBox1.List(i, 0)) > 0 And Application.CountIf(CS.Worksheets("IJINUS").Columns(b), ComboBox2.Value) > 0 And Application.CountIf(CS.Worksheets("IJINUS").Columns(e), ListBox1.List(i, 1) > 0) Then
        Lig = Application.Match(ListBox1.List(i, 0), .Columns(c), 0)
        .Cells(Lig, 16) = TextBox6.Value
    End If
Next

J'ai une erreur d'éxécution 1004 : Erreur définie par l'application ou par l'objet

J'ai mis quelques espions pour essayer de comprendre, et voilà le résultat :

capture17

Donc il semblerait que le souci soit au niveau de CS.Worksheets("HYDREKA").Columns(d)

Pourtant, CS est bien défini dans ouvre_materiel_externe

Sub ouvre_materiel_externe()
Dim Chemin As String

Fichier = "Gestion loc materiel externe 21_LSA.xlsx"
Chemin = ThisWorkbook.Path & "\Loc externe\"

Workbooks.Open Chemin & Fichier

Set CS = Workbooks(Fichier)

ThisWorkbook.Activate

End Sub

Si il y a besoin d'éclaircir un peu le contexte n'hésitez pas !

Si quelqu'un trouve le souci, je suis preneuse !

Merci bien !

Bonjour

Sans fichier....Il vous manque les guillemets -->

(CS.Worksheets("HYDREKA").Columns("d")

ou

(CS.Worksheets("HYDREKA").Columns(4)

Bonjour !

Les guillemets n'y changent rien ...

Je mets les fichiers en pièces jointes.

Le souci se pose dans le fichier A, au niveau de l'useform2, dans "CommandButton1_Click().

Fichier A :

Fichier B

Les guillemets n'y changent rien ..

Sauf qu'il faut aussi corriger plus loin car il y a en d'autres qui manquent de la code valider. Il faut les mettre partout

Essayez déjà cela

Edit : en regardant dans le code sur cette ligne, il y a une erreur sur cette ligne je pense. juste avant le THEN le > 0 à la fin doit être après la parenthèse. Comme ceci :

If ListBox1.Selected(i) And Application.CountIf(CS.Worksheets("HYDREKA").Columns("d"), ListBox1.List(i, 0)) > 0 And Application.CountIf(CS.Worksheets("HYDREKA").Columns("c"), ComboBox2.Value) > 0 And Application.CountIf(CS.Worksheets("HYDREKA").Columns("f"), ListBox1.List(i, 1))> 0 Then

je pense que le controle sur la colonne F est inutile puisque votre numéro de série est unique. Cela pourrait simplifier le code sur cette ligne comme ceci :

If ListBox1.Selected(i) And Application.CountIf(CS.Worksheets("HYDREKA").Columns("d"), ListBox1.List(i, 0)) > 0 And Application.CountIf(CS.Worksheets("HYDREKA").Columns("c"), ComboBox2.Value) > 0 then

Bonjour !

Oui effectivement, la ligne étant tellement longue que je n'avais pas vu les autres ... Merci !

Oui j'ai également remarqué qu'il y avait un souci de parenthèse à la fin de chaque ligne ! merci aussi !

je pense que le controle sur la colonne F est inutile puisque votre numéro de série est unique. Cela pourrait simplifier le code sur cette ligne comme ceci :

Oui c'est une bonne remarque, cependant ce n'est pas tout à fait le vrai. Car certain matériels externes n'ont pas de numéros de série, c'est rare, mais ça existe, et d'autres ont seulement "-" comme numéros de série. Donc le contrôle sur la colonne f peut servir dans ces cas là !

Finalement le code suivant fonctionne parfaitement :

If CheckBox3.Value = True Then
    Call ouvre_materiel_externe
    For i = 0 To n
        With CS.Worksheets("HYDREKA")
            If ListBox1.Selected(i) And Application.CountIf(.Columns("d"), ListBox1.List(i, 0)) > 0 And Application.CountIf(.Columns("c"), ComboBox2.Value) > 0 And Application.CountIf(.Columns("f"), ListBox1.List(i, 1)) > 0 Then
                For Each cel In .Range("C3:C" & .Range("C" & .Rows.Count).End(xlUp).Row)
                    If cel.Value = ComboBox2.Value Then
                        If ListBox1.List(i, 0) = cel(1, 2) Then
                           cel(1, 15) = TextBox6.Value
                        End If
                    End If
                Next
            End If
        End With
        With CS.Worksheets("IJINUS")
            If ListBox1.Selected(i) And Application.CountIf(.Columns("c"), ListBox1.List(i, 0)) > 0 And Application.CountIf(.Columns("b"), ComboBox2.Value) > 0 And Application.CountIf(.Columns("e"), ListBox1.List(i, 1)) > 0 Then
                For Each cel In .Range("B3:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
                    If cel.Value = ComboBox2.Value Then
                        If ListBox1.List(i, 0) = cel(1, 2) Then
                           cel(1, 15) = TextBox6.Value
                        End If
                    End If
                Next
            End If
        End With
        With CS.Worksheets("AUTRES LOUEURS")
            If ListBox1.Selected(i) And Application.CountIf(.Columns("c"), ListBox1.List(i, 0)) > 0 And Application.CountIf(.Columns("b"), ComboBox2.Value) > 0 And Application.CountIf(.Columns("e"), ListBox1.List(i, 1)) > 0 Then
                For Each cel In .Range("B3:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
                    If cel.Value = ComboBox2.Value Then
                        If ListBox1.List(i, 0) = cel(1, 2) Then
                           cel(1, 15) = TextBox6.Value
                        End If
                    End If
                Next
            End If
        End With

    Next
End If

CS.Save 'enregistre le fichier
CS.Close False 'fermeture du fichier Gestion-Loc sans enregistrant

Merci beaucoup pour l'aide !

Bonne journée

Rechercher des sujets similaires à "chercher feuille element listbox present"