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

Bonjour.
À supposer que soit connue, dans une variable L déclarée As Long, la ligne où vous devez l'enregistrer, c'est par des instructions de ce style:
VB:
Feuil1.Cells(L, "D").Value =  CDbl(Me.TextBox1.Text)
Mais on peut faire plus facile à maintenir par la suite en donnant des noms aux colonnes et aux contrôles.
À +
 
Dernière édition:
Re : renseigner "range" dans unserform

Bonjour Dormeur 74 et Dranbeb,

Merci à vous deux.

En effet Dormeur74 "petit exemple" rapide et efficace ! vous êtes des pro dans le domaine , merci.
Ce code est il attribué à chaque fois aux 7 colonnes :
Private Sub CommandButton1_Click()
Dim nlleLigne As Long
'On recherche la première ligne disponible

nlleLigne = Cells(Rows.Count, 1).End(xlUp).Row + 1

Cells(nlleLigne, 1) = TextBox1.Value
Cells(nlleLigne, 2) = TextBox2.Value
Cells(nlleLigne, 3) = TextBox3.Value
Cells(nlleLigne, 4) = TextBox4.Value
Cells(nlleLigne, 5) = TextBox5.Value
Cells(nlleLigne, 6) = TextBox6.Value
Cells(nlleLigne, 7) = TextBox7.Value

' On vide les zones de saisie
TextBox7.Value = ""
TextBox6.Value = ""
TextBox5.Value = ""
TextBox4.Value = ""
TextBox3.Value = ""
TextBox2.Value = ""
TextBox1.Value = ""
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()

End Sub

car quand je me rends dans vba "userform" et clique sur chaque champ le code apparaît.
il faut l'indiquer pour toutes les colonnes ?

d'autre part, pouvons nous faire le total en automatique ?

Petite modification,
Et si mes colonnes :
Client,
FRs et Libelle sont déjà remplies à la base, est ce que l'userform peut juste chercher la référence saisie dans "client" et ajouter juste les qtés ainsi que l'emplacement ?

Dranreb,

Ce code permet de sélectionner ma feuille avec toutes les colonnes intitulés ;
Feuil1.Cells(L, "D").Value = CDbl(Me.TextBox1.Text)
 
Re : renseigner "range" dans unserform

Re-bonjour,

#Dranreb
Je ne suis pas certain d'avoir bien compris.
Tant que l'utilisateur n'entre pas un nombre réel avec un séparateur qui ne convient pas, on peut faire des opérations sur les valeurs entrées sous forme de texte. Naturellement, mieux vaudrait utiliser IsNumeric() ou un truc dans ce goût-là en amont pour éviter toute embrouille. Je voulais juste montrer à Sesa comment on passait de la UserForm au tableur.

#Sesa
Chaque TextBox correspond à la colonne portant son numéro (TextBox3 à la 3e colonne, etc.). Tu peux utiliser aussi des ComboBox, les enrichir chaque fois qu'il y a un nouvel item, etc.
C'était vraiment un tout petit exemple.
 
Dernière édition:
Re : renseigner "range" dans unserform

Re Dormeur74,

Peux tu me donner un exemple stp ?
Ton fichier me convient mais je voudrais juste apporter un petit changement si mes colonnes A, B et C sont déja renseignées dans ma feuille,
sachant au final j'aurais une base complète de ces colonnes ; juste qtés par colis, nbre de colis, total et emplacement seront à entrer.
en espérant avoir été clair
merci
 
Re : renseigner "range" dans unserform

Dormeur:
Je ne suis pas certain d'avoir bien compris.
Je veux dire que les quantités se doivent d'être enregistrées dans des cellules en tant que nombre. Or la propriété Value d'un TextBox est toujours un String. Il faut donc la convertir en nombre au moyen de CDbl

sesa:
Si vous voulez dire par là que la colonne A (Client) est ce qu'on appelle un identifiant de la ligne, c'est à dire qu'il ne doit pas y figurer en double, il conviendrait de remplacer votre TextBox Client par un ComboBox. Cela vous éviterait d'avoir à chercher le client derrière, et offrirait une meilleure assistance à l'utilisation. Affecter la colonne client à sa propriété List à l'Userform_Initialize et après chaque ajout.

Cordialement.
 
Re : renseigner "range" dans unserform

