renseigner "range" dans unserform

  • Initiateur de la discussion Initiateur de la discussion sesa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sesa

XLDnaute Occasionnel
Bonjour à tous,

Après avoir parcouru le forum, et étant débutant dans la vba 😕,
j'aimerais qu'on m'explique comment on renseigne les zones qui doivent être sélectionnées par un userform.
Je n'arrive pas à lui affecter les codes en fonction des textbox puis valider avec le bouton.
Merci de votre collaboration
 

Pièces jointes

Re : renseigner "range" dans unserform

Re à vous

Je suis preneur Dranreb mais attention je me répète j'aurais plus de 3000 références.
quant à ma combobox, alors qu'en pensez vous ?😕
Merci à toi, dans l'attente

Dormeur74,
je t'en prie, j'attends ton retour.😉
 
Dernière édition:
Re : renseigner "range" dans unserform

bonjour Laetitia90,

merci pour votre fichier qui me servira aussi.
par contre, à chaque saisie, je suis obligé de faire quitter pour valider les qtés inventoriées, et poursuivre pour les autres références à chaque fois.
n' y a t il pas un moyen de rester sur l'userform et de quitter quand toutes les saisies ont été réalisées ?
au plaisir
 
Re : renseigner "range" dans unserform

re, pas tout a fait tu es pas oblige de quitter regarde dans exemple un fois click sur ajout la ligne est rajoute la combo reinitialise
autrement pour mieux voir la modif tu modifie la macro "es" comme cela

Code:
Sub es()
 On Error Resume Next 'pour eviter *0
 With Sheets(1)
 T6 = CDbl(T4 * T5)
 If ActiveControl.Name = "nouv" Then _
 For y = 1 To 7: .Cells(c1.ListCount + 2, y) = Replace(Controls("T" & y).Value, ",", "."): Next y
 If ActiveControl.Name = "modif" And c1.ListIndex > -1 Then _
 For y = 1 To 7: .Cells(c1.ListIndex + 2, y) = Replace(Controls("T" & y).Value, ",", "."): Next y
 If ActiveControl.Name = "suppr" And c1.ListIndex > -1 Then .Rows(c1.ListIndex + 2).Delete
 End With
 Unload Me: UserForm2.Show 'changement
End Sub
 
Re : renseigner "range" dans unserform

Bons tests alors. Y en a besoin, j'ai fait ça vite, et on pourrait soigner un peu plus en ne mettant BtnModifier Enabled que si au moins un champ a été modifié.
En général j'écris une procédure séparée nommée HabiliterBoutons que j'appelle systématiquement en fin de toutes les autres procédures et où je réanalyse complètement toute la situation.
P.S Et en poussant à l'extrême on pourrait aussi interdire le bouton Supprimer si un champ a été modifié, pour ne pas risquer de supprimer un article dans un état différent de ce qu'on voit dans les champs. Mais ça impliquerait presque d'avoir aussi un bouton Annuler pour rétablir les champs à leurs valeurs d'origine. Et celui ci ne devra être Enabled, au contraire que si un champ a été modifié. On le voit: tout cela devient tellement compliqué que la procédure séparée se justifie pleinement.
À +
 

Pièces jointes

Dernière édition:
Re : renseigner "range" dans unserform

Je vais me contenter, dans l'immédiat, de passer ton code à la déchiqueteuse et espère que tu ne m'en voudras pas trop ; c'est pour ton bien. Je laisserai aux autres intervenants (ils se sont déjà pas mal investis) le soin de faire marcher ce truc.

Parlons de la forme.

