[VBA] If dans une boucle For

Fermé
Coupdebambou - 7 juin 2017 à 17:57
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 7 juin 2017 à 19:00
Bonjour,



je rencontre un soucis sur une problématique VBA :

j'ai un fichier excel avec des données sou cette forme :
DA_CENTRAL_ENO_EXTRACT_BI_ECA_ATL 01/05/2017 22:00 Completed SCTCAA08 0:56:52
J_DA_CENTRAL_ENOOPSMS_CALCUL_ZONES_5 31/05/2017 20:01 ENDED_OK - ended normally SCTCAA07 4 h 7 min 43 s



(contenu des cellules de chaque ligne, nombre de lignes variable dans le temps)

Mon but est de récupérer la valeur (date) de la 5ème cellule de chaque ligne et de la coller dans la 6éme, sous condition que cette valeur ne contienne pas de ":". Le but étant de sortir toutes les dates au format "xx h xx min xx s"

(je fais autre chose derrière, mais mon problème se situe simplement à ce niveau)

Voici un extrait de mon code :

Sub Test()

For i = 2 To Sheets(1).Range("A65000").End(xlUp).Row
DUREE = Sheets("Feuil1").Cells(i, 5).Value
If Not DUREE Like "*:*" Then

Cells(i, 6) = DUREE
End If

Next i

End Sub

Mon problème étant que visiblement ma condition édictée via le if n'est pas prise en compte, car toutes les lignes de mon fichier se voient ajoutée la valeur de i5 dans i6, et ce qu'il y ait présence ou non des ":"

Quelqu'un saurait il m'aider ?

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
Modifié le 7 juin 2017 à 18:47
Bonjour,

Lorsque tu fais ton test, il se fait sur 'Value' alors que tu vises le format et donc tu aurais dû écrire
DUREE = Sheets("Feuil1").Cells(i, 5).NumberFormat


Mais si c'est réellement le format qui te préoccupe il te suffit de sélectionner ta colonne E et de la mettre au format heure.

Sinon si h, min et s sont en valeur alors il faut mettre
DUREE = Sheets("Feuil1").Cells(i, 5).Value
If Not DUREE Like "*:*" Then Cells(i, 6) = Replace(Replace(Replace(DUREE, " h ", ":"), " min ", ":"), " s", "")

Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 7 juin 2017 à 19:09
Bonjour,

pour compléter gb .text te retourne ce que tu vois dans la cellule, donc les ":" éventuels dû au format.
Debug.Print [A2].Value => 0.229166
Debug.Print [A2].Text => "5:30"

eric

PS : tu peux aussi remplacer directement dans la cellule " h " et " min " par ":" et " s" par "", puis convertir en numérique pour n'avoir plus que des heures valides dans cette colonne.
Ah, ben déjà dit par gb :-)

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0