Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

boucle avec exclusion

256 views
Skip to first unread message

patrick lyon

unread,
May 19, 2003, 8:45:16 AM5/19/03
to
bonjour
je fais un traitement sur un tableau via une macro vba
elle fonctionne correctement avec les boucles suivantes
For j = ppcol1 To 12
For i = 4 To ppnbligne + 5
"traitement"
Next i
Next j
mon pb c'est que je voudrais sauter certaines lignes
en partant de la ligne 4 ne pas traiter les lignes 9,15,21,27, etc...
et ce jusqu'a la fin de la boucle i
evidement je sais pas trop comment faire simple pour résoudre mon pb

AV

unread,
May 19, 2003, 9:15:05 AM5/19/03
to
If i Mod 6 = 3 Then --> reprendre après le "traitement" (avant next i)

AV

"patrick lyon" <patr...@lyon.com> a écrit dans le message news:
baajku$9m...@news.rd.francetelecom.fr...

Haxo

unread,
May 19, 2003, 9:16:05 AM5/19/03
to
Bonjour ,

Avec ce test cela devrait marcher :

If i > 4 and (i - 3) Mod 6 <> 0 then
traitement des lignes
endif


>-----Message d'origine-----

>.
>

Michel Gaboly

unread,
May 19, 2003, 9:35:19 AM5/19/03
to
Bonjour,

Lorsque i est égal à l'une des valeurs à exclure - 1, rajoute un i + 1

Si les valeurs sont régulières comme dans ton exemple, utilise un modulo, sinon
un Or :

For i = 4 To 30


If i Mod 6 = 3 Then

i = i + 1
End If
Ton traitement
Next i

ou

For i = 4 To 30
If i = 6 Or i = 12 Or i = 19 Then
i = i + 1
End If
Ton traitement
Next i


patrick lyon a écrit :

--
Cordialement,

Michel Gaboly
http://www.gaboly.com


patrick lyon

unread,
May 19, 2003, 9:51:05 AM5/19/03
to
ok j'ai bien lu vos 3 réponses
je vois la lumière
par contre dans mon traitement je recherche la n plus grande valeur de la
colonne
et avidement, peux on trouver la n grande valeur de la colonne sauf les
lignes a exclure...

"Haxo" <ha...@trucs.com> a écrit dans le message news:
082b01c31e08$cd5de400$a401...@phx.gbl...

Michel Gaboly

unread,
May 19, 2003, 10:28:34 AM5/19/03
to
Re,

Initialise une variable avec une valeur suffisamment basse pour être sûr qu'elle
est inférieure à la valeur maximale de la colonne, puis lors de chaque passage de
la boucle fais un test :

ValMaxi = -10^100
For i = 4 to ppnbligne + 5
' Exclusion lignes 9, 15, 21, ...


If i Mod 6 = 3 Then
i = i + 1
End If

' MAJ ValMaxi
If "Valeur correspondant à la ligne en cours" > ValMaxi then
ValMaxi = "Valeur correspondant à la ligne en cours"
End If
Next i

patrick lyon a écrit :

> ok j'ai bien lu vos 3 réponses

--

alain31

unread,
May 19, 2003, 11:16:54 AM5/19/03
to
Une autre solution consiste à ajouter step qui fera passé i par pas de n
(ex:6)
For i = 1 to 30 step 6
Traitement donnera 1,7,13,19...
next i
Alain

"patrick lyon" <patr...@lyon.com> a écrit dans le message de news:
baajku$9m...@news.rd.francetelecom.fr...

AV

unread,
May 19, 2003, 11:46:41 AM5/19/03
to
Ave,

> Une autre solution consiste à ajouter step qui fera passé i par pas de n
(ex:6)

Me semble que ça va sauter des lignes (notamment au début où i = 4)

AV


Daniel.M

unread,
May 19, 2003, 5:15:59 PM5/19/03
to
Salut Michel,

> For i = 4 To 30
> If i Mod 6 = 3 Then
> i = i + 1
> End If
> Ton traitement
> Next i
>

Avec ce code, tu vas sauter 2 lignes à chaque fois (le Next incrémentant
aussi). Donc, tu passes outre la 10ième, la 16ième, etc.