Je veux dire que les quantités se doivent d'être enregistrées dans des cellules en tant que nombre. Or la propriété Value d'un TextBox est toujours un String.

C'est bien ce que j'avais cru comprendre. Le gros danger avec VBA (contrairement à VB depuis la version 2.0) est que le transtypage entre un objet (TextBox, ListBox, Label, etc.) et le tableur est automatique. Aussi dangereux qu'un type Variant mal utilisé.

Si je mets dans une TextBox la valeur 2.5 ou 2,5 en utilisant la propriété .Text (ou Value), la valeur numérique sera automatiquement transtypée, donc reconnue (au moins jusqu'à VBA 2003).

Bien sûr, il ne faut pas utiliser cette faille, pas plus que le GOTO ou la non-obligation de déclarer ses variables.

Le code ci-dessous transtype la valeur "texte" et la traduit en valeur réelle. Gros danger, bien sûr.

Code:
Private Sub CommandButton1_Click()
    Dim Cell11 As String ' Réel séparateur virgule
    Dim Cell21 As String ' Réel séparateur point
    
    Cell11 = TextBox1.Text ' contient la chaîne de caractères "5,4"
    Cell21 = TextBox2.Text ' contient la chaîne de caractères "5.4"
    
    Cells(1, 1) = Cell11 ' contient la valeur numérique 5,4
    Cells(2, 1) = Cell21 ' contient également la valeur numérique 5,4
End Sub
 
Re : renseigner "range" dans unserform

Ch'savais pô… Mais je continuerai d'adapter le type de donnée à ce que je range dans les cellules. Ne serait-ce que pour documenter le code.
De toute façon c'est en général moi qui décide ce que doit faire VBA.

Il faut renseigner la propriété List du ComboBox AVANT de donner la main à l'utilisateur.
VB:
Option Explicit
Dim L As Long

Private Sub UserForm_Initialize()
Me.ComboBox1.List = Feuil1.Range("A2:A" & Feuil1.[A65536].End(xlUp).Row).Value
End Sub

Private Sub ComboBox1_Click()
L = Me.ComboBox1.ListIndex + 2
If L < 2 Then ' Ce sera une création
   L = Feuil1.[A65536].End(xlUp).Row + 1
   End If
End Sub
 
Dernière édition:
Re : renseigner "range" dans unserform

De toute façon c'est en général moi qui décide ce que doit faire VBA.

+1

S'il y a une règle en Or à respecter, c'est bien celle que tu viens d'énoncer.
Jamais de mauvaise surprise, n'importe qui peut prendre la suite.

Sesa, je vais déposer quelques fleurs là où tu sais et regarde ton code à mon retour si personne ne l'a fait.
 
Re : renseigner "range" dans unserform

Voila le premier jet d'un code complet:
VB:
Option Explicit
Dim L As Long

Private Sub UserForm_Initialize()
Me.ComboBox1.List = Feuil1.Range("A2:A" & Feuil1.[A65536].End(xlUp).Row).Value
End Sub

Private Sub ComboBox1_Change()
L = Me.ComboBox1.ListIndex + 2
If L < 2 Then ' Ce sera une création
   L = Feuil1.[A65536].End(xlUp).Row + 1
   Me.TextBox2 = ""
   Me.TextBox3 = ""
   Me.TextBox4 = ""
   Me.TextBox5 = ""
   Me.TextBox6 = ""
   Me.TextBox7 = ""
Else
   Me.TextBox2 = Feuil1.Cells(L, "B").Value
   Me.TextBox3 = Feuil1.Cells(L, "C").Value
   Me.TextBox4 = Feuil1.Cells(L, "D").Value
   Me.TextBox5 = Feuil1.Cells(L, "E").Value
   Me.TextBox6 = Feuil1.Cells(L, "F").Value
   Me.TextBox7 = Feuil1.Cells(L, "G").Value
   End If
End Sub

Private Sub CommandButton1_Click()
Feuil1.Cells(L, "A").Value = Me.ComboBox1.Text
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
Me.ComboBox1.List = Feuil1.Range("A2:A" & Feuil1.[A65536].End(xlUp).Row).Value
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub
Mais personnellement je remplacerais le bouton Valider par 3 boutons: Ajouter, Modifier, Supprimer.
Je vous le fais si ça vous intéresse.
À +
 
- 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