USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une cell.

troopers87

XLDnaute Occasionnel
Bonjour à tous,

novice en VBA, je me permets de poster ici une question à laquelle je n'ai pas trouvé de réponse précédemment.

Je suis en train de construire un formulaire avec plusieurs textbox que l'utilisateur n'est pas forcé de remplir (il peut en remplir 2 sur 3, par exemple).

Mon idée est que :
- si il rempli la textbox, alors son contenu est inséré dans une cellule ;
- mais si il ne le rempli pas, le contenu de la textbox vide ne sera pas copié dans une cellule au risque d'effacer les données qui s'y trouvent.

Voici le code VBA que je suis parvenu à monter jusqu'ici : on ne rigole pas ! Comme je l'ai dit au début, je ne suis que novice ;)

Private Sub ToggleButton1_Click()

'si la textbox ne contient pas de valeur numérique, alors msgbox et vider la textbox
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Saisir une valeur numérique", vbExclamation, "Erreur de saisie"
TextBox1.Value = ""
ExitSub

'si la textbox ne contient aucune valeur, alors ne pas mettre à jour (rien), sinon insérer cette valeur dans...
ElseIf TextBox1.Value = "" Then

'possibilité is not numeric pour les montants
Elseif Sheets("Epargne").Range("A24").Value = TextBox1
End If

'fermer la fenêtre et vider les données mémoires
Unload Me

End Sub
 

Pièces jointes

  • num.xlsm
    17.2 KB · Affichages: 213
  • num.xlsm
    17.2 KB · Affichages: 232
  • num.xlsm
    17.2 KB · Affichages: 237
Dernière édition:

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour Gelinotte et merci pour ton intérêt,

à vrai dire, je vois peu de différence avec mon code, excepté le textbox1.setfocus et le togglebutton que tu as remplacé par un commandbutton.
Quoi qu'il en soit, que j'insère un chiffre, du texte ou que je ne saisisse rien, je reçois un message d'erreur...

As-tu une autre idée ? Peut-être n'ai-je pas été clair dans mes explications ?
 

PrinceCorwin

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour le forum, Trooper, Gelinotte et les autres...

Une petite interpellation. Le bouton Test fait appel à quel UserForm ?
Dans quel UserForm le champs TextBox1 est-il ?
Dans ton fichier, il n'y a pas de UserForm...

Est-ce normal ?
 

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour PrinceCorwin,

à vrai dire non et j'ai eu ce problème sur une précédente discussion. Je crée mon UserForm puis j'enregistre, lorsque j'ouvre à nouveau le classeur, il apparaît bien ; en revanche, j'ai l'impression que durant le chargement sur le site, il perd le UserForm... Etrange...

Le voici à nouveau, je suis certain qu'il y a un UserForm1 qui contient une textbox1 et un CommandButton1 ;)
 

Pièces jointes

  • num.xlsm
    20.8 KB · Affichages: 226
  • num.xlsm
    20.8 KB · Affichages: 198
  • num.xlsm
    20.8 KB · Affichages: 183

Papou-net

XLDnaute Barbatruc
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour troopers87, Gelinotte, PrinceCorwin,

Je ne sais pas si jai bien compris, mais je verrais comme ceci :

Code:
Private Sub CommandButton1_Click()

'si la textbox ne contient aucune valeur, alors ne pas mettre à jour (rien)
    If TextBox1.Value = "" Then Unload Me: Exit Sub
'si la textbox ne contient pas de valeur numérique, alors msgbox et vider la textbox
    If Not IsNumeric(TextBox1.Value) Then
      MsgBox "Saisir une valeur numérique", vbExclamation, "Erreur de saisie"
      TextBox1.Value = ""
      TextBox1.SetFocus
      Exit Sub
    End If
'possibilité is not numeric pour les montants
' insérer cette valeur dans...
    Sheets("Epargne").Range("A24").Value = TextBox1

'fermer la fenêtre et vider les données mémoires
    Unload Me
End Sub
Il est important de vérifier si TextBox1 n'est pas vide avant de tester si son contenu est de type numérique.

Espérant avoir résolu.

Cordialement.
 
Dernière édition:

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour Papou-net ^^,

Effectivement, ça me règle le souci ! Vérifier si le contenu est numérique en premier était une erreur et générais des bugs, je m'en rends compte, maintenant. Merci beaucoup pour ton aide, l'outil est puissant. Merci aussi à PrinceCorwin et Gelinotte pour leur intérêt.

