Erreur définie par l'application ou par l'objet
i
Bonjour,
je me tourne une fois de plus vers vous car je suis confronté à un problème lors de l’exécution de mon code.
Lorsque mon code atteint ma ligne :
If .Cells(h, 11) = "Yes" & ligne = Lignes(j, 1) Thenil bugg
Le code en entier:
Public Sub Recherche()
Dim Plage As Range
Dim Lignes(), i As Long
Dim Texte As String
Dim Flag As Boolean
P_ligne = Sheets("Écriture").Range("D1").End(xlDown).Row + 1
D_ligne = Sheets("Écriture").Cells(Rows.Count, "D").End(xlUp).Row
Dim j As Integer
Dim h As Integer
Dim ligne As Integer
Dim Nbre As Integer
Dim ws As Worksheet
For i = 1 To D_ligne
If Sheets("Écriture").Cells(i, "B").Value = "m --" Then
Sheets("Écriture").Cells(i, "A").Clear
Exit For
End If
Next i
For i = 1 To D_ligne
If Sheets("Écriture").Cells(i, "A").Value = "Program Name" Then
Sheets("Écriture").Cells(i, "A").Offset(0, 1).Clear
Exit For
End If
Next i
Set Plage = Sheets("Écriture").Columns(2) 'plage de recherche
Texte = "#*" 'expression cherchée
Flag = Find_Next(Plage, Texte, Lignes()) 'appel de la fonction
If Flag Then 'si fonction retourne Vrai = expression trouvée dans la plage
For i = LBound(Lignes) To UBound(Lignes) 'restitution des lignes correspondantes
Debug.Print Lignes(i, 1) & "--> " & Lignes(i, 2) & "--> " & Lignes(i, 3) '1 n°ligne, 2 Nom Machine Brut, 3 Nom Machine
Next i
Else
'MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & Plage.Address
End If
Nbre = Application.CountIf(Plage, Texte)
Set ws = Worksheets("Écriture")
ligne = 0
With ws
For j = LBound(Lignes) To UBound(Lignes)
For h = 0 To D_ligne
If .Cells(h, 11) = "Yes" & ligne = Lignes(j, 1) Then
.Cells(h, 12) = Lignes(j, 3)
Else: End If
ligne = ligne + 1
Next h
Next j
End With
End Sub
'Sources : Net
Public Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
Dim Nbre As Integer
Dim Lig As Long, Cptr As Long
Nbre = Application.CountIf(Rng, Texte)
If Nbre > 0 Then 'Nbre contient le nombre de machines
ReDim Tbl(Nbre - 1, 1 To 3)
Lig = 1
For Cptr = 0 To Nbre - 1
Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
Tbl(Cptr, 1) = Lig ' tableau qui contient les numéro de ligne pour chaque machine
Tbl(Cptr, 2) = Cells(Lig, Rng.Column).Value 'tableau qui contient le nom de chaque machines
Tbl(Cptr, 3) = Mid(Tbl(Cptr, 2), 4, 4)
If Tbl(Cptr, 2) = "#1(FX-2)" Then
Tbl(Cptr, 3) = Replace(Tbl(Cptr, 3), "FX-2", "FX-21")
ElseIf Tbl(Cptr, 2) = "#2(FX-2)" Then
Tbl(Cptr, 3) = Replace(Tbl(Cptr, 3), "FX-2", "FX-22")
ElseIf Tbl(Cptr, 2) = "#1(FX-1R)" Then
Tbl(Cptr, 3) = Replace(Tbl(Cptr, 3), "FX-1", "FX-21")
Else:
End If
Next
Debug.Print Nbre
Else
GoTo Absent
End If
Find_Next = True
Exit Function
Absent:
Find_Next = False
End Function
bonjour,
Normal :
h= 0
or il ne peut pas exister de .Cells(h, 11)...
la ligne 0 n'existe pas...
A+
i
Merci, j'ai honte...