AJOUTER données du UserForm dans une liste

MisterT

XLDnaute Occasionnel
Bonjour à chacun,:)

J'ai un UserForm dont il s'agit d'entrer la Marque et le Modèle d'un Item ainsi que ses caractéristiques.

Je voudrais que ces données entrées puissent être AJOUTÉES dans une liste d'items en ordre Alphabétique. Le fichier contient 2 feuilles; celle avec le USF et celle avec la liste d'items.

À l'ouverture du UserForm, il serait bien de pouvoir voir dans les 2 listes déroulantes, les Marques et Modèles des Items déjà présents dans la liste.

Donc, principalement je souhaite pouvoir AJOUTER les données dans la liste d'items et IDÉALEMENT, j'aimerais bien aussi pouvoir MODIFIER ou RETIRER des Items de la liste si cela demeure simple pour un spécialiste en la matière.

Étant débutant en VBA Excel, j'ai besoin d'aide pour concrétiser ce projet. Tous les détails sont bien écrits dans le fichier joint.

Alors, merci à celui qui acceptera d'utiliser temps et connaissances pour m'aider !

MisterT:)
 

Pièces jointes

  • USF_Add_Characteristics.zip
    17.6 KB · Affichages: 90
  • USF_Add_Characteristics.zip
    17.6 KB · Affichages: 84
  • USF_Add_Characteristics.zip
    17.6 KB · Affichages: 88

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

peux tu s'il te plait renvoyer ton fichier modifié,pour que je puisse comprendre pourquoi le deuxième point ne fonctionne pas et aussi me donner un exemple au sujet des valeur text de cellules lors de l'appuie sur le commandbutton1
Merci.
 

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

Je pense que pour le point 1 tu dvrais faire comme ceci dans les boutons ajouter et modifier:
Code:
With Sheets("racquet characteristics")
.Range("c" & x).Value = Format(UserForm1.TextBox1, "0")
.Range("d" & x).Value = Format(UserForm1.TextBox2, "0")
.Range("e" & x).Value = Format(UserForm1.M_ComboBox3.Value, "0")
.Range("f" & x).Value = Format(UserForm1.X_ComboBox4.Value, "0")

.Range("g" & x).Value = Format(UserForm1.TextBox5, "0.0")
'etc....
pour le point 2 essai plutot
Code:
x = drligne+1
pour le point 3
Code:
Private Sub Retirer_Button3_Click()
If UserForm1.Brand_ComboBox1 = "" Or UserForm1.Model_ComboBox2 = "" Then
 answer = MsgBox(" Vous devez remplir tous les champs", vbOKOnly)
        xPos = 100: yPos = 100
        If answer = vbOK Then
            Exit Sub
        End If
Else:
If MsgBox("Etes vous sure de supprimez", vbYesNo) = vbYes Then
Rows(x).Delete
UserForm1.Brand_ComboBox1.Clear
UserForm1.Model_ComboBox2.Clear
End If
End If
End Sub
A+
 
Dernière édition:

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

Merci pour les codes du post précédent !

Voici où j'en suis rendu;
1- avec l'ajustement du x = drligne+1, les ajouts se font bien sur une ligne vierge.
2- J'ai trouvé une façon pour que les valeurs transférées des TextBox soient des nombres et ça fonctionne bien pour MODIFIER et AJOUTER, voici l'ajustement avec le Cdbl;
Code:
With Sheets("Racquet characteristics")
.Range("c" & x).Value = CDbl(UserForm1.TextBox1)
.Range("d" & x).Value = CDbl(UserForm1.TextBox2)
.Range("e" & x).Value = CDbl(UserForm1.M_ComboBox3.Value)
.Range("f" & x).Value = CDbl(UserForm1.X_ComboBox4.Value)

.Range("g" & x).Value = CDbl(UserForm1.TextBox5)
3- La partie SUPRIMER est OK aussi.

Correctifs restants à faire;
1) Actuellement il est possible d'AJOUTER plusieurs fois le même BRAND & MODEL, peut-on s'assurer de ne pouvoir ajouter 2 fois le même Item dans la liste ?