AMA, il vaut mieux:

For i = 4 To 30

If i Mod 6 <> 3 Then
Ton Traitement
End If
Next i

Salutations,

Daniel M.

Michel Gaboly

unread,
May 20, 2003, 2:56:59 AM5/20/03
to
Bonjour Daniel,

Tu te trompes, ;-((

Je sais bien que le Next incrémente aussi, c'est même le but du jeu ;-))

Cela marche parfaitement :

Je saute 1 ligne et pas deux si le test

If i Mod 6 = 3 Then

est positif.


Exemple avec i = 8 : 8 modulo 6 = 2

Le test est négatif, i reste à 8 et le traitement est exécuté.

Next i

i passe à 9. 9 modulo 6 = 3

Le test est négatif, i passe à 10 et le traitement est exécuté.

Next i

i passe à 11. 11 modulo 6 = 5

Le test est négatif, i reste à 11 et le traitement est exécuté.

...

Le traitement a été exécuté pour les valeurs 8, 10 et 11.

Seule la valeur 9 a été sautée. Ce qui était le but recherché.

Si tu n'es pas convaincu, lance cette procédure :

Sub BoucleAvecSauts()
Dim i As Integer


For i = 4 To 30
If i Mod 6 = 3 Then
i = i + 1
End If

ActiveCell.Offset(i) = i
Next i
End Sub

"Daniel.M" a écrit :

--

patrick lyon

unread,
May 20, 2003, 3:01:42 AM5/20/03
to
merci michel
j'ai contourné le pb
en fait je n'avais pas tout dis
je cherche les 7 plus grandes et les 7 plus petites valeurs et j'applique un
dégradé de couleur sur les valeurs trouvées
les lignes correspondent aux 5 jours de la semaine et la ligne suivantes a
la moyenne de la semaine.
il faut donc que j'évite de tester les lignes des moyennes.
vos réponses d'hier vont me permettre de le faire.
par contre pour éviter de trouver la plus grande valeur se trouvant dans une
ligne moyenne, j'ai transformé les formules de calcul de la moyenne en
texte(moyenne()) et ça marche
je sais pas si j'ai été clair
@+

"Michel Gaboly" <mic...@gaboly.com> a écrit dans le message news:
3EC8E928...@gaboly.com...

Michel Gaboly

unread,
May 20, 2003, 3:39:53 AM5/20/03
to
Bonjour Patrick,

C'est clair ;-))

L'emploi de TEXTE(MOYENNE()) est astucieux, bravo.


patrick lyon a écrit :

patrick lyon

unread,
May 20, 2003, 3:34:27 AM5/20/03
to
en fait le fait d'avoir passer en format texte les fameuses lignes me permet
de résoudre tout les pb
je peux tester, vu que c'est du texte elles ne correspondront pas aux
critères.
mais le principe de sauter des lignes est intéressent, je le garde sous le
coude

"AV" <alain....@wanadoo.fr> a écrit dans le message news:
ORZsY3hH...@tk2msftngp13.phx.gbl...

patrick lyon

unread,
May 20, 2003, 3:52:26 AM5/20/03
to
ça t'embete si j'imprime ta réponse pour l'encadrer et l'accrocher au mur ?

;o)

"Michel Gaboly" <mic...@gaboly.com> a écrit dans le message news:

3EC9DBC0...@gaboly.com...

Michel Gaboly

unread,
May 20, 2003, 4:02:02 AM5/20/03
to
;-))))

patrick lyon a écrit :

Daniel.M

unread,
May 20, 2003, 7:36:41 AM5/20/03
to
Salut Michel,

Je me suis trompé en effet. J'aurais pu tester ton code au moins avant de
t'écrire! :-(

Car je voyais "Ton Traitement" dans le Else. Mais... il y a pas de Else!
:-)

Salutations,

Daniel M.

"Michel Gaboly" <mic...@gaboly.com> wrote in message
news:3EC9D1B8...@gaboly.com...

Michel Gaboly

unread,
May 20, 2003, 10:23:16 AM5/20/03
to
Re,

Pa ni problem ;-)))


"Daniel.M" a écrit :

--

0 new messages