Tests de cellule sous Excel via VBA

Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 - 30 août 2004 à 15:02
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 - 31 août 2004 à 09:01
Bonjour tout le monde,

Voici ce que j'aimerai faire. J'ai une colonne remplie de TEST PASS et de TEST FAIL. Dès qu'un TEST FAIL apparait dans cette colonne, je voudrai qu'un TEST FAIL s'écrire dans une case, en rouge. J'aimerai aussi, si toutefois ceci était possible, que lorsque je clique sur le TEST FAIL en rouge, il me conduise, à chaque appuie, à la case où il y a le problème.

Voici ce que j'ai commencé à faire (sachant que je ne suis pas très fort en programmation) :

Private Sub CommandButton1_Click()

Dim i As Integer
i = 3
Range("D3").ActivateFor i 1 To i 999
If ActiveCell.Offset(i, 0).Value = "FAIL" Then
Range("E4").Activate
ActiveCell.Activate = "FAIL"
GoTo Fin
Else
Range("E4").Activate
ActiveCell.Activate = " TEST PASS"
End If
Next
i = i + 1
Exit For
Fin:
End Sub

Et biensûr ça ne marche pas. Si quelqu'un peut me venir en aide, il ou elle sera le ou la bienvenu(e). Merci d'avance.

@+

Adoc5
:)

10 réponses

dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
30 août 2004 à 15:46
Bonjour,

Il y a moyen de faire bien plus simple en utilisant la fonction "Rechercher" d'Excel. Il faut associer la macro ci-dessous à un
bouton, à chaque clic sur ce bouton la 1ère cellule contenant
FAIL est selectionnée.

Sub ChercheFAIL()
'
' ChercheFAIL Macro
' Macro enregistrée le 30.08.2004 par dp
'
On Error Resume Next
Range("A1:A100").Select
Selection.Find(What:="FAIL", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
ActiveCell.Select
'
End Sub

Bon(ne) courage, développement, salutation...
(choisissez ce qui vous convient) dp
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
30 août 2004 à 16:00
Merci bien.
J'ai modifié ton code de la façon suivante :

Private Sub CommandButton1_Click()

Dim toto As Variant
On Error Resume Next
Range("D3:D1002").Select
Selection.Find(What:="FAIL", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
toto = ActiveCell.Select
Range("E4").Activate
ActiveCell.Value = toto
End Sub

Mais le pb c'est qu'il m'affiche dans la case TRUE alors que j'ai des cases à FAIL. Il y a un bug, non ?
:)
0
dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
30 août 2004 à 16:31
Il faut modifier une ligne de ton code :

toto = ActiveCell.Value

Bon(ne) courage, développement, salutation...
(choisissez ce qui vous convient) dp
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
30 août 2004 à 16:42
C'est fait, mais il m'écrit PASS alors qu'il y a des FAIL dans ma colonne et le programme ne s'arrète pas au premier FAIL qu'il rencontre.

Vois-tu d'où provient le problème ?
:)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CrisseTof Messages postés 57 Date d'inscription jeudi 5 août 2004 Statut Membre Dernière intervention 2 juillet 2005 1
30 août 2004 à 18:28
Je pense que le problème est que tu as mis Range("D3").Activate
en dehors de ta boucle for.

Dès que tu as fait ta boucle une fois, la cellule active est E4, donc ton offset se rapporte à E4 et non pas à D3.

Dim i As Integer
i = 3For i 1 To i 999
Range("D3").Activate
If ActiveCell.Offset(i, 0).Value = "FAIL" Then
Range("E4").Activate
ActiveCell.Activate = "FAIL"
....

pour le rouge :
ActiveCell.Font.ColorIndex = 3
0
dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
31 août 2004 à 07:54
J'ai testé ta macro (30.08; 16:00) sur mon poste, cela
fonctionne parfaitement. Il ne semble pas y avoir de bug.
Est-elle intégrée dans quelque chose de plus conséquent ?

Bon(ne) courage, développement, salutation...
(choisissez ce qui vous convient) dp
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
31 août 2004 à 08:10
Salut et merci de ta remarque.

Voici ce que j'ai inscrit dans mon programme :

Private Sub CommandButton1_Click()

Dim i As Integer

i = 1For i 1 To i 999
Range("D3").Activate
If ActiveCell.Offset(i, 0).Value = "FAIL" Then
Range("E4").Activate
ActiveCell.Activate = "TEST FAIL"
GoTo fin
Else
Range("E4").Activate
ActiveCell.Activate = "TEST PASS"
End If
fin:
Next
End Sub

Lorsque je le teste en pas à pas, je n'entre jamais dans la boucle for. Peux-tu m'aider s'il te plait ?
Merci d'avance.

Adoc5
:)
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
31 août 2004 à 08:25
Salut, je viens de tester ton prog en pas à pas.
Si j'ai bien compris, la variable toto contient "TRUE" lorsque il y a un FAIL présent dans la colonne ? C'est ça ?

Merci d'avance pour ta réponse.
:)
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
31 août 2004 à 08:30
Je viens de le tester de nouveau en remplissant une colonne entière de FAIL puis ensuite de PASS et la variable toto contient toujours TRUE. Tu vois ce que je veux dire ? Saurais-tu me dire d'où ceci peut-il bien provenir ?

Merci d'avance.
:)
0
Adoc5 Messages postés 53 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 1 octobre 2007 1
31 août 2004 à 09:01
ça y est ça marche, voici le code :

Private Sub CommandButton1_Click()

Dim toto As Variant
Dim i As Integer
On Error Resume Next

i = 0
For i = 0 To 999
Range("D3").Activate
toto = ActiveCell.Offset(i, 0)
If toto = "PASS" Then
Range("E4").Activate
ActiveCell.Value = "TEST PASS"
Else
Range("E4").Activate
ActiveCell.Value = "TEST FAIL"
GoTo fin
End If
Next
fin:
End Sub

@+
:)
0
Rejoignez-nous