[VBA] If dans une boucle For
Coupdebambou
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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 ?
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 ?
A voir également:
- [VBA] If dans une boucle For
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
- Opera mini for pc - Télécharger - Navigateurs
2 réponses
Bonjour,
Lorsque tu fais ton test, il se fait sur 'Value' alors que tu vises le format et donc tu aurais dû écrire
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
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
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
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
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