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
A voir également:
- VBA condition sur un find dans une boucle
- Excel cellule couleur si condition texte - Guide
- Find and mount - Télécharger - Récupération de données
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Ava find - Télécharger - Divers Utilitaires
- Excel colorer une cellule sous condition d'une autre cellule ✓ - Forum Excel
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é !
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é !