Boucle For Each avec incrémentation

Bonjour,

Je suis nouveau sur le forum, j’espère donc l’utiliser correctement.

J’ai déjà fait quelques code VBA excel pour m’aider dans mon travail, mais là je suis bloqué par quelque chose qui ne me semble pas très compliqué, mais quand on a la tête dans le guidon des fois ne vois pas l’évident.

Je suis en train de monter un code VBA pour trouver la valeur la plus proche. J’ai donc créé la petite matrice suivante.

Dim h as variant

h = 9

Do

Set rng = Range("C9:C15")

For Each item In rng 'besoin de reinitialiser cette variable en debut de boucle h + 1

'For Each it In plage

diff = Abs(item - Range("B" & h))

If diff < minDiff Then

minDiff = diff

Range("Q" & h) = item

End If

'it = it + 1

'Next it

'Beep

Next item

h = h + 1

DoEvents

Loop Until h = 15

Elle marche bien pour un h donné constant. Mais lorsque je veux faire une boucle avec un h (h+1) variable cela ne fonctionne pas.

Je pense avoir besoin de réinitialiser rng à chaque boucle h +1, mais je n’y arrive pas.

En clair (j’espère) je cherche la valeur la plus proche de(s) valeur(s) de la colonne B par rapport aux valeurs de la colonne C.

En espérant avoir été assez clair

Cordialement

GEMx

bonjour

une proposition,

Sub aargh()
    Dim h As Long, hmin As Long, diff As Double, mindiff As Double, Rng As Range, Item As Range

    Set Rng = Range("C9:C15")

    For Each Item In Rng 'pour chaque item en colonne C
        mindiff = 1000000000#
        For h = 9 To 15 'recherche de la valeur la plus proche en colonne B
            diff = Abs(Item - Range("B" & h))
            If diff < mindiff Then
                mindiff = diff 'meilleure valeur approchée trouvée
                hmin = h
            End If
        Next h
        Item.Offset(, 14) = Range("B" & hmin) 'mettre valeur approchée trouvée en colonne Q (colonne C+14)
    Next Item

End Sub

Bonjour h2so4

Super ta formule marche, cela me débloque.

Il y a deux ou trois petite choses que je n'avais pas pensé.

J'ai deux questions sur ta routine: quel est l'importance du # à la fin du mindiff ?

et j'avais déjà essayé deux boules for et for each en commençant par la boucle for et cela n'avais pas marché non plus. hors toi tu commence par la boucle for each, y a t'il un autre "traditionnel" ou c'est plutôt des tests que tu as fais et tu as vu que c’était mieux par la boucle for each en premier ?

Encore merci pour ta réponse

GEMx

bonjour,

le # est ajouté automatiquement par l'éditeur VBA dès lors que j'introduis un grand nombre (en fait j'ai tapé 1e9 pour 1 milliard, vbe l'a transformé en 1000000000#

pour les boucles je suis parti de l'hyptothèse que tu essayais de chercher en colonne B, le nombre dont la valeur est la plus proche pour chaque valeur en colonne C.

je prend donc chaque nombre en colonne C (1ère boucle) et je cherche en colonne B( 2ème boucle) la valeur la plus proche. Si j'inverse les boucles, la macro cherchera en colonne C la valeur la plus proche pour chaque valeur en colonne B.

Donc inverser les boucles, c'est correct au niveau de la syntaxe, mais dasn ce cas-ci, cela ne fait pas la même chose.

Merci pour toutes ces informations, je vais pouvoir continuer ma macro.

Je vais valider le sujet.

GEMx

Rechercher des sujets similaires à "boucle each incrementation"