Boucles imbriquées petit bug

ChaG

XLDnaute Nouveau
Bonjour à tous !
Je suis nouvellement inscrite sur ce forum, mais j'ai l'habitude de venir y piocher conseils et astuces. :) D'ailleurs j'en profite pour dire merci pour l'aide !

Voilà, d'habitude je m'en sors, mais là je ne comprends pas. J'ai besoin de vos intuitions.


La partie que j'ai réussi à faire :

J'ai un devis avec des libellés à 4 niveaux (niveau 1 : 1; 2; 3, niveau 2: 1.1; 1.2; 2.1 etc), + une colonne quantité, + une colonne total, + une colonne résultat (cf pj)
. Le principe de la macro en pièce-jointe est le suivant : la macro remonte la colonne 4 jusqu'à ce qu'elle trouve une case non vide (cad un objet de niveau 4). Dans ce cas la macro remonte la colonne 3 à partir de là où elle a trouvé le niveau 4,jusqu'à trouver un niveau 3. Une fois celui-ci trouvée elle enregistre la quantité correspondant à cette ligne.
Elle suit le même processus pour les niveaux 2 et 1 (dans les colonnes 2 et 1).
Quand les valeurs quantités sont trouvées pour les 3 niveaux, la macro les multiplie au total de la ligne du niveau 4 enregistrée précedemment.
La boucle continue jusqu'à arriver au bout.


Là où ça ne marche pas :

Ma macro tourne et marche bien, mais à la fin la macro s'arrête avec une "erreur d'execution '1004'; Erreur définie par l'application ou par l'objet".
Et met en jaune la ligne
Loop Until ((Cells(ligne, 4) = "") And (Cells(ligne, 3) <> ""))

J'ai essayé plusieurs pistes, notamment en mettant à la fin de la ligne un " Or Ligne = 10" pour sortir de la boucle quand ça finit ... Ca ne marche pas plus... Donc j'aimerais bien que ma macro qui marche, sorte "normalement" et non pas par un message d'erreur.

Une idée?

En pj je mets le fichier excel et ci-dessous la copie du corps de ma macro. Merci d'avance !

Sub test()
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim i As Integer
Dim k As Integer
Dim h As Integer
Dim m As Integer
Dim a As Integer
Dim j As Integer
Dim Compteur As Integer
Dim KAM As Integer
Dim n As Integer

Dim ligne As Integer



j = 50

KAM = 50




Do


KAM = KAM - 1





Do
j = j - 1
Loop Until (Cells(j, 4) <> "")
a = j


ligne = a
Do
ligne = ligne - 1
Loop Until ((Cells(ligne, 4) = "") And (Cells(ligne, 3) <> ""))
i = Cells(ligne, 5)
c = ligne


b = c
Do
b = b - 1
Loop Until (Cells(b, 4) = "") And (Cells(b, 3) = "") And (Cells(b, 2) <> "")
k = Cells(b, 5)
d = b

c = d
Do
c = c - 1
Loop Until (Cells(c, 4) = "") And (Cells(c, 3) = "") And (Cells(c, 2) = "") And (Cells(c, 1) <> "")
h = Cells(c, 5)




Cells(j, 7) = Cells(j, 6) * i * k * h


Loop While KAM > 25
End Sub
 

Pièces jointes

  • Macromarchepas.xls
    40 KB · Affichages: 46

mth

XLDnaute Barbatruc
Re : Boucles imbriquées petit bug

Bonjour,

Je ne sais pas si je pourrai t'aider, mais rien qu'à la mimine je n'arrive pas à reconstituer les chiffres qui s'affichent dans ta dernière colonne, pas compris ... :rolleyes:
Pourrais-tu expliquer un des calculs de la colonne G?

@ +

mth
 

ChaG

XLDnaute Nouveau
Re : Boucles imbriquées petit bug

Je vais essayer d'être plus explicite en te développant un calcul.

77520 = 19*17*16*15
G26 = F26*E25*E24*E23
Nouvelle valeur du niveau 4 = Ancienne valeur du niveau 4 (Total) * Quantité qui correspond au niveau 3 immédiatement supérieur * Quantité qui correspond au niveau 2 immédiatement supérieur* Quantité qui correspond au niveau 1 immédiatement supérieur

Je prends un autre exemple :

G17 = F17*E16* E14* E9
En effet on a par exemple E9 car la macro est remontée jusqu'à trouver un cas de niveau 1.

Est-ce un peu plus clair ?
En fait on peut prendre le problème à l'envers: les quantités de niveau 1 dégringolent et impactent les totaux des niveaux inférieurs...
Mais comme la méthode à laquelle je pensais dans ce sens me paraissait longue et lourde, celle-ci, "à rebours", m'a paru plus légère...

Puis-je t'apporter d'autres explications?
 

mth

XLDnaute Barbatruc
Re : Boucles imbriquées petit bug

re :)

Je suis un peu confuse ChaG, tu n'as pas de chance avec moi et je dois être un peu bouchée car malgré tes explications je ne comprends pas la logique une fois que je mets de simples formules dans ton fichier.

Juste pour ta macro, tu as:
ligne = ligne - 1
or si a = 1 ligne = 0 ce qui plante
Je te proposerais bien d'ajouter un
If ligne=0 then ligne=1 pour éviter ça, mais même pas sûre vu que je n'ai rien compris ...

Désolée ChaG, je passe la main, et je continue à suivre le fil car tu auras sans aucun doute des propositions de forumers plus réveillés que moi ...!

Bien à toi,

mth

Edit: :) :) bises pierrejean :) :)
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Boucles imbriquées petit bug

Bonjour Chag
Bises à Mireille

Pas beaucoup mieux compris , mais pour eviter l'erreur:

Code:
....
Do
    ligne = ligne - 1
       If ligne = 0 Then Exit Sub
   Loop Until ((Cells(ligne, 4) = "") And (Cells(ligne, 3) <> ""))
.....

PS: Je n'ai aucun souvenir d'avoir utilisé une boucle Do Loop !!!
 

ChaG

XLDnaute Nouveau
Re : Boucles imbriquées petit bug

Merci Mth d'avoir essayé de comprendre ! Il faut dire que je ne commence pas par un sujet simple... :p

PierreJean ça marche ! En fait j'avais essayé de faire un If ligne <1 Then Exit Do, ce qui ne marchait pas, mais la condition était plus simple. Merci pour le tips !

Au plaisir de vous revoir sur le forum,

Cha
 

Discussions similaires

Statistiques des forums

Discussions
312 775
Messages
2 092 010
Membres
105 148
dernier inscrit
gegre