Boucle: For i=-100 to 100 , next i si i= i de départ

Bonsoir,

Je chercher a savoir si c'est possible d'exclure une valeur a tester dans une boucle ?

Merci d'avance

Cordialement

Circus

Edit; Je pense qu'a la base c'est déja mal écrit.

En gros, J'ai i qui correspond i à une target.row, je veut tester les 100 ligne précédente et les 100 suivantes. mais pas la target.row d'originie.

Bonsoir

Quel est le code ?

Celui d'originie :

    Private Sub Worksheet_Change(ByVal Target As Range)
' Couleur texte rouge ou noir selon réception dossier
  Dim couleur1 As String
      If Not Intersect(Range("a2:a9999"), Target) Is Nothing And Target.Count = 1 Then

        If Target <> "" Then
            Range("A" & Target.Row & ":I" & Target.Row).Font.ColorIndex = 1
' Range("J" & Target.Row & "") = Range("A" & Target.Row & "").Value
        Else
            Range("A" & Target.Row & ":I" & Target.Row).Font.ColorIndex = 3
            Range("J" & Target.Row & "") = ""

        End If
      End If

Ma Modif

    Private Sub Worksheet_Change(ByVal Target As Range)
 ' Couleur texte rouge ou noir selon réception dossier
  Dim couleur1 As String
      If Not Intersect(Range("a2:a9999"), Target) Is Nothing And Target.Count = 1 Then

        If Target <> "" Then
            Range("A" & Target.Row & ":I" & Target.Row).Font.ColorIndex = 1
            ChercheAutreBesion = Range("C" & Target.Row).Value
            DateSurAutreBesion = Range("A" & Target.Row).Value

                For i = Target.Row + 1 To 1000

                If Cells(i, 3).Value = ChercheAutreBesion Then
                Range("A" & i).Value = DateSurAutreBesion
                Range("A" & i & ":I" & i).Font.ColorIndex = 1
                End If
                Next

' Range("J" & Target.Row & "") = Range("A" & Target.Row & "").Value
        Else
            Range("A" & Target.Row & ":I" & Target.Row).Font.ColorIndex = 3
            Range("J" & Target.Row & "") = ""

        End If
      End If

C'est quand je passe de

 For i = Target.Row + 1 To 1000

à

 For i = Target.Row -100 To 1000

Que cela déconne.

J'ai épuré vite faite fait, je ne sais pas si cela aidera.

En gros je veux que quand i arrive à i=Target.Row ca passe direct à i=Target.Row+1 ou plutot, ne passe jamais par "i=Target.Row" mais direct de i=Target.Row-1 à +1)

Ce n'est plus symétrique, c'est -100 et +1000...

Le plus simple est de faire 2 boucles : de -100 à -1 et de 1 à 1000.

C'est plus rapide que de tester si i=0 à chaque tour...

NB- J'espère que tu as remarqué que Range("A" & Target.Row) ne peut être que Target.

Cordialement.

Bien vu, je n'ai pas penser a faire 2 boucles !

Merci bien !

Cette solution règle clairement mon soucis !, je n'ai pas testé mais c'est si logique que cela ne peux que fonctionner.

