Compléter un code par un test
Résolu
diabolo5495
Messages postés
119
Statut
Membre
-
diabolo5495 Messages postés 119 Statut Membre -
diabolo5495 Messages postés 119 Statut Membre -
Bonjour à tous,
Voilà j'avais déjà fait appel à vos services pour un code en VBA. Et de nouveau bloqué, j'ai donc encore besoin de votre aide. Voilà le problème : voici un code que pijaku m'avais bien aider à mettre en place mais je dois y ajouter un test supplémentaire.
Dans ce code, il faudrait que lorsque qu'il trouve la fameuse Personne, il fasse, sur la cellule décalé de deux vers la droite de la ligne où il a trouvé Personne, il fasse un test pour voir si "100" apparait et ainsi mettre le texte qu'il écrit normalement par ce code
Voili Voilou
En espérant avoir été clair, et en vous remerciant d'avance
Bonne journée
Voilà j'avais déjà fait appel à vos services pour un code en VBA. Et de nouveau bloqué, j'ai donc encore besoin de votre aide. Voilà le problème : voici un code que pijaku m'avais bien aider à mettre en place mais je dois y ajouter un test supplémentaire.
Sub Personne()
Dim RngCherche As Range
Dim mot_chercher As String, firstAddress As String
Dim i As Integer
i = 2 'le premier mot trouvé sera placé en B2 de la Feuil3
mot_chercher = "*" + "Personne" + "*"
Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlWhole)
If Not RngCherche Is Nothing Then
firstAddress = RngCherche.Address
Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value
i = i + 1
Do
Set RngCherche = Sheets("Pilotage").Cells.FindNext(RngCherche)
Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value
i = i + 1
Loop While Not RngCherche Is Nothing And RngCherche.Address <> firstAddress
Else
MsgBox "Pas de tâche pour" + mot_chercher
End If
Set RngCherche = Nothing
End Sub
Dans ce code, il faudrait que lorsque qu'il trouve la fameuse Personne, il fasse, sur la cellule décalé de deux vers la droite de la ligne où il a trouvé Personne, il fasse un test pour voir si "100" apparait et ainsi mettre le texte qu'il écrit normalement par ce code
Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value en rouge.
Voili Voilou
En espérant avoir été clair, et en vous remerciant d'avance
Bonne journée
2 réponses
-
Bonjour,
Plusieurs choses me gênent dans ce code :
1- dans la variable mot_chercher tu insères une valeur incomplète ("*" blabla "*"). Puis, après dans le code, tu utilises Lookat:=xlwhole. En fait, la propriété lookat de .find te permet de chercher une partie ou le tout.
Donc au lieu de mettre des * et le lookat:=xlwhole, tu peux indiquer :mot_chercher = "Personne" Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlPart)
2- Tu cherches dans toute ta feuille après le mot personne. Puis, tu renvoie une valeur contenue deux colonnes à GAUCHE de l'endroit trouvé (RngCherche.Offset(0, -2).Value). C'est source de plantage si ta macro trouve personne en colonne A ou B...
Sinon, essaye ceci (en gras les modifs) :Sub Personne() Dim RngCherche As Range Dim mot_chercher As String, firstAddress As String Dim i As Integer i = 2 'le premier mot trouvé sera placé en B2 de la Feuil3 mot_chercher = "Personne" Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlPart) If Not RngCherche Is Nothing Then firstAddress = RngCherche.Address Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value If RngCherche.Offset(0, 2) = 100 Then Sheets("Personne").Range("B" & i).Interior.ColorIndex = 3 i = i + 1 Do Set RngCherche = Sheets("Pilotage").Cells.FindNext(RngCherche) Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value If RngCherche.Offset(0, 2) = 100 Then Sheets("Personne").Range("B" & i).Interior.ColorIndex = 3 i = i + 1 Loop While Not RngCherche Is Nothing And RngCherche.Address <> firstAddress Else MsgBox "Pas de tâche pour" + mot_chercher End If Set RngCherche = Nothing End Sub-
Bonjour et merci d'avoir répondu aussi vite. Je viens de tester le code. Le problème est que la cellule à tester le 100 contient en fait un pourcentage, donc écrit "100%". Cette page Pilotage m'ayant était fourni, le signe pourcentage s'affiche automatiquement donc je ne peux pas le supprimer :-S. Donc en fait, il faudrait qu'il teste qu'il y ait "100%" et non "100" ce qui est bien plus embêtant à mettre en place je l'admet. En tout cas merci bien pour les optimisations que tu m'as déjà apporter, il est vrai que c'était un peu du bricolage le code que j'ai présenté mais cela fonctionné quand même :-)
-
-
-
Bon j'ai tenté ceci, mais ça ne fonctionne pas (Sidot = Personne)
Sub Sidot() Dim RngCherche As Range, RngCherche2 As Range Dim mot_chercher As String, firstAddress As String, pourcent_chercher As String Dim i As Integer i = 2 'le premier mot trouvé sera placé en B2 de la Feuil3 mot_chercher = "Sidot" pourcent_chercher = "100" Set RngCherche = Sheets("Pilotage").Cells.Find(mot_chercher, lookat:=xlPart) If Not RngCherche Is Nothing Then firstAddress = RngCherche.Address Sheets("Sidot").Range("B" & i) = RngCherche.Offset(0, -2).Value If RngCherche2 = Sheets("Pilotage").Cells.RngCherche.Find(pourcent_chercher, lookat:=xlPart) Then Sheets("Personne").Range("B" & i).Interior.ColorIndex = 3 i = i + 1 Do Set RngCherche = Sheets("Pilotage").Cells.FindNext(RngCherche) Sheets("Sidot").Range("B" & i) = RngCherche.Offset(0, -2).Value If RngCherche2 = Sheets("Pilotage").Cells.RngCherche.Find(pourcent_chercher, lookat:=xlPart) Then Sheets("Personne").Range("B" & i).Interior.ColorIndex = 3 i = i + 1 Loop While Not RngCherche Is Nothing And RngCherche.Address <> firstAddress Else MsgBox "Pas de tâche pour" + mot_chercher End If Set RngCherche = Nothing End Sub -
-
-
Bonjour,
deux vers la droite l'offset doit etre positif donc pas ceci:
Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, -2).Value
mais:
Sheets("Personne").Range("B" & i) = RngCherche.Offset(0, 2).Value
Bonne suite