Controle des userforms

M

Mike

Guest
Bonjour à toutes et à tous.

Est ce possible de controler ce que l'on marque dans un userform?

Je cré à l'aide d'une macro un onglet à qui je donne un nom (à l'aide d'un userform).

Et j'aimerai controler ce que marque l'utilisateur, en effet, il ne doit pas rentrer un nom d'onglet qui existe déjà sinon ca fait planté la macro.

J'aimerai qu'une Msg se lance et marque 'nom invalide' et que ca me replace sur la textbox ou l'erreur c'est produite.

Merci d'avance pour toutes vos réponses.

Mike
 

sunnyland

XLDnaute Nouveau
Mike,

Essaie ca et fais moi savoir les resultats. Chez moi cela marche .
Tu peux copier-coller le code, dans ton userform j'ai ajoute quelques commentaires. Si tu as des questions ou quelque chose ne fonctionne pas dans ce code, fais moi le savoir

Bye
'============================
'fonction renvoie vrai si feuille existe ou faux cas echeant
'============================
Function existedeja(nomfeuille As String) As Boolean

Dim sheeti As Worksheet

'pour chaque feuille, verifie si le nom de code de la feuille ou nom d'onglet existe deja.

'car la feuille comporte un nom d'onglet et un nom de code qui peuvent etre different

' La fonction tranforme tout d'abord en majuscule UCase car apparemment le code distingue la casse.

For Each sheeti In ActiveWorkbook.Worksheets
If UCase(sheeti.CodeName) = UCase(TextBox1.Text) Or UCase(sheeti.Name) = UCase(TextBox1.Text) Then
existedeja = True
Exit Function
End If
Next
existedeja = False
End Function

'==========================
'lorsque tu as rentre ton nom dans la boite texte appele textbox1 dans ma solution lance la fonction existe deja si celle-ci renvoie vrai, le texte affiche est alors nom impossible
'==============================
Private Sub TextBox1_AfterUpdate()
Dim lenom As String
lenom = existedeja(TextBox1.Text)
If lenom = True Then
Msgbox ('Nom Invalide')
TextBox1.Text = 'nom invalide'
End If
End Sub
;)
 

JORDAN

XLDnaute Impliqué
Bonjour Sunnyland, Mike, le Forum,


Voici une petit code (que m'a donné Pascal76) à insérer dans le module de validation du nouveau nom de l'onglet.
NomOnglet = valeur ComboBox

Code:
Dim f As Worksheet
Dim NomOnglet as String
For Each f In Worksheets
    If f.Name = NomOnglet Then
        MsgBox ('Une feuille nommée - ' & NomFeuille & ' - existe déjà')
        Exit Sub
End If
Next

Bonne journée
 
M

Mike

Guest
Merci sunnyland et jordan.

J'ai essayé les deux, mais seul celui de sunnyland fonctionne chez moi.

J'en profite pour poser une autre question sur les userforms.

Code:
Private Sub CommandButton1_Click()
    
    'Controle que toutes les textbox ont été remplis sinon envoi un message
    If TextBox1 = '' Or TextBox2 = '' Or TextBox3 = '' Or TextBox4 = '' Or TextBox5 = '' Or TextBox6 = '' Then
    MsgBox 'Il faut remplir toutes les zones'
    'Controle les textboxs qui doivent contenir uniquement une valeur numérique
    ElseIf Not IsNumeric(TextBox5) Or Not IsNumeric(TextBox6)Then
    MsgBox 'Entrer un nombre'
    End If
    
    Range('A10') = TextBox1
    Range('B10') = TextBox2
    Range('C10') = TextBox3
    Range('D10') = TextBox4
    Range('E5') = TextBox5
    Range('F5') = TextBox6
    Unload Me
End Sub

Ca me permet de bien faire le controle mais par contre, quand il trouve une erreur, il me ferme l'userform et j'aimerai qu'il pointe sur la textbox ou il a trouvé le problème ou le premier problème (si y'en a plusieur).

Merci beaucoup.

Mike
 

porcinet82

XLDnaute Barbatruc
Bonjour a tous,

Je te propose le code suivant qui réalise ce que tu souhaites, si Hervé (que je salut au passage) passe dans le coin, il reconnaitra sont oeuvre, puisque je me suis tres largement inspiré du code qu'il a proposé Lien supprimé.

Donc voici ton code modifier :

Code:
Private Sub CommandButton1_Click()
Dim i As Byte, j As Byte

'Controle que toutes les textbox ont été remplis sinon envoi un message
For i = 1 To 6
    If Controls('textbox' & i) = '' Then
        MsgBox 'Il faut remplir toutes les zones'
        Controls('textbox' & i).SetFocus
        Exit Sub
    End If
Next i

'Controle les textboxs qui doivent contenir uniquement une valeur numérique
For j = 5 To 6
    If Not IsNumeric(Controls('textbox' & j)) Then
        MsgBox 'Entrer un nombre'
        Controls('textbox' & j).SetFocus
        Exit Sub
    End If
Next j
    
    Range('A10') = TextBox1
    Range('B10') = TextBox2
    Range('C10') = TextBox3
    Range('D10') = TextBox4
    Range('E5') = TextBox5
    Range('F5') = TextBox6
    Unload Me
End Sub

Sachant que tu pourrais également modifier la ligne suivante :
Code:
MsgBox 'Il faut remplir toutes les zones'
par
Code:
MsgBox 'Il faut remplir la zone ' & 'textbox' & i

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 446
Messages
2 088 492
Membres
103 870
dernier inscrit
didiexcel