Mais pour ma culture, n'y a t-il pas des solutions pour exclure des valeurs a tester dans une boucle ? Car si un jour j'avais plusieurs valeur a ne pas tester dans une boucle, je devrai avec ta méthode multiplier les boucles ! ( c'est juste pour ma culture....je doute d'avoir un tel cas à l'avenir )

Je marque comme résolu en tout cas, je me trouve con de pas y avoir pensé plutôt ^^ c'est si logique...

Merci encore !

Cdt

Circus

Oui, en testant la valeur de i à chaque tour... Sur une petite boucle ce n'est pas sensible du tout.

Sinon quand tu as une symétrie, par exemple :

For i = 1 To 100

Range("A" & Target.Row + i) =...

Range("A" & Target.Row - i) =...

Next i

Ou pour couvrir les lignes 10 à 20 et 30 à 40 :

For i = 10 To 20

Cells(i, 1).Value =...

Cells(i + 20, 1).Value =...

Next i

Tu cherches le plus économique pour l'écriture, et aussi éventuellement pour VBA si la boucle est longue.

Cordialement.

Bonsoir,

MFerrand bonsoir @ vous,

une idée, un tableau avec les valeurs à tester, avec une boucle qui boucle les valeurs du tableau...

La mise en place du tableau est peut-être fastidieux mais suivant l'architecture des valeurs cela peut devenir plus simple, non ?

@ bientôt

LouReeD

Bonjour à tous,

il ne faut pas non plus que t'adresses à une ligne qui n'existe pas :

For i = application.max(2, Target.Row -100) To 1000
    if i <> target.row then
       ' ton code
    endif
next i

eric

corrigé le ; en ,

Merci MFerrand

Salut Lou Reed !

En effet, tu as tout à fait raison, ça c'est un système que je pratique notamment sur des transfert de données saisies d'un côté et qui doivent alimenter un formulaire prédéfini de l'autre, où les cellules à servir sont dispersées. Un tableau ligne + éventuellement un tableau colonne :

Lgn = Array (3, 8, 11, 18)

Col = Array (2, 5, 5, 3)

For i = 0 To 3

Cells(Lgn(i), Col(i)).Value = [Plage].Cells(i + 1, 1).Value

[Là on s'est arrangé pour avoir une plage nommée comme source... ]

Attaché, Maréchal, attaché le LouReeD

Je ne suis pas le feu chanteur et en plus je suis loin de l'être!

Bonsoir eriiic,

Application.Max !? décidément j'en ai encore à apprendre !

@ bientôt

LouReeD

Hello ! Ne débarque pas ! C'est la fonction de feuille de calcul MAX !

Mais il ne l'a pas tapée dans un module, VBA aurait réagi...

Mais c'est bien vu et je note l'idée pour ce test où j'aurais bêtement testé de façon plus traditionnelle.

Bonne soirée à tous.

Mais ouiiii ! suis bête ? c'est comme le Application.Find ou autre chose, on demande à VBA d'utiliser la fonction Max de l'application Excel !!!

Je ne débarque pas...

@ bientôt

LouReeD

Excellement,

Merci MFerrand !

J'ai appliqué ta première proposition qui marche nikel.

J'apprécie beaucoup tes secondes, cela me donnera des idées pour mes prochains cas !

Merci encore et d'ailleurs je viens de penser a autre chose de possible mais pour ce soir cela me semble compliqué d'arriver a faire quelque chose.

Cdt

Pour info, il s'agit d'un planning de délais, avec 2 cas.

Cas 1 : dossier a rendre complet en 1 morceau

Cas 2 : dossier a rendre en plusieurs morceaux et au finale complet

A la base je remplis un planning avec une date pour un besoin complet ou plusieurs dates (lignes) pour le besoin du dossier. ( ligne(s) rouge temps que je n'ai pas dossier commercial carré ( lol ) )

Mon soucis étais sur le cas 2, si j'avais plusieurs ligne de délai ( achat, fournisseur,...complet) je devait indiqué sur chacune que j'avais enfin reçu le dossier.

Désormais je remplis une des lignes de besoins je les remplis toutes les autres comme dossier reçu.

Merci encore MFerrand.

LouReeD , eriiic , MFerrand , vous avez fini par me perdre mais ça donne des idées !

Il est tard vous avez fini par me perdre.

Encore merci et merci à la communauté.

Curcis

Ah, ça c'est vu que j'ai tapé en direct ?

Post corrigé, merci

Circus, je te disais que ton code ne peut fonctionner qu'à partir de la ligne 101. Peut-être que c'est prévu pour.

Sinon sur la ligne 10 par exemple ça va planter. La ligne 10-100 (-90) n'existe pas.

Il faut traiter ces cas en démarrant ta boucle à la ligne 2 par exemple : for i = max(2, target.row -100) to ...

eric

Rechercher des sujets similaires à "boucle 100 next depart"