Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/09/2011, 20h34   #1
Invité de passage
 
Femme
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Par défaut Limiter nombre de ligne dans une texbox

Bonjour à tous,

voila je débute avec excel et les macros et je suis en train de créer un modèle de facture.
Dans cette facture jài fusionné 3 cellules pour faire une saisie d`observation si nécesaire.
J`ai créé une userform pour ouvrir une fenetre pour la saisie du texte qui en cliquant sur un bouton ajouter met le texte dans ma facture, dans les cellules fusionnées.
Mon problème est que je ne sais pas comment limiter le nombre de ligne de ma textbox à 6 lignes par exemple.

Merci de votre aide
loloduquebec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 23h03   #2
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

Voici un bout de code qui limite le nombre de lignes à 6 dans ta TextBox.

Code :
1
2
3
4
5
6
7
8
9
Dim Tampon1 As String
Private Sub TextBox1_Change()
    If Me.TextBox1.LineCount <= 6 Then
        Tampon1 = Me.TextBox1.Text
    Else
        MsgBox "Le nombre de lignes doit être inférieur à six"
        Me.TextBox1.Text = Tampon1
    End If
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 01h50   #3
Invité de passage
 
Femme
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Merci gFZT82,
ca fonctionne mais ca efface le texte des 6 premières lignes si je dépasse.
Voila ce que j`avais entré comme code, ou dois-je mettre ton code ?

Code :
1
2
3
4
5
6
7
8
Private Sub cmdajouter_Click()
'On active la feuille "facture"
Worksheets("facture").Activate
'On remplit les donnees dans notre tableau
ActiveSheet.Cells(51, 3) = txtobservation.Text
'On efface le formulaire
txtobservation.Text = ""
End Sub
Merci beaucoup de ton aide
loloduquebec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 08h12   #4
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Sur l'évènement KeyDown du TextBox :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
    If TextBox1.LineCount > 6 Then
 
        MsgBox "6 lignes au maximum sont autorisées !"
 
        'défini le nombre maximal de caractères admis ce qui
        'ensuite interdira toutes autres entrées de caractère
        TextBox1.MaxLength = Len(TextBox1.Text) - 1
 
        'vire le premier caractère de la ligne 7
        TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
 
        'si "KeyCode = 0" empèche par la suite la suppression de caractère dans la chaine
 
    End If
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 08h32   #5
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

Le code est celui du formulaire (Userform1).
Je pense que le code s'effaçait parce que tu n'avait pas bien positionné la variable globale Tampon1.
Essaie comme ça.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim Tampon1 As String
Private Sub cmdajouter_Click()
    'On active la feuille "facture"
    Worksheets("facture").Activate
    'On remplit les donnees dans notre tableau
    ActiveSheet.Cells(51, 3) = txtobservation.Text
    'On efface le formulaire
    txtobservation.SetFocus
    txtobservation.Text = ""
End Sub
Private Sub txtobservation_Change()
    If Me.txtobservation.LineCount <= 6 Then
        Tampon1 = Me.txtobservation.Text
    Else
        MsgBox "Le nombre de lignes doit être inférieur à six"
        Me.txtobservation.Text = Tampon1
    End If
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 18h40   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

A la base, tu ne peux pas raisonner sur le nombre de caractères plutôt ?

La propriété MaxLengh native des textbox t'éviterait une usine à gaz
Citation:
Spécifie le nombre maximal de caractères qu'un utilisateur peut taper dans un contrôle TextBox ou ComboBox.
La notion de ligne est relative de toutes manières vu qu'elle dépend de la largeur de ton textbox

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 01h12   #7
Invité de passage
 
Femme
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Merci à tous les 3.

- Ormonth, non j`ai vraiement besoin du nombre de ligne, le nombre de caractere ne suffit pas.

- Theze, le problème c`est que ca affiche le message mais ca autorise encore d`autres lignes.

- gFZT82, en placant ton code comme indiqué ca fonctionne mieux mais ca me donne une erreur 2185, impossible de lire la propriété LineCount, le contrôle doit avoir le focus.
Et le débogage me surligne cette ligne en jaune:
If Me.txtobservation.LineCount <= 6 Then

Merci encore à vous de m`aider.
loloduquebec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 07h15   #8
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Citation:
Theze, le problème c`est que ca affiche le message mais ca autorise encore d`autres lignes.
Alors là je suis surpris car une fois la propriété "MaxLength" défini, le TextBox n'accepte plus de caractère supplémentaire et dans mon code cette propriété est définie aux nombre de caractères qui sont contenus dans les six premières lignes et la ligne de code suivante retire le caractère inscrit dans la ligne 7 (celui qui a déclenché la condition à True).
Sur mes tests, après six lignes il ne m'est plus possible d'en rajouter et le caractère de la ligne 7 est bien viré ???

Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 10h09   #9
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,


J’ai modifié le code afin de forcer le positionnement du focus dans la TextBox (txtobservation.SetFocus) avant le contrôle du nombre de lignes.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim Tampon1 As String
Private Sub cmdajouter_Click()
    'On active la feuille "facture"
    Worksheets("facture").Activate
    'On remplit les donnees dans notre tableau
    ActiveSheet.Cells(51, 3) = txtobservation.Text
    'On efface le formulaire
    Me.txtobservation.Text = ""
End Sub
Private Sub txtobservation_Change()
    txtobservation.SetFocus
    If Me.txtobservation.LineCount <= 6 Then
        Tampon1 = Me.txtobservation.Text
    Else
        MsgBox "Le nombre de lignes doit être inférieur à six"
        Me.txtobservation.Text = Tampon1
    End If
End Sub
Nota : j'ai également essayé avec le code de Theze et je n'ai pas constaté d'anomalie.

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h21   #10
Invité de passage
 
Femme
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Bonjour,

merci beaucoup gFZT82, ça fonctionne impécablement bien.

Theze, je vais ré essayer et je te dirai, j`ai peut être mal positionné le code.

Merci encore de votre aide.
loloduquebec est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h16.


 
 
 
 
Partenaires

Hébergement Web