2) Pour AJOUTER des valeurs dans les TextBox 5 à 12 & 15 à 35, le "Remplacer le point par la virgule" ne fonctionne pas, il met le point en point et ne prend pas la virgule.

J'aimerais forcer le FORMAT à être "000,0", par exemple "123,5" si c'est possible.

J'ai fait de multiples essais en vain avec le TextBox5 avec les 2 avant-dernières lignes que j'ai ajouté comme ceci;
Code:
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'pour changer le point en virgule
If KeyPress = 46 Then
KeyPress = 44
Exit Sub
End If
    Select Case KeyAscii
        Case 46 To 57
        Case Else: KeyAscii = 13
     If KeyAscii = 13 Then KeyAscii = 0
    End Select
    TextBox5 = Format((TextBox5.Value), "000.0")
    TextBox5.MaxLength = 5
End Sub

3) Dans la partie AJOUTER, Il serait bien de pouvoir ajouter une vérification pour savoir s'il y a des TextBox vides sauf ceux qui sont LOCKED, puis un msgBox s'il y a des vides.

4) Un message d'erreur "Index out of Bounds" apparaît régulièrement au Clique pour Afficher le USF. Pour continuer, je fais clique FIN et clique de nouveau pour Afficher USF et c'est OK.

Ce problème semble provenir du ListView, à quoi sert-il ?

Voici le lien pour le fichier ; .
Est-ce que tu acceptes de regarder cela lorsque tu seras disponible ?

Merci beaucoup et bonne journée,
MisterT :)
 
Dernière édition:

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

...suite de mon Post précédent

Bonjour fhoest, :)

J'ai trouvé une façon de remplacer le point par une virgule, donc le code est changé pour ceci;
Code:
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'pour changer le point en virgule
TextBox5.Value = Replace(TextBox5.Value, ".", ",")
TextBox5.MaxLength = 5
End Sub

Voici le lien pour du fichier mis à jour: Cijoint.fr - Service gratuit de dépôt de fichiers

À bientôt,
MisterT :)
 

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

bonsoir,
je regarderais certainement cette semaine quand j'aurai un peu plus de temps,
le listview sert a stoxker les informations temporairement afin de filtrer les doublons et de mettre les item combo dans l'ordre alphabetique,en fait j'ai deja eu ce message mais il apparait seulement lorsque l'on lance le userform quand on programme sinon lorsque l'on utilise le fichier normalement sans etre en mode programmation on a pas d'erreur.
ps la methode cdbl je connaissait mais je ne l'ait pas utilisé car tu voulais deux format différent
ALLez A+
 

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

Merci pour ta réponse et pour l'aide à venir lorsque tu seras disponible !

En fait, il reste les point #1 et #3 du Post #18 à solutionner;

1) Actuellement il est possible d'AJOUTER plusieurs fois le même BRAND & MODEL, peut-on s'assurer de ne pouvoir ajouter 2 fois le même Item dans la liste ?

3) Dans la partie AJOUTER, Il serait bien de pouvoir ajouter une vérification pour savoir s'il y a des TextBox vides sauf ceux qui sont LOCKED, puis un msgBox s'il y a des vides.

Pour essayer de réduire du temps de travail de ton côté, du temps que tu es vraiment très gentil d'accorder pour m'aider, je vais tenter de solutionner le point #3, si j'y arrive, je vais le poster.

Merci encore, bon début de semaine et à bientôt !

MisterT :)
 

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

- Pour le Point #3) qui est de vérifier s'il y a des Box vides dans AJOUTER et MODIFIER, j'ai trouvé un code que j'ai adapté à mon besoin et ça fonctionne. La seule chose que je voudrais ajuster serait que le SetFocus se fasse sur le Ctrl vide que le code a détecté, est-ce possible d'ajuster le code pour faire ainsi ?;
Code:
Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
        If TypeName(Ctrl) = "ComboBox" Or TypeName(Ctrl) = "TextBox" Then
            If Ctrl = "" And Ctrl.Locked = False Then
            MsgBox " Vous devez remplir tous les champs "
            Ctrl.SetFocus
            Exit Sub
            End If
        End If
    Next Ctrl

