Comment faire avec For Each ?

Résolu/Fermé
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012 - 11 avril 2011 à 19:05
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012 - 13 avril 2011 à 20:21
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


A voir également:

4 réponses

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
Modifié par ccm81 le 11/04/2011 à 21:03
bonsoir,
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
0
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012
12 avril 2011 à 20:26
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.
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
13 avril 2011 à 10:18
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)

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
0
jen_peplu Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 25 mars 2012
13 avril 2011 à 20:21
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.
0