Au plaisir de re-discuter avec vous ;)
 

Gelinotte

XLDnaute Accro
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour,

Bonjour Gelinotte et merci pour ton intérêt,

à vrai dire, je vois peu de différence avec mon code, excepté le textbox1.setfocus et le togglebutton que tu as remplacé par un commandbutton.
Quoi qu'il en soit, que j'insère un chiffre, du texte ou que je ne saisisse rien, je reçois un message d'erreur...

As-tu une autre idée ? Peut-être n'ai-je pas été clair dans mes explications ?


Dans le fichier exemple que tu nous as joint, il n'y a pas de Userform à laquelle la macro fait référence.
Dans le fichier exemple que tu nous as joint, il n'y a pas de feuille nommée "Epargne" à laquelle la macro fait référence.

J'ai donc créé un userforme aux fins de test et renommé la feuil1 en Epargne. Chez-moi, le fichier que j'ai joint au post #2 fonctionnait bien : c'est à dire qu'il gère le type de caractères insérés dans le textbox ... chiffres ou lettres, jusqu'à ce que je réactive la ligne ExitSub, qui devrait s'écrire Exit Sub.

Je m'en excuse je n'ai pas revérifié avant de l'envoyer. Je viens de changer le fichier joint au post #2.


G
 
Dernière édition:

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour Gelinotte,

merci pour le suivi. Ta méthode ne correspond pas exactement à ce que je cherchais dans le sens où, lorsque je ne saisi rien, une boîte de dialogue me demande une valeur numérique. Le code de Papou-Net fonctionne à merveille en revanche. Merci quand même !

Toutefois, il me reste un souci, comme vous le supposez, faire un UserForm avec une seule textbox n'est pas très judicieux. Mon objectif est bien d'avoir une bonne dizaine de textbox : chacune remplissant une cellule particulière (le fichier sert à gérer ses propres comptes, 6 au total, il faut donc indiquer leurs noms, leur montant, leur taux et leur plafond, soit autant de textbox !).

Le souci que je suppose mineur est que :
- si je ne rempli pas la première textbox
- alors la macro fait un Unload Me : Exit Sub
- ce qui a pour conséquence de ne pas prendre en compte le reste des textbox qui, elles, ont peut-être été remplies !

Un bon fichier (avec USF, prions pour cela), pourra peut-être vous aider à mieux comprendre la problématique. Je le charge.

Merci d'avance pour votre aide et vos précisions !
 

Pièces jointes

  • Gestion (1).xlsm
    34.1 KB · Affichages: 185

Gelinotte

XLDnaute Accro
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Bonjour,

Ce pourrait être ainsi.
Ça ressemble beaucoup au test de valeur numérique.

Il y a sûrement possibilité de faire mieux, mais je suis en apprentissage et mes connaissances sont limitées.


G
 

Pièces jointes

  • Gestion (2).xlsm
    39.7 KB · Affichages: 187

Papou-net

XLDnaute Barbatruc
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

RE : troopers87,

Essaie en réécrivant ton code comme ceci :

Code:
Private Sub CommandButton1_Click()
'########################## ONGLET COMPTES #################################################################
'##### CADRE NOMS ########
'si la textbox ne contient aucune valeur, alors ne pas mettre à jour (rien)
' dans les autres cas, insérer cette valeur dans...
    If Not nom_compte2.Value = "" Then Sheets("Epargne").Range("A28").Value = nom_compte2
    If Not nom_compte3.Value = "" Then Sheets("Epargne").Range("A29").Value = nom_compte3
    If Not nom_compte4.Value = "" Then Sheets("Epargne").Range("A30").Value = nom_compte4
    If Not nom_compte5.Value = "" Then Sheets("Epargne").Range("A31").Value = nom_compte5
    If Not nom_compte6.Value = "" Then Sheets("Epargne").Range("A32").Value = nom_compte6
'##### CADRE MONTANTS ########
'si la textbox ne contient aucune valeur, alors ne pas mettre à jour (rien)
    If Not montant_compte1.Value = "" Then
'si la textbox ne contient pas de valeur numérique, alors msgbox et vider la textbox
      If Not IsNumeric(montant_compte1.Value) Then
        MsgBox "Saisir une valeur numérique", vbExclamation, "Erreur de saisie"
        montant_compte1.Value = ""
        montant_compte1.SetFocus
        Exit Sub
      End If
    End If
' dans les autres cas, insérer cette valeur dans...
    Sheets("Epargne").Range("B2").Value = montant_compte1