- Il restera le point #1) à solutionner: Actuellement il est possible d'AJOUTER plusieurs fois le même BRAND & MODEL, peut-on s'assurer de ne pouvoir ajouter 2 fois le même BRAND & MODEL dans la liste ?

Il peut y avoir plusieurs fois le même BRAND et plusieurs fois le même MODEL dans la feuille "Racquet Characteristics" car le même MODEL peut être de 2 BRAND différents, ça c'est OK mais pas 2 fois le même BRAND & MODEL ensemble, j'essaie d'être clair...

Merci beaucoup et à bientôt fhoest,
MisterT :)
 

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

Bonsoir,
je ne sais pas si ce code fonctionne car je l'ai ecrit sur le bloc note sans faire de test
mais l'idée de la verification du doublon c'est ca
Code:
Dim fin As Long
Dim a ,b As String
Sheets("Racquet Characteristics").Activate
fin = Sheets("Racquet Characteristics").Range("b65000").End(xlUp).Row
Sheets("Racquet Characteristics").Range("A7").Activate
Do
a = Brand_ComboBox1.Value
b= Model_ComboBox2
If ActiveCell.Value = a Then
if activecell.offset(0,1).value=b then msgbox"ceci est un doublon"
else:
ActiveCell.Offset(1, 0).Activate
End If
Loop Until ActiveCell.Row = fin

Le code que tu as trouvé pour la verification des textbox vide est quasiment le meme que le Private Sub Brand_ComboBox1_Change()
avais tu remarqué ?
Allez tu tiens le bon bout et en plus ce que j'apprecie énormément c'est que tu n'attend pas simplement les solutions tu cherche également,
A+
 

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

- La seule chose que je voudrais ajuster serait que le SetFocus se fasse sur le Ctrl vide que le code a détecté, est-ce possible d'ajuster le code pour faire ainsi ?;
Code:
Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
        If TypeName(Ctrl) = "ComboBox" Or TypeName(Ctrl) = "TextBox" Then
            If Ctrl = "" And Ctrl.Locked = False Then
            MsgBox " Vous devez remplir tous les champs "
            Ctrl.SetFocus
            Exit Sub
            End If
        End If
    Next Ctrl
après un test avec un bouton est ton bout de code je m'apercoit que c'est possible,tres bon bout de code le ctrl.setfocus est ok.
A+
 
Dernière édition:

jeanlee411

XLDnaute Nouveau
Re : AJOUTER données du UserForm dans une liste

:) Bonjour fhoest,

Merci d'être là comme convenu et pour les instructions pour la suite, j'apprécie vraiment !!!

Je vais lire et relire tes instructions pour les boutons AJOUTER, MODIFIER & SUPPRIMER afin de les comprendre du mieux que je peux car à première vue cela m'apparaît un peu complexe pour mes yeux d'apprenti.

Est-ce que le fichier 05essai_USF_Add... convient ou si tu préfères que je sépare aussi les conditions 18, 19 ou 20 pour le TextBox4 avec des Sub les appelant car dans le fichier 05essai..., ces conditions sont déjà intégrées avec celles de 16 ou 18 pour le TextBox3 et ça fonctionne bien ?

Suite à ta réponse pour le fichier à utiliser, je vais aller faire mes devoirs et te reviendrai...

Merci encore fhoest pour le beau travail et aussi pour ta patience !

Bonne journée !

MisterT :)
re,
tu peux utiliser le fichier que tu préfère il fonctionne tous les deux parfaitement
après tout c'est ton fichier ensuite on s'adapte,si tu comprend mieux sans las appelle de sub différent cela n'a pas beaucoup d'importance,du moment que c'est clair pour toi c'est le principal
Allez bon devoir si toute fois tu n'y arrive vraiment pas n'hésite pas a revenir sur le fil....
A+
 

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest :)

Tout d'abord, merci beaucoup pour ton bon commentaire à mon égard, c'est très apprécié.