- ton code n'est pas indenté. C'est une démarche à adopter dès qu'on commence à programmer, car les mauvaises habitudes sont très, très difficiles à éradiquer par la suite
- tes codes clients sont hétérogènes ; les deux derniers sont des chaînes de caractères, les premiers sont des nombres. Cela ne se voit pas dans le format des cellules (elles sont toutes standard). La seule trace visible actuelle (coup de bol !), c'est la justification à gauche des 2 derniers codes. Si par malheur la colonne A est centrée, tu peux te brosser pour trouver l'anomalie. On en revient au conseil de Dranreb (c'est le programmeur qui décide). Donc toujours intéressant d'entrer une fonction qui fait le tri en amont, du genre :

Code:
Public Function TypeCell(Cellule As Range) As String
    If IsEmpty(Cellule) Then
        TypeCell = "Vide"
    ElseIf Application.IsText(Cellule) Then
        TypeCell = "Texte"
    ElseIf Application.IsLogical(Cellule) Then
        TypeCell = "Logique"
    ElseIf Application.IsErr(Cellule) Then
        TypeCell = "Erreur"
    ElseIf IsDate(Cellule) Then
        TypeCell = "Date"
    ElseIf IsNumeric(Cellule) Then
        TypeCell = "Nombre"
    End If
End Function

Si tu mets dans un bouton de test le code suivant
Code:
    MsgBox TypeCell(Range("A14"))
    MsgBox TypeCell(Range("A16"))

Surprise ! Un nombre et un texte.
Cette technique semble lourde, mais elle est très efficace quand le code a été pondu par quelqu'un d'autre.
- tu as deux doublons et le titre de la colonne A dans ta combo : 1256996 et 1256985. Dranreb a corrigé la présence du titre en remplaçant A1 par A2.
- tes codes clients ne sont pas dans l'ordre alphanumérique. S'il y en a 3000 ou plus, bonjour la nervosité !
- enfin, pourquoi du code dans le Combobox1_Exit() ??? Cette méthode va s'exécuter chaque fois qu'on va quitter la Combo pour aller sur un autre contrôle. Question : est-ce vraiment le bon endroit.

Une chose me turlupine, c'est la raison pour laquelle la propriété .Sort qui existait dans les List et Combo de VB 2.0 (listes ordonnées) il y a près de trente ans n'a jamais été reprise dans les contrôles ActiveX fournis avec VBA.
 
Re : renseigner "range" dans unserform

J'utilise pour ma part une Fonction un peu plus courte mais qui parle english:
VB:
Function TypeDon(Cel As Range) As String
TypeDon = TypeName(Cel.Value)
End Function
Remarque: pour le sortir en français on pourrait utiliser un Select Case VarType(Cel.Value)
Cordialement.
 
Dernière édition:
Re : renseigner "range" dans unserform

Dranreb

Nettement plus court. Comme quoi il est bon de changer ses habitudes quand on trouve mieux. J'adopte.
Mais attention aux calculs mathématiques : la bête sait faire la différence entrer un VRAI et un FAUX, mais pas entre un INTEGER et un DOUBLE.
 
Re : renseigner "range" dans unserform

re à tous,

je suis laché complet avec tous vos codes !
cela dit, je viens de tester et un bug sur le fichier joins de Dranreb :
Feuil1.Cells(L, "B").Value = Me.TextBox2
Feuil1.Cells(L, "C").Value = Me.TextBox3
Feuil1.Cells(L, "D").Value = CDbl(Me.TextBox4)
Feuil1.Cells(L, "E").Value = CDbl(Me.TextBox5)
Feuil1.Cells(L, "F").Value = CDbl(Me.TextBox6)
Feuil1.Cells(L, "G").Value = Me.TextBox7

je vous remercie d'avoir pris de votre temps pour élaborer mon fichier.
 
Re : renseigner "range" dans unserform

Désolé Laetitia,
Je viens de copier ton code, bingo c'est super pas besoin de sortir à chaque fois.
Je te remercie d'avoir pris la peine de travailler sur le fichier déjà réalisé par Dormeur74.
En revanche, dans la combox, étant donné que j'aurai une grande liste exhaustive, est ce qu'on peut taper directement le code client au lieu de se servir d'une liste déroulante ?
Ensuite remplir les champs .
Merci encore



re, pas tout a fait tu es pas oblige de quitter regarde dans exemple un fois click sur ajout la ligne est rajoute la combo reinitialise
autrement pour mieux voir la modif tu modifie la macro "es" comme cela

Code:
Sub es()
 On Error Resume Next 'pour eviter *0
 With Sheets(1)
 T6 = CDbl(T4 * T5)
 If ActiveControl.Name = "nouv" Then _
 For y = 1 To 7: .Cells(c1.ListCount + 2, y) = Replace(Controls("T" & y).Value, ",", "."): Next y
 If ActiveControl.Name = "modif" And c1.ListIndex > -1 Then _
 For y = 1 To 7: .Cells(c1.ListIndex + 2, y) = Replace(Controls("T" & y).Value, ",", "."): Next y
 If ActiveControl.Name = "suppr" And c1.ListIndex > -1 Then .Rows(c1.ListIndex + 2).Delete
 End With
 Unload Me: UserForm2.Show 'changement
End Sub
 
Re : renseigner "range" dans unserform

je viens de tester et un bug sur le fichier joins de Dranreb
Je n'ai pas dit que c'était tout ce qu'il fallait. Encore faut il contrôler que les valeurs entrées dans les TextBox peuvent bien être convertie en numérique. Encore du travail pour la fameuse HabiliterBoutons: ne pas rendre utilisable les boutons Ajouter ni Modifier tant que ce n'est pas le cas.
À +
 
Re : renseigner "range" dans unserform

Bonjour.
Bon, je veux bien encore le faire, mais ce serait bien, dans votre intérêt, que vous fixiez ensuite ce que je vous proposerai, comme un seuil d'aboutissement à partir duquel vous le peaufinerez vous même, me faisant seulement part des difficultés que vous y rencontreriez.
Voilà.
À +
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

B
Réponses
0
Affichages
1 K
bilbinou
B
S
  • Question Question
Réponses
5
Affichages
1 K
Sluggy
S
O
Réponses
6
Affichages
2 K
T
Réponses
3
Affichages
8 K
tsikoudia91
T
H
Réponses
6
Affichages
4 K
Helios67
H
W
Réponses
5
Affichages
940
Retour