Problème boucle VBA EXCEL
CACHEUX
-
Utilisateur anonyme -
Utilisateur anonyme -
PROBLEME BOUCLE SOUS VBA EXCEL
Bonjour à tous,
je suis confronté depuis des mois à un problème qui vous semblera certainement simple mais que je ne parviens pas à solutionner :
J'ai un tableau de gestion de stocks contenant 2 feuilles :
1 feuille BASE
1 Feuille MVTSSTOCKS
Sur la feuille BASE
La cellules B6 = code produit
C6=fournisseur
D6 = code fournisseur
E6 = famille produit
F6 = code famille
G6= libellé
J6 = stock dispo
K6 = le stock valorisé
Un bouton de commande sur cette feuille BASE me permet d'activer un Userform qui me permet de remplir cette base produits avec les infos mentionnées ci dessus.
Jusque là aucun problème.
La deuxième feuille MVTS DE STOCKS doit par le biai d'un second Userform me permettre d'enregistrer les entrées et les sorties de marchandises mais EGALEMENT DE METTRE LE STOCK DISPO ET LA VALEUR DE STOCK A JOUR DANS LA FEUILLE BASE.
NB : les cellules B6 : G6 DES DEUX FEUILLES CONTIENNENT LES MEMES INFOS.
Mon problème est le suivant :
J'ai commencé à remplir ma feuille BASE avec trois nouveaux articles;
Lorsque je veux faire une entrée à partir du second Userform et que je tape le code produit dans le textBox de cet userform, je dois avoir sur les lignes a coté C6 : G6 le fournisseur, le code fournisseur, la famille produit et le code famille : cela ne marche que sur la première ligne
Voilà ce que j'ai écrit et qui n'est pas bon ( boucle mal écrite ou inadéquate) :
With UserForm2
Range("B65536").End(xlUp).Offset(1, 0) = TextBox1.Value
Range("I65536").End(xlUp).Offset(1, 0) = TextBox2.Value
Range("J65536").End(xlUp).Offset(1, 0) = TextBox3.Value
Range("K65536").End(xlUp).Offset(1, 0) = SpinButton1.Value
End With
Dim i As Long
For i = 7 To 100
If Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("MVTSSTOCKS").Range("B" & i).Value Then
Sheets("MVTSSTOCKS").Range("B" & i).Value = Sheets("BASE").Range("B" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("C7").Value = Sheets("MVTSSTOCKS").Range("C" & i).Value Then
Sheets("MVTSSTOCKS").Range("C" & i).Value = Sheets("BASE").Range("C" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("D7").Value = Sheets("MVTSSTOCKS").Range("D" & i).Value Then
Sheets("MVTSSTOCKS").Range("D" & i).Value = Sheets("BASE").Range("D" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("E7").Value = Sheets("MVTSSTOCKS").Range("E" & i).Value Then
Sheets("MVTSSTOCKS").Range("E" & i).Value = Sheets("BASE").Range("E" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("F7").Value = Sheets("MVTSSTOCKS").Range("F" & i).Value Then
Sheets("MVTSSTOCKS").Range("F" & i).Value = Sheets("BASE").Range("F" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("G7").Value = Sheets("MVTSSTOCKS").Range("G" & i).Value Then
Sheets("MVTSSTOCKS").Range("G" & i).Value = Sheets("BASE").Range("G" & i).Value
End If
Next i
With Sheets("BASE")
For i = 7 To 100
If CheckBox1.Value = True Then
Worksheets("BASE").Range("J" & i).Value = Worksheets("BASE").Range("J" & i).Value + UserForm2.SpinButton1.Value
Worksheets("BASE").Range("K" & i).Value = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value
End If
If CheckBox2.Value = "SORTIE" Then
Worksheets("BASE").Range("J" & i) = Worksheets("BASE").Range("J & i").Value - UserForm2.SpinButton1.Value
Worksheets("BASE").Range("K" & i) = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value
End If
Next i
End With
Unload Me
End Sub
Le décompte des quantités se fait mais je n'arrive pas à faire dire à ce programme que si le code produit de la feuille MVTS DE STOCKS est égal au code produit de la feuille BASE Alors les colonnes suivantes de la feuille MVTS DE STOCKS doivent contenir les memes infos que celles de la feuille BASE.
Vous remerciant d'avance de me consacrer un peu de votre temps,
Cordialement
Emmanuel
Bonjour à tous,
je suis confronté depuis des mois à un problème qui vous semblera certainement simple mais que je ne parviens pas à solutionner :
J'ai un tableau de gestion de stocks contenant 2 feuilles :
1 feuille BASE
1 Feuille MVTSSTOCKS
Sur la feuille BASE
La cellules B6 = code produit
C6=fournisseur
D6 = code fournisseur
E6 = famille produit
F6 = code famille
G6= libellé
J6 = stock dispo
K6 = le stock valorisé
Un bouton de commande sur cette feuille BASE me permet d'activer un Userform qui me permet de remplir cette base produits avec les infos mentionnées ci dessus.
Jusque là aucun problème.
La deuxième feuille MVTS DE STOCKS doit par le biai d'un second Userform me permettre d'enregistrer les entrées et les sorties de marchandises mais EGALEMENT DE METTRE LE STOCK DISPO ET LA VALEUR DE STOCK A JOUR DANS LA FEUILLE BASE.
NB : les cellules B6 : G6 DES DEUX FEUILLES CONTIENNENT LES MEMES INFOS.
Mon problème est le suivant :
J'ai commencé à remplir ma feuille BASE avec trois nouveaux articles;
Lorsque je veux faire une entrée à partir du second Userform et que je tape le code produit dans le textBox de cet userform, je dois avoir sur les lignes a coté C6 : G6 le fournisseur, le code fournisseur, la famille produit et le code famille : cela ne marche que sur la première ligne
Voilà ce que j'ai écrit et qui n'est pas bon ( boucle mal écrite ou inadéquate) :
With UserForm2
Range("B65536").End(xlUp).Offset(1, 0) = TextBox1.Value
Range("I65536").End(xlUp).Offset(1, 0) = TextBox2.Value
Range("J65536").End(xlUp).Offset(1, 0) = TextBox3.Value
Range("K65536").End(xlUp).Offset(1, 0) = SpinButton1.Value
End With
Dim i As Long
For i = 7 To 100
If Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("MVTSSTOCKS").Range("B" & i).Value Then
Sheets("MVTSSTOCKS").Range("B" & i).Value = Sheets("BASE").Range("B" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("C7").Value = Sheets("MVTSSTOCKS").Range("C" & i).Value Then
Sheets("MVTSSTOCKS").Range("C" & i).Value = Sheets("BASE").Range("C" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("D7").Value = Sheets("MVTSSTOCKS").Range("D" & i).Value Then
Sheets("MVTSSTOCKS").Range("D" & i).Value = Sheets("BASE").Range("D" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("E7").Value = Sheets("MVTSSTOCKS").Range("E" & i).Value Then
Sheets("MVTSSTOCKS").Range("E" & i).Value = Sheets("BASE").Range("E" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("F7").Value = Sheets("MVTSSTOCKS").Range("F" & i).Value Then
Sheets("MVTSSTOCKS").Range("F" & i).Value = Sheets("BASE").Range("F" & i).Value
End If
If Sheets("MVTSSTOCKS").Range("G7").Value = Sheets("MVTSSTOCKS").Range("G" & i).Value Then
Sheets("MVTSSTOCKS").Range("G" & i).Value = Sheets("BASE").Range("G" & i).Value
End If
Next i
With Sheets("BASE")
For i = 7 To 100
If CheckBox1.Value = True Then
Worksheets("BASE").Range("J" & i).Value = Worksheets("BASE").Range("J" & i).Value + UserForm2.SpinButton1.Value
Worksheets("BASE").Range("K" & i).Value = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value
End If
If CheckBox2.Value = "SORTIE" Then
Worksheets("BASE").Range("J" & i) = Worksheets("BASE").Range("J & i").Value - UserForm2.SpinButton1.Value
Worksheets("BASE").Range("K" & i) = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value
End If
Next i
End With
Unload Me
End Sub
Le décompte des quantités se fait mais je n'arrive pas à faire dire à ce programme que si le code produit de la feuille MVTS DE STOCKS est égal au code produit de la feuille BASE Alors les colonnes suivantes de la feuille MVTS DE STOCKS doivent contenir les memes infos que celles de la feuille BASE.
Vous remerciant d'avance de me consacrer un peu de votre temps,
Cordialement
Emmanuel
A voir également:
- Problème boucle VBA EXCEL
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
Bonjour,
j'ai supprimé quelques lignes pour la compréhension :
la ligne :
If (Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("MVTSSTOCKS").Range("B7").Value) Then
me semble en erreur et devrait être :
If (Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("BASE").Range("B7").Value) Then
Lupin
j'ai supprimé quelques lignes pour la compréhension :
Private Sub cmd_Execute_Click() Dim i As Long Application.ScreenUpdating = False Sheets("BASE").Range("B65536").End(xlUp).Offset(1, 0) = UserForm2.TextBox1.Value For i = 7 To 100 If (Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("BASE").Range("B7").Value) Then Sheets("MVTSSTOCKS").Range("B" & i).Value = Sheets("BASE").Range("B" & i).Value End If Next i With Sheets("BASE") For i = 7 To 100 If CheckBox1.Value = True Then Worksheets("BASE").Range("J" & i).Value = Worksheets("BASE").Range("J" & i).Value + UserForm2.SpinButton1.Value Worksheets("BASE").Range("K" & i).Value = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value End If If CheckBox2.Value = "SORTIE" Then Worksheets("BASE").Range("J" & i) = Worksheets("BASE").Range("J & i").Value - UserForm2.SpinButton1.Value Worksheets("BASE").Range("K" & i) = Worksheets("BASE").Range("I" & i).Value * Worksheets("BASE").Range("J" & i).Value End If Next i End With Application.ScreenUpdating = True End Sub '
la ligne :
If (Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("MVTSSTOCKS").Range("B7").Value) Then
me semble en erreur et devrait être :
If (Sheets("MVTSSTOCKS").Range("B7").Value = Sheets("BASE").Range("B7").Value) Then
Lupin