Boucles imbriquées petit bug

  • Initiateur de la discussion Initiateur de la discussion ChaG
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 ... 🙄
Pourrais-tu expliquer un des calculs de la colonne G?

@ +

mth
 
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?
 
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:
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 !!!
 
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... 😛

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
180
Réponses
8
Affichages
471
Réponses
3
Affichages
194
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
481
Réponses
7
Affichages
164
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
173
Réponses
2
Affichages
154
Retour