Userform, GROS PROBLEME en VBA sur Excel

Résolu/Fermé
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 - 19 oct. 2007 à 21:35
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 - 24 oct. 2007 à 15:19
Bonjour,

je travaille sur un Userform, il n'est pas terminé, en VBA sur Excel.
J'ai un probleme avec mon Userform pour trier de l'inventaire , il plante si je l'utilise pour 2 produits sans le fermer.
Je veux m'en servir pour trier de l'inventaire et ajuster les quantités il fait référence a Feuil1 qui contient l'inventaire.
nom du userform : userform1. il fait référence a 2 marcros que j'ai mise en bas dans le message. si vous pouvez m'aider ca serait grandement apprécié. merci. Vince.
code :


Private Sub ComboBoxDESC_Change()
CRITERE = ComboBoxDESC.Value
COLCR = 2
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire

For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL

BB = Application.Run("FILTRE", TABL1, CRITERE, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
ComboBoxGRADE.Clear
For I = 1 To L
If TABL1(I, 3) <> 0 Then
If TABL1(I, 3) <> TABL1((I - 1), 3) Then
ComboBoxGRADE.AddItem TABL1(I, 3)
End If
End If
Next
End Sub

Private Sub ComboBoxGRADE_Change()
CRITERE = ComboBoxGRADE.Value
COLCR = 3
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire

For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL

BB = Application.Run("FILTRE", TABL1, CRITERE, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
ComboBoxLONG.Clear
For I = 1 To L
If TABL1(I, 3) <> 0 Then
If TABL1(I, 4) <> TABL1((I - 1), 4) Then
ComboBoxLONG.AddItem TABL1(I, 4)
End If
End If
Next

End Sub

Private Sub ComboBoxLONG_Change()
Dim CRITEREL As Long
CRITEREL = 0
CRITEREL = ComboBoxLONG.Value

COLCR = 4
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire

For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL

BB = Application.Run("FILTRE", TABL1, CRITEREL, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
'ComboBoxLONG.Clear
'For I = 1 To L
' If TABL1(I, 3) <> 0 Then
' If TABL1(I, 4) <> TABL1((I - 1), 4) Then
' ComboBoxLONG.AddItem TABL1(I, 4)
' End If
' End If
'Next
End Sub

Private Sub CommandButtonANNULER_Click()
Unload Me

End Sub

Private Sub CommandButtonENR_Click()

End Sub

Private Sub OptionButtonC_Click()
If OptionButtonQUINC = True Then
OptionButtonC.Value = False
Else
Dim CRITERE As Variant
CRITERE = "C"
COLCR = 6
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL

BB = Application.Run("FILTRE", TABL1, CRITERE, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
ComboBoxDESC.Clear
For I = 1 To L
If TABL1(I, 2) <> 0 Then
If TABL1(I, 2) <> TABL1((I - 1), 2) Then
ComboBoxDESC.AddItem TABL1(I, 2)
End If
End If
Next

End If

If 1 = 1 Then
Sheets("FEUIL2").Cells(1, 10) = ComboBoxLONG.Value

End If
End Sub

Private Sub OptionButtonHSS_Click()
If OptionButtonQUINC = True Then
OptionButtonHSS.Value = False
Else
CRITERE = "HSS"
End If
End Sub

Private Sub OptionButtonL_Click()
If OptionButtonQUINC = True Then
OptionButtonL.Value = False
Else
CRITERE = "L"
End If
End Sub

Private Sub OptionButtonFL_Click()
If OptionButtonQUINC = True Then
OptionButtonFL.Value = False
Else
CRITERE = "FL"
End If
End Sub


Private Sub OptionButtonACIER_Click()
ComboBoxDESC.Clear
ComboBoxGRADE.Clear
ComboBoxLONG.Clear


FrameForme.Visible = True

Dim CRITERE As Variant
CRITERE = "ACIER"
COLCR = 1
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire
AA = Application.Run("REMPLIR", TABL1)
'TRIER
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
BB = Application.Run("FILTRE", TABL1, CRITERE, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
ComboBoxDESC.Clear
For I = 1 To L
If TABL1(I, 3) <> 0 Then
If TABL1(I, 2) <> TABL1((I - 1), 2) Then
ComboBoxDESC.AddItem TABL1(I, 2)
End If
End If
Next
End Sub

Private Sub OptionButtonPL_Click()
If OptionButtonQUINC = True Then
OptionButtonPL.Value = False
Else
CRITERE = "PL"
End If
End Sub
Private Sub OptionButtonQUINC_Click()
OptionButtonC.Value = False
OptionButtonL.Value = False
OptionButtonFL.Value = False
OptionButtonPL.Value = False
FrameForme.Visible = False
ComboBoxDESC.Clear
ComboBoxGRADE.Clear
ComboBoxLONG.Clear

Dim CRITERE As Variant
CRITERE = "QUINC"
COLCR = 1
'Remplir le tableau
Dim L As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

L = 900 ' NB LIGNES DANS LE TABLEAU Inventaire
N = 6 ' NB COLONNES DANS LE TABLEAU Inventaire
AA = Application.Run("REMPLIR", TABL1)
'TRIER
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
BB = Application.Run("FILTRE", TABL1, CRITERE, COLCR)
For LL = 0 To L
For CC = 0 To N
TABL1(LL, CC) = Sheets("FEUIL2").Cells((LL + 1), (CC + 1))
Next CC
Next LL
ComboBoxDESC.Clear
For I = 1 To L
If TABL1(I, 2) <> 0 Then
If TABL1(I, 2) <> TABL1((I - 1), 2) Then
ComboBoxDESC.AddItem TABL1(I, 2)
End If
End If
Next
End Sub

Private Sub OptionButtonR_Click()
If OptionButtonQUINC = True Then
OptionButtonR.Value = False
Else
CRITERE = "R"
End If
End Sub

Sub UserForm_Initialize()
Sheets("FEUIL2").Range("A2:G900").Clear
'Remplir le tableau
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant

AA = Application.Run("REMPLIR1", TABL1)
End Sub


'''les 2 Macros qui sont dans module1 :


Sub REMPLIR(TABL1 As Variant)
'Macro 1
'Remplir le TABLEAU VIRTUEL DE TRAVAIL
Dim L As Long
Dim N As Long
'Dim TABL1(1000, 40) As Variant
'Dim TABL2(1000, 40) As Variant

L = 900
N = 6
LIN1 = 4 ' LIGNE DÉBUT DU TABLEAU
COL1 = 1 ' COLONNE DÉBUT DU TABLEAU

For LL = 0 To L
For CC = 0 To 5
TABL1(LL, CC) = Sheets("FEUIL1").Cells((LL + LIN1), (CC + COL1))
Sheets("FEUIL2").Cells((LL + 1), (CC + 1)) = TABL1(LL, CC)
Next CC
For CC = 35 To 35
TABL1(LL, CC) = Sheets("FEUIL1").Cells((LL + LIN1), (CC + COL1))
Sheets("FEUIL2").Cells((LL + 1), (7)) = TABL1(LL, CC)
Next CC

Next LL

End Sub
Sub FILTRE(TABL As Variant, CRIT As Variant, COLCR As Variant)
Sheets("FEUIL2").Range("A2:G1000").Clear

Dim L As Long
Dim LTABL1 As Long
Dim N As Long
Dim TABL1(1000, 40) As Variant
Dim TABL2(1000, 40) As Variant
LTABL1 = 1
L = 900
N = 6
LIN1 = 1 ' LIGNE DÉBUT DU TABLEAU
COL1 = 1 ' COLONNE DÉBUT DU TABLEAU


'TRIER TABLEAU

For LL = 0 To L
If TABL(LL, COLCR) = CRIT Then
For CC = 0 To N
TABL1(LTABL1, CC) = TABL(LL, CC)
Sheets("FEUIL2").Cells((LTABL1 + LIN1), (CC + COL1)) = TABL(LL, CC)
Next CC
LTABL1 = LTABL1 + 1

End If
Next LL


End Sub
A voir également:

11 réponses

ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
19 oct. 2007 à 23:04
Bonsoir,

Peux tu mettre ton fichier xls à dispo via cijoint.fr ?
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
22 oct. 2007 à 03:41
le fichier est sur
http://www.cijoint.fr/cij97306280229435.xls
svp de l'aide serait bien appréciée.
merci.
Vince.
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
22 oct. 2007 à 10:10
Bonjour,

Je viens de récupérer ton fichier. Je le regarde et je te tiens informer.

@+
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
22 oct. 2007 à 15:42
Toujours pas de nouvelles ??
merci. Vince.
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
22 oct. 2007 à 16:19
Oupss ...

Sorry ... Je suis au taf ...

Je le regarderais donc ce soir.

@+
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
23 oct. 2007 à 10:21
Bonjour,

J'ai regarder ton document.

Je l'ai fait "tourner". Il y a bcp de chose incompréhensible.

Tu utilises une fonction qui alimente une plage sur une seconde feuille Excel à partir de données d'une première feuille excel. Tu utilises ensuite la plage de la deuxième feuille pour alimenter une combobox sur ton UserForm !!!

Pourquoi faire simple quand on peut faire compliquer !!!

- Peux tu me dire ce que tu attends exactement ???

- Est ce que ta UserForm fait de la restitution de données ???

- Y-a-t'il des champs modifiables ???

- Pourquoi n'utilises tu pas les objets Excel pour ta programmation en vba ???

...

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
23 oct. 2007 à 13:39
Je veux mettre ce userform a disposition des travailleurs ici pour qu'ils entrent les modifications d'inventaire qu'ils utilisent.
je n'ai pas terminé toutes les fonctions, il reste la modification de la quantité du produit choisi dans la feuille "en cours".

je veux faire un userform pour éviter que les travailleurs se trompent en utilisant les fonctions de tri et de filtre dans excel.

je ne suis pas programmeur , c'est pour ca que ca peut paraitre bizzard a tes yeux.

je suis pret a modifier certaines choses si ca peut aider.

Merci.
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
23 oct. 2007 à 14:16
D'ac ...

La première chose est de défénir les fonctions de ta UserForm :

"Je veux mettre ce userform a disposition des travailleurs ici pour qu'ils entrent les modifications d'inventaire qu'ils utilisent"

=> j'ai vu que tu avais fait une fonction de remplissage de ton inventaire dans ta combobox. Hors celle-ci est modifiable. Est ce que les utilisateurs pourront modifier cette zone ?
De plus les autres combobox sont aussi modifiables. Est ce que les utilisateurs pourront modifier ces zones ?

"il reste la modification de la quantité du produit choisi dans la feuille "en cours".

=> d'après ce que tu écris, il ne devrait y avoir que cette zones de saisissable ?

"en utilisant les fonctions de tri et de filtre dans excel"

Quel type de tri et de filtre veux tu effectuer ? Sont ils en relation avec les OptionButton "ACIER" et "QUINC" ?

Peux tu me faire un topo de ce tu attends exactement de cette UserForm, stpn, afin d'éclairer un peu plus ma lanterne???

"je ne suis pas programmeur , c'est pour ca que ca peut paraitre bizzard a tes yeux. "

Je suis prêt à modifier certaines choses si cela peut aussi t'aider, pour alléger ton code et le rendre un peu plus lisible et plus fonctionnel.

@+
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
23 oct. 2007 à 15:03
http://www.cijoint.fr/cij94341793229531.xls
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
23 oct. 2007 à 15:04
les combobox ne devraient pas etre modifiables, tu as raison,

l'utilisateur filtre les données avec le userform de la facon suivante :

type matériel, type acier, description, grade, longueur.

ensuite il tape la quantité utilisée.

cette quantité se déduit de la quantité disponible dans la colonne F de la feuille "En Cours".

merci.
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
23 oct. 2007 à 16:23
Ok ... je continue à regarder, et je te soumet un truc prochainement
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
23 oct. 2007 à 15:47
ce fichier est fait avec les objets excel , je pense qu'il est moin compliqué pour ce que j'ai a faire :

http://www.cijoint.fr/cij94341793229531.xls

Vous me direz ce que vous en pensez.
Merci,
Vince.
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
23 oct. 2007 à 20:08
Version Updatée par moi sur : http://www.cijoint.fr/cij27444086729504.xls

ca plante encore quand je fais plusieurs produits différents et aussi si on entre autre chose que des chiffres dans la case quantité utilisée.

Dites moi si vous y trouvez des solutions.
Merci.
Vince
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
23 oct. 2007 à 20:59
Bonsoir,

Sur quoi cela plante ?
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50
23 oct. 2007 à 21:05
Je vais travailler sur le premier fichier.

Si tu as des questions, n'hésites pas à me les faire part en MP.
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9 > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
24 oct. 2007 à 14:04
Comment je fais pour empecher les gens de marquer autre chose que des chiffes dans la case quantité?
merci.
Vince.
0
ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009 50 > psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008
24 oct. 2007 à 14:26
Bonjour,

Tu peux essayer ceci :

Private Sub TextBox_Validate(Cancel As Boolean)

    ' Vérifie si la valeur entrée est numérique
    If Not IsNumeric(TextBox.Text) Then
        Cancel = True ' Annule la validation de contrôle
        MsgBox "Veuillez entrer un nombre !"
    End If

End Sub


ou bien ceci :

Private Sub TextBox_KeyPress(KeyAscii As Integer)

    ' Si la valeur n'est pas comprise entre 0 et 9 et qu'elle n'est pas un backspace
    If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8) Then
        KeyAscii = 0 'on annule la pression sur la touche
    End If

End Sub
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9 > ShaBoo Messages postés 392 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 5 septembre 2009
24 oct. 2007 à 14:36
Je veux pouvoir entrer des décimales aussi , donc le point (mon ordi es en Anglais)
et comment je fais pour appeler cette Sub dans textbox ??
0
psychoman Messages postés 30 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 14 février 2008 9
24 oct. 2007 à 15:19
SUPER , MERCI, C'EST TRES APPRÉCIÉ.
Vince.
0