Comment faire avec For Each ?
Résolu
jen_peplu
Messages postés
35
Statut
Membre
-
jen_peplu Messages postés 35 Statut Membre -
jen_peplu Messages postés 35 Statut Membre -
Bonjour,
Je souhaite créer une procédure qui, si dans ma colonne R il y a une ou plusieurs cellule(s) > 0 alors cette ou ces cellule(s) s'additionne(nt) à la cellule de la même ligne mais en colonne P. Voila ce que j'ai écrit, mais le For Each me pose un problême. J'ai beau chercher sur les forums, je plante, merci d'avance, en espérant avoir été assez clair.
Sub ajouter()
Dim a As Range ' colonne ("R3:R200")
Dim p As Range ' colonne ("P3:P200")
Dim cellules As Range
Set a = Range("commande") ' colonne ("R3:R200")
Set p = Range("previs") ' colonne ("P3:P200")
For Each cellules In a
If cellules.Value > 0 Then
p = a + p ????????
Else
Exit Sub
End If
Next cellules
End Sub
Je souhaite créer une procédure qui, si dans ma colonne R il y a une ou plusieurs cellule(s) > 0 alors cette ou ces cellule(s) s'additionne(nt) à la cellule de la même ligne mais en colonne P. Voila ce que j'ai écrit, mais le For Each me pose un problême. J'ai beau chercher sur les forums, je plante, merci d'avance, en espérant avoir été assez clair.
Sub ajouter()
Dim a As Range ' colonne ("R3:R200")
Dim p As Range ' colonne ("P3:P200")
Dim cellules As Range
Set a = Range("commande") ' colonne ("R3:R200")
Set p = Range("previs") ' colonne ("P3:P200")
For Each cellules In a
If cellules.Value > 0 Then
p = a + p ????????
Else
Exit Sub
End If
Next cellules
End Sub
A voir également:
- Comment faire avec For Each ?
- 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
- Winrar for pc - Télécharger - Compression & Décompression
4 réponses
bonsoir,
je ne sais pas si j'ai bien compris
si ça ne convient pas, tu expliques
RQ. j'ai mis des identificateurs plus explicites
bonne suite
je ne sais pas si j'ai bien compris
Sub ajouter()
Dim com As Range
Dim pre As Range
Dim cel As Range
Set com = Range("commande")
Set pre = Range("previs")
For Each cel In com
If cel.Value > 0 Then
pre.Cells(cel.Row, cel.Column).Value = pre.Cells(cel.Row, cel.Column).Value + cel.Value
End If
Next cel
End Sub
si ça ne convient pas, tu expliques
RQ. j'ai mis des identificateurs plus explicites
bonne suite
Bonsoir ccm81
Merci d'avoir répondu à ma question. J'ai testé ta procédure en pas à pas détaillé mais rien ne se passe. Toutes les lignes sont passées une première fois puis If.., End If, Next cel et ça recommence If.., End If, Next cel, aucun message d'erreur et rien ne se produit.
J'ai planché de mon côté sur la base de ce que tu as produit voilà où j'en suis arrivé :
Sub ajouter()
Dim com As Range
Dim cel As Range
Set com = Range("commande")
For Each cellules In com
If cel.Value > 0 Then
cel.Offset(0, -2).Value = cel.Offset(0, -2).Value + cel.Value
End If
Next cellules
End Sub
Si ce n'est trop te demander, peux-tu m'expliquer succinctement cette ligne "pre.Cells(cel.Row, cel.Column).Value = pre.Cells(cel.Row, cel.Column).Value + cel.Value", je pense avoir saisi et je ne vois pas pourquoi cela ne fonctionne pas.
Merci, bonne soirée.
Merci d'avoir répondu à ma question. J'ai testé ta procédure en pas à pas détaillé mais rien ne se passe. Toutes les lignes sont passées une première fois puis If.., End If, Next cel et ça recommence If.., End If, Next cel, aucun message d'erreur et rien ne se produit.
J'ai planché de mon côté sur la base de ce que tu as produit voilà où j'en suis arrivé :
Sub ajouter()
Dim com As Range
Dim cel As Range
Set com = Range("commande")
For Each cellules In com
If cel.Value > 0 Then
cel.Offset(0, -2).Value = cel.Offset(0, -2).Value + cel.Value
End If
Next cellules
End Sub
Si ce n'est trop te demander, peux-tu m'expliquer succinctement cette ligne "pre.Cells(cel.Row, cel.Column).Value = pre.Cells(cel.Row, cel.Column).Value + cel.Value", je pense avoir saisi et je ne vois pas pourquoi cela ne fonctionne pas.
Merci, bonne soirée.
re
1. Pour mon exemple, je l'ai fabriqué dans l'esprit de ta demande en utilisant deux plages "commande" et "previs".
2. je crois que le pb vient du fait que tes plages commencent en ligne 3, et j'ai fait mon exemple avec des plages commençant en ligne 1, il faut donc tenir compte du décalage, et voila, en principe le code correct.
3. pre.Cells(cel.Row, cel.Column).Value
les cellules de la plage "pre" sont accessibles par leurs coordonnées (lig, col) relatives à cette plage, cad que la 1° cellule de "pre" est accessible avec pre.Cells(1,1) alors que pour la 1° cellule de "commande" cel.row vaut 3 (chez toi), d'où le décalage
4. Ta solution avec offset permet d'éviter ce pb (attention à l'identificateur pour ta cellule courante qui change en cours de route cellules-cel)
bonne suite
1. Pour mon exemple, je l'ai fabriqué dans l'esprit de ta demande en utilisant deux plages "commande" et "previs".
2. je crois que le pb vient du fait que tes plages commencent en ligne 3, et j'ai fait mon exemple avec des plages commençant en ligne 1, il faut donc tenir compte du décalage, et voila, en principe le code correct.
3. pre.Cells(cel.Row, cel.Column).Value
les cellules de la plage "pre" sont accessibles par leurs coordonnées (lig, col) relatives à cette plage, cad que la 1° cellule de "pre" est accessible avec pre.Cells(1,1) alors que pour la 1° cellule de "commande" cel.row vaut 3 (chez toi), d'où le décalage
4. Ta solution avec offset permet d'éviter ce pb (attention à l'identificateur pour ta cellule courante qui change en cours de route cellules-cel)
Sub ajouter()
Dim com As Range
Dim pre As Range
Dim cel As Range
Set com = Range("commande")
Set pre = Range("previs")
For Each cel In com
If cel.Value > 0 Then
pre.Cells(cel.Row - 2, cel.Column).Value = pre.Cells(cel.Row - 2, cel.Column).Value + cel.Value
End If
Next cel
End Sub
bonne suite
Bonsoir
Effectivement, dans la suite de mon programme, je colle les valeurs de « previs » dans un tableau sur une autre feuille et j'ai un décalage qui s'opère d'autant de cellule, lié au fait que ma plage commence ligne 3. Solution adoptée, démarrer mes plages ligne 1.
J'ai essayé ton code, cela ne marche pas chez moi. J'ai modifié le « cel.Row-2 en cel.Row+2 » car avec cette valeur le controltiptext m'indique cel.Row =3 (ma plage commence toujours ligne 3) et là, ça ne marche pas non plus, pas d'erreur, mais les cellules ne s'additionnent pas.
Merci quand même, je te dérange pas plus avec ça car ta syntaxe m'a permis de créer la mienne, un peu plus simpliste j'en conviens, mais c'est un début et je reviendrai sur la tienne plus tard.
A une prochaine.
Effectivement, dans la suite de mon programme, je colle les valeurs de « previs » dans un tableau sur une autre feuille et j'ai un décalage qui s'opère d'autant de cellule, lié au fait que ma plage commence ligne 3. Solution adoptée, démarrer mes plages ligne 1.
J'ai essayé ton code, cela ne marche pas chez moi. J'ai modifié le « cel.Row-2 en cel.Row+2 » car avec cette valeur le controltiptext m'indique cel.Row =3 (ma plage commence toujours ligne 3) et là, ça ne marche pas non plus, pas d'erreur, mais les cellules ne s'additionnent pas.
Merci quand même, je te dérange pas plus avec ça car ta syntaxe m'a permis de créer la mienne, un peu plus simpliste j'en conviens, mais c'est un début et je reviendrai sur la tienne plus tard.
A une prochaine.