Je suis tellement reconnaissant pour l'aide que tu m'apportes qu'il m'est tout à fait normal de faire le maximum d'effort de mon côté pour trouver les solutions.
------------------------
Merci pour le code de vérification des doublons et d'avoir vérifié le code de vérification de champs vides et non je n'avais pas remarqué la similitude avec le code de Brand_ComboBox1_Change(), j'ai regardé et je n'aurais pas su l'ajuster pour les champs vides !
-----------------------

1) Code de vérification des doublons: je l'ai ajouté et tenté de l'adapter à mes besoins particuliers et j'ai fait une multitude d'essais de le faire fonctionner adéquatement, mais en vain. Il vérifie bien les doublons mais mes adaptations laissent à désirer...

- Il est le 2e code dans la Sub AJOUTER.

- J'ai ajouté une question à répondre OUI ou NON.

- La question est "AJOUT REFUSÉ: la MARQUE et MODEL existent déjà...Désirez-vous Modifier UNIQUEMENT le nom de MODEL ?"
Je voulais cette option car il arrive fréquemment qu'un MODÈLE de raquette change seulement de nom et d'esthétique et que les caractéristiques demeurent les mêmes, donc cette option permettrait de ne changer que le nom de MODEL après avoir choisi le BRAND et MODEL et que toutes les caractéristiques soient déjà chargées.

- À la réponse OUI, je peux changer le MODEL mais rien ne se passe au CLIQUE de AJOUTER.

- À la réponse NON, qui conserve le BRAND et efface le MODEL et toutes les caractéristiques pour permettre d'entrer les nouvelles données, il ne se passe rien aussi après le CLIQUE sur AJOUTER.

Est-ce que tu acceptes, lorsque tu seras disponible, de regarder le code et faire les ajustements nécessaires car cela dépasse mes minimes connaissances actuelles ?
--------------------------

2) Pour le code de vérification de champs vides, il est fonctionnel mais le curseur ne se place pas au bon endroit pour ces 4 Box qui se suivent dans l'ordre de Tabulation; Model_ComboBox2, TextBox1 & 2, puis M_ComboBox3 & X_ComboBox4

Acceptes-tu de regarder ce code aussi, c'est le 1er dans la Sub AJOUTER ?

-------------------------
Voici le lien pour le fichier: Cijoint.fr - Service gratuit de dépôt de fichiers

-------------------------

Merci encore fhoest et à bientôt,
MisterT :)
 

fhoest

XLDnaute Accro
Re : AJOUTER données du UserForm dans une liste

Bonjour,
Pour le point 1 il faut que tu test et regarde les commentaires dans le code surtout pour la reponse non
ensuite pour le point 2 cela m'a l'air bien compliqué en fait je m'apercoit qu'il fait le controle mais pas dans l'ordre de tabulation mais de creation des objets de plus il y a un melange d'objet (combo et textbox),personnellement je déplacerai mon setfocus sur un bouton ou textbox caché cela obligerai l'utilisation de la souris.voir fichier joint.
Cijoint.fr - Service gratuit de dépôt de fichiers
A+
 

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

Merci infiniment pour les correctifs, ça fonctionne parfaitement, c'est vraiment GÉNIAL ce que tu arrives à faire, c'est du travail d'expert!!!

J'ai beaucoup apprécié ta façon de faire, ce fut très enrichissant et je constate que j'ai encore tout un chemin à faire pour arriver au stade d'expertise que tu as, alors BRAVO pour toutes ces connaissances et la gentillesse de les partager ainsi.

Bonne journée et à bientôt,

MisterT :):):)
 

MisterT

XLDnaute Occasionnel
Re : AJOUTER données du UserForm dans une liste

Bonjour fhoest, :)

Merci une fois de plus pour ton aide généreuse !!!

Voici pour ceux qui pourraient être intéressés, le code ajusté par fhoest qui a permis de solutionner le point #1 étant la vérification des doublons dans la section AJOUTER et le point #2 qui force à utiliser le curseur dans les TextBox du USF.

