VBA condition sur un find dans une boucle
mg2k4
-
climbfly -
climbfly -
Bonjour,
Je viens vers vous car je me suis lancé dans la programmation en vba afin faire des calculs sur plusieurs classements à reporter par copier coller sur une autre feuille
Malheureusement, le vba n'étant pas ma spécialité, je rencontre un soucis que je n'arrive pas à corriger, je pense que c'est quelque chose d'assez basique, mais que j'ignore ><
Voila le bout de code qui ne se compile pas:
(je sais pas si c'est bien // pour les commentaires en vba, mais je les rajoute juste ici)
Sub Transfert()
Dim i As Integer
Dim n As Integer
Dim name As String
Dim cellule As Range
Dim search As Range
Dim l As Integer
For i = 0 To 5
Sheets("Input").Activate
name = Range("A" & 34 + 9 * i) //sélection itérative du nom
Range("A" & 37 + 9 * i).Select //sélection itérative du nombre de points
selection.Copy
Sheets("Stats").Activate
Set cellule = Range("A" & 2 + i) //sélection de la case destination du nom
cellule.Value = name //copie du nom
Range("B" & 2 + i).Select
ActiveSheet.Paste //copie des points
Sheets("Input").Activate
Set search = Range("B34:B435").Find(What:=name, LookIn:=xlValues, lookat:=xlWhole) //recherche du nom du joueur dans le 2ème classement
If search.Value Is Not Empty Then // l'erreur se produit sur cette ligne
l = search.Row //copie de la ligne du nom
Range("B" & l + 3).Select //sélection des points
selection.Copy //copie des points
Sheets("Stats").Activate
Range("C" & 2 + i).Select //sélection de la case destination des points
ActiveSheet.Paste
Sheets("Input").Activate
End If
Next i
End Sub
l'erreur renvoyée est "objet requis" n° 424
Alors j'ai essayé sous pleins de syntaxes différentes, chaque fois des erreurs différentes comme "bloc With ou objet non défini" je trouve pas comment faire ><
Et qq renseignements pour ma culture générale ^^
Le retour Range.Find est-il un range ? s'il ne find rien, quel est le type du retour ?
Et faut-il déclarer les variables dans le bloc if même, ou en variable globale ?
Voila, je vous remercie déjà de m'avoir lu, et si vous savez m'apporter réponse c'est encore mieux :D
Bonne soirée
Je viens vers vous car je me suis lancé dans la programmation en vba afin faire des calculs sur plusieurs classements à reporter par copier coller sur une autre feuille
Malheureusement, le vba n'étant pas ma spécialité, je rencontre un soucis que je n'arrive pas à corriger, je pense que c'est quelque chose d'assez basique, mais que j'ignore ><
Voila le bout de code qui ne se compile pas:
(je sais pas si c'est bien // pour les commentaires en vba, mais je les rajoute juste ici)
Sub Transfert()
Dim i As Integer
Dim n As Integer
Dim name As String
Dim cellule As Range
Dim search As Range
Dim l As Integer
For i = 0 To 5
Sheets("Input").Activate
name = Range("A" & 34 + 9 * i) //sélection itérative du nom
Range("A" & 37 + 9 * i).Select //sélection itérative du nombre de points
selection.Copy
Sheets("Stats").Activate
Set cellule = Range("A" & 2 + i) //sélection de la case destination du nom
cellule.Value = name //copie du nom
Range("B" & 2 + i).Select
ActiveSheet.Paste //copie des points
Sheets("Input").Activate
Set search = Range("B34:B435").Find(What:=name, LookIn:=xlValues, lookat:=xlWhole) //recherche du nom du joueur dans le 2ème classement
If search.Value Is Not Empty Then // l'erreur se produit sur cette ligne
l = search.Row //copie de la ligne du nom
Range("B" & l + 3).Select //sélection des points
selection.Copy //copie des points
Sheets("Stats").Activate
Range("C" & 2 + i).Select //sélection de la case destination des points
ActiveSheet.Paste
Sheets("Input").Activate
End If
Next i
End Sub
l'erreur renvoyée est "objet requis" n° 424
Alors j'ai essayé sous pleins de syntaxes différentes, chaque fois des erreurs différentes comme "bloc With ou objet non défini" je trouve pas comment faire ><
Et qq renseignements pour ma culture générale ^^
Le retour Range.Find est-il un range ? s'il ne find rien, quel est le type du retour ?
Et faut-il déclarer les variables dans le bloc if même, ou en variable globale ?
Voila, je vous remercie déjà de m'avoir lu, et si vous savez m'apporter réponse c'est encore mieux :D
Bonne soirée
1 réponse
-
Salut mg2k4,
Apparemment, le résultat de la fonction find renvoie une référence sur une cellule ou la référence nulle (Nothing en vb).
Il faut donc tester avec le code suivant:
If Not search Is Nothing Then
l = search.Row //copie de la ligne du nom
....
End if
Avec search.value, tu demandes une propriété sur un objet qui n'existe pas quand le find n'a pas marché !