Compléter un code par un test

Résolu/Fermé
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 - 23 juil. 2013 à 08:33
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 - 23 juil. 2013 à 10:29
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.

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
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 juil. 2013 à 08:46
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
1
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 27
23 juil. 2013 à 08:56
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 :-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 juil. 2013 à 09:03
Pour le %age, je vais te laisser trouver par toi même...
0
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 27
23 juil. 2013 à 09:06
J'ai déjà tester un truc mais ma macro tournait en boucle et a planté Excel ! Donc je sais qu'il faut pas faire ce que je viens de faire ^^ mais je vais trouver ^^
0
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 27
23 juil. 2013 à 09:16
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
0
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 27
23 juil. 2013 à 09:17
Je me rend compte que j'ai oublié l'offset(0, 2) entre autre mais je ne pense pas que le problème vienne de cela
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
23 juil. 2013 à 08:41
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
0
diabolo5495 Messages postés 109 Date d'inscription lundi 15 juillet 2013 Statut Membre Dernière intervention 10 février 2015 27
23 juil. 2013 à 08:45
Cet offset est bien négatif car il permet de copier le texte de la cellule qui se trouve deux colonnes avant pour la coller dans une autre page ;-) mais merci quand même d'avoir répondu
0