Code:
Private Sub AJOUTER_Button1_Click()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' j'ai ajouter tout en haut du code:
' option explicit
' deux variable en public ,cela veut dire que lorsque tu passe d'un sub a l'autre elle conserve leur valeur
' et ne revienne pas a leur valeur par defaut
' ensuite j'ai enelever les exit sub et remplacer par un goto ici
' puis j'ai mis ici: a l'endroit ou le code doit continuer
' et comme il y a un change dans modele combobox2 il va sur le code de cet évènement et revient
' donc pour ne pas changer de ligne j'ai placé la condition saut dans le model_combobox2_change pour quitter le sub de ce dernier
' j'ai également mis on error resume next dans ce sub car : si tes textbox sont vide tu as une erreur avec cdbl(textbox?)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Ctrl As Control
    For Each Ctrl In UserForm1.Controls
        If TypeName(Ctrl) = "ComboBox" Or TypeName(Ctrl) = "TextBox" Then
            If Ctrl = "" And Ctrl.Locked = False Then
            MsgBox " Vous devez remplir tous les champs "
            bouton_caché_pour_setfocus.SetFocus
            Exit Sub
            End If
        End If
    Next Ctrl
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'ici code à ajuster pour faire suite aux réponses OUI et NON
Dim fin As Long
Dim a, b, answer, nouveau_modele As String
Sheets("Racquet Characteristics").Activate
fin = Sheets("Racquet Characteristics").Range("b65000").End(xlUp).Row
Sheets("Racquet Characteristics").Range("A7").Activate
Do
a = UserForm1.Brand_ComboBox1.Value
b = UserForm1.Model_ComboBox2.Value
If ActiveCell.Value = a Then
If ActiveCell.Offset(0, 1).Value = b Then answer = MsgBox(prompt:="AJOUT REFUSÉ: cette MARQUE et MODÈLE de raquette" _
& " sont déjà présents dans la liste, DÉSIREZ-VOUS MODIFIER UNIQUEMENT le nom de MODÈLE" _
& " et conserver les caractéristiques présentes?", _
Title:="AJOUT REFUSÉ ou Changement du nom de MODÈLE seulement", Buttons:=vbYesNo)
    If answer <> vbYes Then
   'pour effacer les données ligne 1
ligne1:  'Model_ComboBox2.SetFocus
'pour conserver les données ligne 2
ligne2: 'Model_ComboBox2.SetFocus
If answer = "" Then GoTo la
If answer = vbNo Then Exit Sub
Else:
'Exit Sub

End If
    'Else:
    'UserForm1.Model_ComboBox2 = Model_ComboBox2.Value
    saut = True
    nouveau_modele = InputBox("nouveau modèle")
    memoire_listindex = Model_ComboBox2.ListIndex
    Model_ComboBox2.RemoveItem (Model_ComboBox2.ListIndex)
    Model_ComboBox2.AddItem nouveau_modele, memoire_listindex
    Model_ComboBox2.Value = nouveau_modele
saut = False
    GoTo ici
    End If

la:
ActiveCell.Offset(1, 0).Activate


Loop Until ActiveCell.Row = fin
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ici:
Dim mem As Long
mem = x
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
answer = MsgBox(prompt:="Êtes-vous certain de vouloir AJOUTER la Raquette " _
& Brand_ComboBox1.Value & " " & Model_ComboBox2.Value & " et ses caractéristiques ?", _
Title:="ADDING Confirmation", _
Buttons:=vbYesNo)

If answer <> vbYes Then
Exit Sub
End If
''''''''''''''''''''''''''''''''''

'''''''''''''''''''''''''''''''''''''
x = drligne + 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

With Sheets("racquet characteristics")
On Error Resume Next
.Range("a" & x).Value = UserForm1.Brand_ComboBox1.Value
.Range("b" & x).Value = UserForm1.Model_ComboBox2.Value

.Range("c" & x).Value = CDbl(UserForm1.TextBox1)
.Range("d" & x).Value = CDbl(UserForm1.TextBox2)
.Range("e" & x).Value = CDbl(UserForm1.M_ComboBox3.Value)
.Range("f" & x).Value = CDbl(UserForm1.X_ComboBox4.Value)

.Range("g" & x).Value = CDbl(UserForm1.TextBox5)

Bonne journée et à bientôt,
MisterT :)
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 062
Membres
104 015
dernier inscrit
kkgk