Pb VBA boucle qui s'arrete.

Résolu/Fermé
totophe3883 - 16 nov. 2011 à 20:47
 totophe3883 - 19 nov. 2011 à 11:09
Bonjour à tous et à toutes,
je me permet de vous écrire car je suis en train de développer un fichier excel pour me permettre de "gérer" une petite entreprise et je bloque sur un problème au niveau de mon VBA.
j'ai crée une base de donnée avec tous mes produits. il y a d'indiqué les prix, la désignation, les références.... et surtout une colonne quantité à renseigner.
de l'autre côté, j'ai créé une seconde feuille au nom de devis_clients où je souhaite transférer tous les produits dont il y a une quantité pour y mettre en forme dans le devis.
J'ai créé un VBA dont voici le code, mais il y a un pb :

Sub transfert()
Dim lig As Long
Dim compt As Long

compt = 3

For lig = 3 To 94

If Range("E" & compt) > 0 Then
Sheets("DEVIS_Clients").Range("B" & compt + 21).Value = Range("A" & compt).Value
Sheets("DEVIS_Clients").Range("A" & compt + 21).Value = Range("E" & compt).Value
Sheets("DEVIS_Clients").Range("E" & compt + 21).Value = Range("D" & compt).Value
Sheets("DEVIS_Clients").Range("C" & compt + 21).Value = Range("B" & compt).Value
compt = compt + 1

End If

Next lig
End Sub



symptôme :
Lorsque je clique sur le bouton pour traiter le tableau, le transfert s'effectue bien sur le devis mais lorsque la quantité n'est pas indiquée, la boucle s'arrête et ce qu'il y a après n'est pas transféré.
Je me casse la tête dessus depuis deux jours et je commence à craquer !! lol .

à savoir que je souhaite que toutes les lignes se suivent sur le devis et qu'il n'y ait pas de saut de ligne.

là , je sèche.... .
Je vous remercie par avance.

chris




1 réponse

Bonjour,

essaie plutot comme ça:

Sub transfert()
Dim lig As Long
Dim compt As Long
compt = 3
For lig = 3 To 94
If Range("E" & lig) > 0 Then
Sheets("DEVIS_Clients").Range("B" & compt + 21).Value = Range("A" & lig).Value
Sheets("DEVIS_Clients").Range("A" & compt + 21).Value = Range("E" & lig).Value
Sheets("DEVIS_Clients").Range("E" & compt + 21).Value = Range("D" & lig).Value
Sheets("DEVIS_Clients").Range("C" & compt + 21).Value = Range("B" & lig).Value
compt = compt + 1
End If
Next lig
End Sub

bonne continuation...
0
totophe3883
16 nov. 2011 à 22:22
Je te remercie beaucoup !!!
je suis novice dans la prog et j'ai eu bo avoir cherché à droite à gauche mais là , CT la misère !!!
Merci pour ton aide !!

je te souhaite une très bonne continuation.

@+++
Chris
0
Très intéressant je recherche quelques chose de similaire, es-ce possible de détailler la formule?
0
totophe3883
19 nov. 2011 à 11:09
il s'agit de lire une liste de produits. si E >0 ( E est une colonne où on vient y mettre la quantité) donc , la macro voit qu'il y a une quantité dans E et il y a transfert vers une feuille (devis_client) pour le mettre en forme.
il s'agit d'une boucle "for next" , lig est une sorte de " compteur" où 3 étant la 1ère ligne à lire et 94 le nombre de fois qu'il doit le faire ( 94 - 3 = 91, c'est le nombre de produits que j'ai à lire )
"compt" est un autre compteur, qui lui servira à incrémenter la ligne du coté du "devis mis en forme" lorsque E sera validé par E>0.
J'espère avoir répondu à ta question.
0