Problème de boucles pour rassembler des données aléatoires

Thegorgibus

XLDnaute Nouveau
Bonjour,

je n'arrive pas à construire une macro car je ne sais pas dans quel ordre aborder mes différentes boucles permettant de rassembler des données aléatoires (j'y ai passé la journée).

Le fichier joint permettra de mieux comprendre. Je vais parler de robe et de pantalon pour simplifier la compréhension.

L'idée est qu'une machine fabrique soit des robes, des pantalons ou tout autre object (donc je ne connais pas l'ensemble des produits fabriqués à l'avance, ma macro doit donc aussi prendre en compte ce caractère aléatoire). Cette machine tombe en panne (4 types de pannes) de façon aléatoire. Je ne peux donc pas savoir à l'avance le nombre d'arrêts de la machine. L'idée est de simplifier le fichier d'enregistrement des pannes pour avoir une synthèse où le type de panne est en colonne et pour les lignes le pantalon ou la robe.

J'ai fait une première macro qui marche mais qui devient très très longue à tourner quand j'ai 5000 pannes dans la journée, car dans ma macro je somme ligne après ligne toutes mes pannes puis je supprime les lignes déjà incluses dans la somme. Je souhaiterai, pour la robe et pour le pantalon, ne faire cette somme qu'une seule fois pour éviter de le faire à chaque boucle.

Ma macro :

'------FAIT LA SOMME LIGNE A LIGNE--------------

nbligne = Range("A65336").End(xlUp).Row
nbtypepanne = 4
For U = 2 To nbligne
If Cells(nbligne + 2 - U, 2).Value = Cells(nbligne + 1 - U, 2).Value Then
For v = 3 To 3 + nbtypepanne - 1
Cells(nbligne + 1 - U, v).Value = Cells(nbligne + 2 - U, v).Value + Cells(nbligne + 1 - U, v).Value
Next
Cells(nbligne + 2 - U, 1).Value = "x"
End If
Next
'---------------SUPPRIME LES LIGNES DEVENUES INUTILES-----------------------
W = 1
While Cells(W, 1).Value <> "x"
W = W + 1
Wend
Rows(W & ":" & nbligne).Delete

Quelqu'un peut-il m'aider à simplifier ces boucles ? Je veux faire des boucles car le nombre des différents articles est aléatoire (c'est pour ca que dans ma macro je compare ligne à ligne si robe=pantalon), le nombre de pannes est aléatoire (c'est pour ça que je fais une boucle jusqu'à ce que toutes les pannes aient été prises en compte). Le nombre de type de panne reste quand à lui fixe (ici 4).

J'espère avoir été clair.... cela démontre la clareté dans ma tête !
 

Pièces jointes

  • Problème machine.xlsx
    12.4 KB · Affichages: 44
Dernière édition:

mécano41

XLDnaute Accro
Re : Problème de boucles pour rassembler des données aléatoires

Bonjour,

Sans VBA. Si en C19 tu écris :

Code:
=SOMME.SI($B$2:$B$7;$B19;C$2:C$7)

puis que tu étires la formule de 1 ligne vers le bas puis de 3 colonnes vers la droite tu obtiens ton résultat dans ton tableau...si j'ai bien compris...

Cordialement
 

Thegorgibus

XLDnaute Nouveau
Re : Problème de boucles pour rassembler des données aléatoires

Merci mécano 41, je pense pouvoir m'en tirer avec ta formule !!

En essayant d'utiliser ta formule en VBA, excel me remonte une erreur de syntaxe, sais-tu me dire pourquoi ?


Range("C" & 19).Select
ActiveCell.FormulaR1C1 = "=SUMIF("$B$" & 2 & ":$B$" & 7,"$B" & 19,"C$" & 2 & ":C$" & 7)"


( au lieu de =SOMME.SI($B$2:$B$7;$B19;C$2:C$7)).

J'ai bien décomposé les lettres et les chiffres, car dans ma macro, j'ai des variables plutôt que des chiffres. Je ne suis pas sur de la syntaxe des $ non plus....

Merci encore pour ton aide !
 

mécano41

XLDnaute Accro
Re : Problème de boucles pour rassembler des données aléatoires

Bonjour,

Essaie avec ceci :

Code:
Sub essai1()
Range("C" & 19).Formula = "=SUMIF($B$" & 2 & ":$B$" & 7 & ",$B" & 19 & ",C$" & 2 & ":C$" & 7 & ")"
Range("C19").AutoFill Destination:=Range("C19:C20"), Type:=xlFillDefault
Range("C19:C20").AutoFill Destination:=Range("C19:F20"), Type:=xlFillDefault
End Sub

Evidemment les plages d'extension doivent être paramétrées pour s'adapter au nombre de lignes...

Si tu n'a pas à modifier les 2, 7 et 19, la formule peut être :

Code:
Range("C" & 19).Formula = "=SUMIF($B$2 :$B$7,$B19 ,C$2 :C$7 )"

Cordialement
 

Thegorgibus

XLDnaute Nouveau
Re : Problème de boucles pour rassembler des données aléatoires

Merci pour ta réponse, elle m'a été d'une grande aide... J'ai fais de belles boucles dans ma macro en utilisant ton SUMIF.

Par contre j'ai un problème car ma macro n'analyse pas mes dernières données de boucles. J'ai fais une copie d'écran pour mieux expliquer :

Comme tu peux le lire sur ma macro, je fais une boucle pour U allant de 2 à nblignetemp + Y (Y est un compteur qui s’incrémente car j’insère des lignes dans ma macro).

Or comme tu peux le voir avec l’espion, en fin de boucle, j’ai U = 56, nblignetemp=55 (c'est le nombre de lignes de mon classeur) et nblignetemp+Y = 60, donc ma macro devrait continuer de faire la boucle ! Or cette dernière s’arrête car j’ai l’impression que le FOR ne lit que le « nblignetemp » et fait abstraction du Y !!! Donc je perds à chaque fois les dernières données ! Sais-tu pourquoi ? J’ai regardé la boucle d’avant le U=56 en me disant que peut-être il gardait en mémoire l’ancien « nblignetemp+Y » et que donc il arrêtait la boucle, mais il n’en n’est rien !

Merci encore ! Après ça, ma macro tournera impeccablement !
 

Pièces jointes

  • macro.jpg
    macro.jpg
    55.2 KB · Affichages: 56
  • macro.jpg
    macro.jpg
    55.2 KB · Affichages: 57
  • macro.jpg
    macro.jpg
    55.2 KB · Affichages: 60

Discussions similaires

Réponses
0
Affichages
154

Statistiques des forums

Discussions
312 273
Messages
2 086 699
Membres
103 372
dernier inscrit
BibiCh