Problème recherche valeur non trouvée avec macro
Bonjour tout le monde,
Je suis à la recherche d'une solution à mon problème et, en fouillant sur le forum, je n'ai pas trouvé de solution à mon souci. Je précise que je suis débutant en programmation...
Le voici:
J'ai 2 onglets feuil1et Paramètres
Dans l'onglet paramètres j'ai une liste de valeurs de B3 à B5
La macro que j'ai faite cherche la valeur en B3 (de l'onglet paramètres) dans feuil1 et la copie plus loin en D3 puis cherche la valeur de B4 et fait de même en D4 etc etc...
Mon souci est que dès qu'une valeur de l'onglet Paramètres n'est pas trouvée en Feuil1, la macro s'arrête et ne fait pas les recherches suivantes.
Voici le code que j'ai enregistré puis arrangé:
Range("A2").Select
Cells.Find(What:=Sheets("Paremètres").Range("B3"), after:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.Copy
Range("D3").Select
ActiveSheet.Paste
Range("A2").Select
Cells.Find(What:=Sheets("Paremètres").Range("B4"), after:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.Copy
Range("D4").Select
ActiveSheet.Paste
Range("A2").Select
Cells.Find(What:=Sheets("Paremètres").Range("B5"), after:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.Copy
Range("D5").Select
ActiveSheet.Paste
Je pense qu'il doit y avoir beaucoup plus simple au niveau de la longueur et du code (notamment avec des IF) mais je ne suis pas encore assez rodé pour maîtriser le sujet.
Je précise également que l'énoncé est un peu simplifié, en réalité il y a une 50aine de valeurs.
Merci beaucoup pour votre aide!
Anthony
Bonjour
Le plus simple c'est surtout de fournir un fichier
Essayes
Sub test()
Dim J As Long
Dim Cel As Range
For J = 3 To 5
Set Cel = Cells.Find(What:=Sheets("Paremètres").Range("B" & J), after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not Cel Is Nothing Then
Range("D" & J) = Cel
End If
Next J
End SubBonjour,
Merci pour votre réponse. Effectivement un fichier en guise d'exemple sera plus explicite.
En lancant la macro test, cette dernière trouve les 3 valeurs listées dans l'onglet Paramètres mais affiche une erreur car elle ne trouve pas les valeurs restantes.
J'aimerais faire en sorte que la macro continue à tourner même si elle ne trouve pas les valeurs restantes...
Si elle trouve la valeur en B3, elle copie colle les données correspondantes de l'onglet TCD à feuil1
Si elle ne trouve pas la valeur en B3, ignorer l'erreur et chercher la valeur en B4...
Désolé mais cela fait peu de temps que je traite avec les différents codes...
Merci encore
Anthony
Bonjour
Remplaces ta macro par celle-ci
Elle est un peu compliquée car la 1ère recherche est collée à la ligne de titre
On pourrait passer par Selection comme tu as fait, mais j'aime pas (quand je peux éviter)
Sub test1()
Dim J As Long
Dim Cel As Range
Dim Col As Integer
Dim Lig As Long
For J = 3 To Sheets("Paramètres").Range("B" & Rows.Count).End(xlUp).Row
Set Cel = Cells.Find(What:=Sheets("Paramètres").Range("B" & J), after:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not Cel Is Nothing Then
Col = Cells(Cel.Row, Columns.Count).End(xlToLeft).Column
Lig = Cells(Cel.Row, Col).End(xlDown).Row
Range(Cells(Cel.Row, Cel.Column), Cells(Lig, Col)).Copy Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Offset(4, 0)
End If
Next J
End Sub