Problème Find/FindNext et boucle

Bonsoir à tous,

C'est de nouveau moi pour un second problème..

Je recherche les valeurs de la case fournisseur (colonne D) de la feuille "Données" dans la feuille "Entrée", dans la colonne D également.

Si on trouve la valeur, et que sa ligne n'est pas jaune alors on additionne la valeur de la case "QUANTITE" de la cellule de la feuille "Données", et de la ligne trouvé.

Jusqu'ici ça fonctionne, on cherche donc si il existe d'autre valeur dans la feuille "Entrée" par rapport à la case "Données", on réitère le code pour toute la colonne D de la feuille "Données". Cela fonctionne également.

Les lignes sont jaunes et on ne les prends plus en compte. Si elle est n'est pas jaune c'est qu'elle n'existe pas dans la feuille "Données. Tout ça c'est ok, normal et fonctionnel.

Mon soucis : je vais dans la feuille "Données" (c'est là que mon code s'active), ça lance le code pour la première fois et ça fonctionne. Je retourne dans la feuille "Entrée" pour ajouter une ligne, et je repart dans la feuille "Données" sauf que là, il ne trouve rien ! Le code ne fonctionne pas, alors que pourtant il y a une bien la valeur "ABC" et qui n'est pas colorié en jaune. Il devrait donc faire l'addition, et surtout la colorier en jaune.

Pour l'exemple je vous ai fais un .gif ! J'espère que ça sera parlant.

Je mets également mon fichier en PJ.

Pour information, si je remets toutes les lignes de la feuille "Entrée" en blanc, et que je lance le code avec la nouvelle ligne (que j'avais ajouté avant de lancer la fonction..) ça fonctionne.

Cordialement

200214072045255836

12classeur1.xlsm (46.71 Ko)

Salut Fred (c'est une contrepèterie...), bonsoir le forum,

Ta première condition est que la ligne ne soit pas colorée de jaune donc il est normal que ça ne fonctionne que la première fois puisqu'àprès elles prennent la couleur jaune...

If c.EntireRow.Interior.ColorIndex <> 6 Then 'Si une valeur est trouvé <==== commentaire erroné

Salut ThauTheme, alors j'ai beau chercher le mot "contrepèterie" je n'ai pas compris

Pour en revenir au sujet, tu dit qu'il est normal que ça marche la première fois du fait que si la ligne n'est pas jaune on exécute la macro. Mais si je lance une seconde fois (lorsque je reviens sur la feuille "Données") alors ma nouvelle ligne (qui n'est pas en jauneà devrait être prise en compte non ?

Re,

je te propose le code ci-dessous qui utilise la formule SOMME.SI. Plus besoin de colorier en jaune...

Sub testerentree()
Dim OE As Worksheet
Dim OD As Worksheet

Set OE = Worksheets("Entrée")
Set OD = Worksheets("Données")
I = 2
Do While OD.Cells(I, 4) <> ""
    OD.Cells(I, 7).Value = Application.WorksheetFunction.SumIf(OE.Range("D:D"), OD.Cells(I, 4).Value, OE.Range("G:G"))
    I = I + 1
Loop
End Sub

L'intérêt de colorier en jaune, c'est de ne plus faire l'addition.

Je cherche à tester si la valeur existe, et si il est en jaune alors je continue la recherche avec la même valeur dans la colonne.

En revanche, si la valeur existe et que sa ligne n'est pas jaune alors je fais l'addition puis je continu à recherche cette même valeur dans la colonne D.

Ensuite je recherche une autre valeur de la feuille "Données", dans le même principe.

Cordialement

Re,

As-tu testé ma proposition ?!...

En effet j'ai testé, en relisant ton message je me suis dit "j'ai du raté quelque chose"..

Et ça marche bien, c'est sans aucun doute.

Le problème c'est que la ligne principale :

    OD.Cells(i, 7).Value = Application.WorksheetFunction.SumIf(OE.Range("D:D"), OD.Cells(i, 4).Value, OE.Range("G:G"))

Dépasse mes connaissances.. Autant pour moi cela dit, j'avais pas bien regarder le résultat !

Visuellement en revanche, je tiens a avoir cette ligne jaune. Pour montrer que la ligne a été prit en compte.

Ce qui me perturbe, c'est que je comprend pas comment on sais que la ligne a été prit en compte ?? J'ai peur qu'on la reprenne.. Et donc que ça fausse la résultat.

En tout cas désolé, j'ai été trop rapide dans mon analyse.

Merci à toi

EDIT : De ce que je comprend la ligne principal :

On recherche dans la feuille "Entrée", dans la colonne D, la valeur de la cellule "i" de la colonne D de la feuille "Données" et après .. ? Je sèche

On ne voit jamais d'addition, ou du moins mes connaissances ne me permettent pas de le voir..

Imaginons que j'aimerais faire une soustraction, comment ça fonctionnerais ? Pour comprendre

Re,

C'est tout simplement la formule SOMME.SI codée en VBA qui fonctionne selon la syntaxe suivante :

SOMME.SI (Plage des critères, Critère, plage des sommes).

Donc, pour chaque ligne de la boucle, ça vérifie dans la colonne D de Entrée, le critère de D de Données et ça n'additionne dans la colonne G de Entrée que les valeurs qui correspondent au critère (D de de Entrée dans la boucle).

C'est pour cela que je te disais que la couleur n'avait plus d'importance. Si la référence dans D de Données n'existe pas la SOMME.SI n'est pas calculée.

Re,

Ce qui est perturbant c'est qu'il n'additionne pas à chaque fois.

D'après ce que tu dit (je le crois, et je l'ai vu) :

On cherche dans la plage des critères = Feuille "Entrée", colonne "D" (FOURNISSEUR) ;

Le critère = Cells (i , 4) = Valeur de cellule "i" de la colonne "D" dans la feuille "Données"

Jusqu'ici, ok !

Enfin, on additionne la plage des critères, avec la plage des sommes (arrête moi si c'est faux)

Mais, pourquoi lorsque je relance la code (lorsque je retourne dans la feuille "Données" on n'additionne pas à nouveau, tous ces éléments ?!

Re,

Je crois que tu t'égares. C'est beaucoup plus simple que tu sembles le croire.

Première ligne de la boucle : le critère vaut ABC, la formule va faire la somme de toutes les valeurs de la colonne G qui ont ABC en colonne D

Seconde ligne de la boucle : le critère vaut DEF, la formule va faire la somme de toutes les valeurs de la colonne G qui ont DEF en colonne D

Etc. Ne cherche pas plus loin, c'est aussi simple que ça et, bien sûr que l'addition se fait à chaque fois !...

Cette formule n'existe pas pour la différence (soustraction) mais une soustraction n'est finalement qu'une addition avec des valeurs négatives.

Tu peux sélectionner le mot clé SumIf et appuyer sur la touche [F1] pour lire l'aide VBA ou, dans n'importe quelle cellule du tableau tu tapes =SOMME.SI( et là, tu cliques dans la barre de formule sur fx . La boîte de dialogue Arguments de la fonction s'ouvre et en bas à gauche il y a jun lien : Aide sur cette fontion...

Re,

Arf ! j'avias oublié... Pour la contrepèterie... Salut Fred = Phallus raide

Merci à toi ThauTheme, je vais relire ton message et faire des tests dans l'idée d'assimiler la fonction.

Merci d'avoir prit le temps de m'expliquer de A à Z, j'ai la volonté de comprendre ce que je fais et avoir tes explications c'est indéniable que ça va m'aider.

Merci à toi et à bientot

Rechercher des sujets similaires à "probleme find findnext boucle"