Pbme code boucle For + Step
Encore un petit soucis de code....
Actuellement j'ai un code qui fonctionne à merveille et que je vous joint.
Je souhaiterais cependant afin de ne pas recourir à chaque fois au masquage de x colonnes pour pouvoir avoir les 3 colonnes qui m’intéressent côte à côte que le résultat de mes concaténations s'affichent 1 colonne sur 3... et non en colonne à suivre...
Le hic : dans mon code j'ai deux références :
1ère : (i,j-415)
2ème : (2,j-415)
donc si je fais :
For j= 434 To 581 Step 3
... logiquement j'ai que le résultat d'un calcul sur 3 qui se fait et s'affiche dans la colonne j+3
Pourriez- vous s'il vous plait m'aider à résoudre ce soucis ?
D'avance merci à ceux qui se pencheront sur ce soucis.
CODE ACTUEL :
var5 = 0
For j = 434 To 483
var1 = Application.Index(PD6, Application.Match(Cells(i, 12), Range("H2:H51"), 0), 2)
var2 = Application.Index(PD6, Application.Match(Cells(i, 13), Range("H2:H51"), 0), 2)
var3 = Application.Index(PD6, Application.Match(Cells(i, 14), Range("H2:H51"), 0), 2)
var4 = Application.Index(PD6, Application.Match(Cells(i, 15), Range("H2:H51"), 0), 2)
var5 = var5 + 1
var = Application.Sum(var1, var2, var3, var4, (Application.Index(PD6, Application.Match(var5, Range("H2:H51"), 0), 2)))
If (var) < 4 Or Cells(i, j - 415).Value = 1 Then
Cells(i, j).Value = 0
ElseIf Cells(2, j - 415).Value < Cells(i, 12).Value Then
Cells(i, j).Value = Cells(2, j - 415) & "" & "-" & "" & Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 12).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 13).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 13).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 14).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 14).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 15).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 15)
Else
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15) & "" & "-" & "" & Cells(2, j - 415)
End If
Next j
Bonjour Lilly
Avant toute chose ... une petite remarque ...
Si tu veux copier du code dans ton message, c'est plus simple d'utiliser les balises Code ( 5 ième Bouton ..) car cela permet la reprise pour tous les lecteurs ...
Merci pour le conseil mais mes fichiers sont sur un autre ordinateur qui n'est pas relié à internet...
voilà pourquoi je fais ainsi... copie coller depuis fichier word... et clé usb au passage...
désolée...
à l'avenir j'essayerai de faire autrement
Merci pour l'aide apportée...
Lilly
Je me suis mal exprimé ...
ci-dessous le rendu visuel ... avec les balises Code ...
Sub TestLilly()
Dim var1, var2, var3, var4, var5 As Integer
Dim i, j As Integer
Dim Var As Integer
Dim PD6 As Range
var5 = 0
For j = 434 To 483
var1 = Application.Index(PD6, Application.Match(Cells(i, 12), Range("H2:H51"), 0), 2)
var2 = Application.Index(PD6, Application.Match(Cells(i, 13), Range("H2:H51"), 0), 2)
var3 = Application.Index(PD6, Application.Match(Cells(i, 14), Range("H2:H51"), 0), 2)
var4 = Application.Index(PD6, Application.Match(Cells(i, 15), Range("H2:H51"), 0), 2)
var5 = var5 + 1
Var = Application.Sum(var1, var2, var3, var4, (Application.Index(PD6, Application.Match(var5, Range("H2:H51"), 0), 2)))
If (Var) < 4 Or Cells(i, j - 415).Value = 1 Then
Cells(i, j).Value = 0
ElseIf Cells(2, j - 415).Value < Cells(i, 12).Value Then
Cells(i, j).Value = Cells(2, j - 415) & "" & "-" & "" & Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 12).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 13).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 13).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 14).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 14).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 15).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 15)
Else
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15) & "" & "-" & "" & Cells(2, j - 415)
End If
Next j
End Sub
Cela étant ... très sincèrement ... avec un fichier à 600 colonnes ou plus ... pour ma compréhension "visuelle" des choses, il va de soi que si tu pouvais joindre ne serait-ce que 20 lignes ...mais avec les 600 colonnes ... cela faciliterait Grandement la tâche
lillysg a écrit :je vais essayer ...
Re,
C'est gentil ...
Bon dans le vrai fichier cela fonctionne...
dans le test non...
c'est ...
et en plus trop lourd
Du coup ...
Est-ce-que çà joue ... ou tu veux essayer de joindre ce fichier ... avec http://www.cjoint.com/ ???
bon je sais pas....
si ça convient
je peux pas faire mieux
Re,
Dans la mesure où tu expliques que sur un ordinateur .... ta macro fonctionne .... et que sur un autre ... elle ne fonctionne pas ...
Que veux-tu que je vérifie ...???
en fait actuellement les résultats des calculs s'affichent dans les colonnes 434 à 483
je souhaite que cela s'affiche dans les colonnes 434, 437, 440, 443, 446 etc...
mais quand je le fais avec :
j=434 to 581 step 3
alors dans ma colonne 434 j'ai le bon résultat de concaténation mais dans la colonne 437 j'ai le résultat pour la 4ème concaténation au lieu de la seconde... et ainsi de suite
donc si c'est possible j'aimerai dans la colonne 437 ma 2ème concaténation... et ainsi de suite
si c'est pas possible, ou trop compliqué alors, je vais me résoudre à faire comme pour d'autres fichiers en reportant les colonnes dont j'ai besoin sur une seconde feuille... ce qui m'enchante pas plus que cela... mais qui fonctionne sur d'autres fichiers...
donc te prends pas la tête si c'est trop compliqué...
Lilly
Merci pour tes explications complémemtaires ...
Dès que j'ai un moment pour creuser ta macro ... je te fais signe ...
Lilly,
Je ne comprends pas comment tu définis var ...
D'accord pour la première partie qui fait la somme de var1 à var4 ... mais ensuite ...???
Est-ce-que le dernier élément serait un var6 ...???
var6 = Application.Index(PD6, Application.Match(var5, Range("i2:i51"), 0), 1)
Merci de tes explications ...
var = Application.Sum(var1, var2, var3, var4, (Application.Index(PD6, Application.Match(var5, Range("H2:H51"), 0), 2)))
var est la résultante de l'addition des 5 quantités en stock des 5 articles....
Il n'y a pas de var 6....
si tu regarde la dernière partie de ce code.... c'est ma même structure que les var1, var2, var3,var4 mais elle concerne la var 5 qui elle augmente de 1 à chaque changement de colonne... (voir ligne de code précédent celle de var)....
(Application.Index(PD6, Application.Match(var5, Range("H2:H51"), 0), 2))
(Et c'est pour cela que ça fonctionne pas dans l'exemple joint.... la recherche des valeurs numérique simple n'existe pas dans la colonne H telle qu'envoyée....)
mais c'est pas là le souci... mais ici...
If (var) < 4 Or Cells(i, j - 415).Value = 1 Then
Cells(i, j).Value = 0
ElseIf Cells(2, j - 415).Value < Cells(i, 12).Value Then
Cells(i, j).Value = Cells(2, j - 415) & "" & "-" & "" & Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 12).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 13).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 13).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 14).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 14).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 15).Value Then
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 15)
Else
Cells(i, j).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15) & "" & "-" & "" & Cells(2, j - 415)
End If
Parce que les références aux "(j-)" sont fixes...
Et lorsque je fais un step bien entendu cela me donne sur la 2ème colonne rempli un résultat par rapport à (i, j-415) ou (2 , j-415) alors qu'en fait cela devrait afficher le résultat pour (i,j-417) ou (2,j-417)
Lilly
Comme tu me le demandes ... je n'ai recodé que la partie Boucle ... ( à tester à l'intérieur de ta macro...)
Sub BoucleLilly()
Dim i As Integer
Dim j As Integer
Dim c As Integer
Dim var As Integer
Dim DL As Integer
DL = Range("K" & Rows.Count).End(xlUp).Row
var = 5 ' à modifier '''''''''' mais indispensable au test '''''''''''''''''''''''''''
For i = 3 To DL
c = 0
For j = 434 To 483
If var < 4 Or Cells(i, j - 415).Value = 1 Then
Cells(i, j + (c * 2)).Value = 0
ElseIf Cells(2, j - 415).Value < Cells(i, 12).Value Then
Cells(i, j + (c * 2)).Value = Cells(2, j - 415) & "" & "-" & "" & Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 12).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 13).Value Then
Cells(i, j + (c * 2)).Value = Cells(i, 12) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 13).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 14).Value Then
Cells(i, j + (c * 2)).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15)
ElseIf Cells(i, 14).Value < Cells(2, j - 415).Value And Cells(2, j - 415).Value < Cells(i, 15).Value Then
Cells(i, j + (c * 2)).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(2, j - 415) & "" & "-" & "" & Cells(i, 15)
Else
Cells(i, j + (c * 2)).Value = Cells(i, 12) & "" & "-" & "" & Cells(i, 13) & "" & "-" & "" & Cells(i, 14) & "" & "-" & "" & Cells(i, 15) & "" & "-" & "" & Cells(2, j - 415)
End If
c = c + 1
Next j
Next i
End Sub
voilà qui va me simplifier la vie...
Alors encore...
Bon maintenant...
Belle journée à toi...
et encore
Bonjour,
Un Immense
Content que cela te facilite la tâche ...
ben depuis
à cause de mon code trop long...
je crois que je vais encore devoir faire un post... car depuis ce matin j'ai pas trouvé sur forum...
Pourtant il y en a...
Belle fin de journée à toi
Re,
On verra bien ... tu n'es pas du genre à te faciliter la vie ... cela dit ... j'espère que c'est ton dernier obstacle ...