'########################## CADRE OBJECTIFS #################################################################
'########################## CADRE PERSONNALISATION ##########################################################
'########################## CADRE VOITURES ##################################################################
'fermer la fenêtre et vider les données mémoires
Unload Me
End Sub
NB : j'ai supprimé les lignes vides pour minimiser la fenêtre de lecture.

Cordialement.

EDit : oups, je suis allé trop vite ! Le test ne se fait que sur la première case mais la solution de Gelinotte fonctionne correctement.

@ Gelinotte : oui il est possible de faire mieux en supprimant la possibilité de taper des caractères non autorisés dès la saisie.
Si notre ami troopers le souhaite, on peut lui proposer un exemple.

Cordialement.
 
Dernière édition:

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Oui, c'est exactement ce que je cherchais ! De cette manière, si l'utilisateur met à jour une textbox, alors le résultat se retrouve dans une cellule, mais si il ne le fait pas alors la cellule en question ne sera pas forcément modifiée. Merci tous deux pour votre aide.

Ah Excel... et le VBA... quand on trouve une solution, on a toujours envie de l'améliorer donc oui, Papou-Net, je suis preneur si je peux interdire la saisie de tel ou tel type de caractère. Juste une chose : dans ce formulaire, l'utilisateur doit pouvoir saisir une date dans une textbox, une valeur numérique dans une autre et même parfois, du texte dans une énième textbox, est-ce possible ?

Merci d'avance, c'est passionnant !

EDIT :
Je viens de me rendre compte que la deuxième partie du code...

'si la textbox ne contient aucune valeur, alors ne pas mettre à jour (rien)
If Not montant_compte1.Value = "" Then
'si la textbox ne contient pas de valeur numérique, alors msgbox et vider la textbox
If Not IsNumeric(montant_compte1.Value) Then
MsgBox "Saisir une valeur numérique", vbExclamation, "Erreur de saisie"
montant_compte1.Value = ""
montant_compte1.SetFocus
Exit Sub
End If
End If
' dans les autres cas, insérer cette valeur dans...
Sheets("Epargne").Range("B2").Value = montant_compte1
Unload Me
End Sub

...n'insère pas la valeur numérique de montant_compte1 dans la cellule B2. Je pense qu'il s'agit simplement de déplacer la ligne Sheets("Epargne").Range("B2").Value = montant_compte1 mais j'ai beau tenter de la remanier, je m'embrouille plus qu'autre chose !
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

RE troopers,

Ci-joint une version avec zones de texte à saisie délimitée selon la nature de données.

Pour y parvenir de façon fiable et simple à modifier si nécessaire , j'ai utilisé un module de classe. Comme tu te dépeins toi-même novice en VBA, ne me demande pas de t'en expliquer les détails, ce n'est pas d'une grande facilité à mettre en oeuvre. Il m'arrive encore moi-même de galérer pour mettre au point ce type de procédure. Sache simplement que ça évite une répétition de code dans chacun des contrôles et ça autorise de changer le nombre de ces contrôles sans modifier aucune ligne de code.

La saisie est parfaitement délimitée :

- 0 à 9 pour les chiffres (pas de caractères alphabétiques) pour les données chiffrées

- "." ou "," comme séparateur décimal pour les montants ou les pourcentage

- "/" comme séparateur de date

- n'importe quel caractères pour les données de texte

La tentative d'entrer un caractère interdit se solde par l'affichage d'un message d'alerte. Ce msgbox peut devenir lascant à l'usage et s'il faut le supprimer il n'y a qu'une seule ligne à supprimer dans le module de classe.

Je te laisse tester le fichier à ta guise.

Cordialement.
 

Pièces jointes

  • Copie de Gestion (1)-1.xlsm
    45.9 KB · Affichages: 389

troopers87

XLDnaute Occasionnel
Re : USERFORM Vérifier si la textbox est remplie avant d'insérer le contenu dans une

Grosse semaine de travail + weekend mouvementé = retard sur excel-download, 1000 fois pardon et 1000 fois merci pour toute l'attention que tu me portes.
Je garde cela sous le coude, mais dans l'attente, je ne suis pas sûr de l'utiliser directement : je préfère comprendre ce que j'utilise plutôt que de copier le code et ne pas être en mesure de l'adapter plus tard. Lorsque je serai à ton niveau, peut-être pourrai-je l'utiliser ? ;)
Merci encore et à bientôt ! ;)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel