Explications sur la commande for each

Salut à tous,

j'ai beau lire à droite à gauche sur le net, je ne comprends pas ce que je suis en train de faire ou plutot ce que j'essaye de faire :

J'ai une colonne dans laquelle j'ai un texte de type 26/07/2018 JEUDI. Je voudrais supprimer le _JEUDI.

J'ai voulu essayer avec un for each in pensant que c'était une méthode simple.

J'ai donc codé : .

    i = Sheets("Charge").Range("B1000").End(xlUp).Row
    For Each c In Worksheets("Charge").Range("B6" & ":B" & i).Cells

Ce que je traduis par sur ma feuille, pour chaque c, dans ma plage de B6 à i

Déjà le .cells, je ne comprends pas à quoi il sert

Ensuite je code :

 c = Left(c, 8)
    Next

Quand je passe la souris sur le c, j'ai d'abord comme résultat "26/07/18 JEUDI" puis ensuite "26/07/18".

Ca fonctionne donc bien même si je ne comprends pas vraiment la syntaxe, par contre, mes cellules ne sont pas écrasées.

Dans ce code, c est bien égal à la cellule entière non ?

Bref j'suis un peu largué quoi...

Bonjour Gmarche, bonjour le forum,

Ton code est correct, même si le .Cells n'est pas nécessaire. J'aurais quand même écrit :

Dim O As workSheet
Dim C As Range
dim I As Integer

Set O = Worksheets("Charge")
I = O.Range("B1000").End(xlUp).Row
For Each C In O.Range("B6:B" & I)
'...

Ensuite, méfie toi des formats car tu peux taper 26/07/2018 et la cellule t'affiche 26/07/2018 JEUDI dans ce cas la macro ne changera rien, il te faut juste modifier le format...

Bonjour,

For Each... Next est une instruction de boucle qui permet de parcourir les objets d'une collection (et éventuellement les éléments d'un tableau).

Sa syntaxe est :

For Each objet In collection
...instructions à réaliser pour chaque objet
Next objet

objet est une variable objet du même type que les objets de la collection parcourue.

Pour bien faire, tu dois donc déclarer en tête de la procédure ta variable c ainsi :

Dim c As Range

Ta collection est une plage de cellule, tu t'es torturé un peu pour la définir :

For Each c In Worksheets("Charge").Range("B6:B" & i)

suffisait.

Note que .Cells pour préciser que tu vises une collection de cellules peut être omis car dans ce cas il n'y a pas ambiguïté avec d'autres unités d'objets Range (Rows, Columns, Areas), tu es sur une plage colonne continue qui ne peut être découpée qu'en cellules. Mais dans d'autres cas, tu pourras avoir une erreur 1004, Excel ne s'y retrouvant pas et exigera que tu fournisses la précision...

Ensuite, la date occupant les 8 premiers caractères de ton texte, cela va fonctionner avec Left(c, 8), mais tu n'obtiendras peut-être pas une date mais une valeur texte !

Pour le savoir, il te suffit de regarder si le résultat se cadre à gauche (texte) ou à droite (date, donc nombre) dans la cellule, et dans ce dernier cas, la barre de formule afficherait 26/07/2018.

Si tu veux obtenir une date, il faut alors convertir en date :

c = DateValue(Left(c, 8))

Cordialement.

Merci à tous les deux,

j'ai juste ajouté dim c as range en début de code et ça fonctionne du coup.

Concernant ma plage de cellule, j'ai pris une plage avec un end(xlup) car j'ai besoin en permanence dans cette macro de partir de la dernière ligne non vide de ma page .

Concernant le format date, je savais qu'il fallait que je le change car on est effectivement bien sur du texte, mais je voulais le faire un peu plus loin dans le code.

Rechercher des sujets similaires à "explications commande each"