IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

TextBox - remonter d'une ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 660
    Par défaut TextBox - remonter d'une ligne
    Bonjour,

    Si je saisie plus de 2 lignes dans le TextBox, le msgbox s'affiche mais le retour à la 3ème ligne est effectif et le texte copié dans la cellule [k6] est décalé vers le haut.
    Est-il possible d'annuler ce retour à la ligne en insérant quelque chose après le MsgBox ? (y a t-il quelque chose qui fasse le contraire d'un vbCrLf ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_Change()
        TextBox1.SetFocus 'essai
        If TextBox1.LineCount > 2 Then
            MsgBox "nombre de lignes atteint"
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Valider_Click()
        [k6] = TextBox1.Value
        Unload Me
    End Sub
    Merci d'avance pour votre aide,
    Cdt

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Est-il possible d'annuler ce retour à la ligne en insérant quelque chose après le MsgBox ? (y a t-il quelque chose qui fasse le contraire d'un vbCrLf ?)
    Le contraire? Non. Mais travailler en amont et ne pas mettre une troisième ligne ? Oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox1_Change()
      Static anc As String
      If TextBox1.LineCount > 2 Then TextBox1.Text = anc
      anc = TextBox1.Text
    End Sub
    Il est clair que si j'empêche une troisième ligne, je n'ai pas à "faire le contraire d'un vbcrlf"

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 660
    Par défaut
    Merci beaucoup !

    (J'ai dû ajouter TextBox1.SetFocus sinon ça génère une erreur)

    Maintenant, si je limite le nombre de caractères par lignes, j'ai bien 21 caractères pour la 1ère ligne mais 4 de moins pour la seconde !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub TextBox1_Change()
    Static anc As String
     
        TextBox1.SetFocus 'essai
     
        If Len(TextBox1.Value) / (TextBox1.LineCount) > 20 Then
            TextBox1.Value = TextBox1.Value & vbCrLf
        End If
     
        If TextBox1.LineCount > 2 Then
            TextBox1.Text = anc
            MsgBox "nombre de lignes atteint"
        End If
        anc = TextBox1.Text
     
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Euh ...
    Je vois mal (explique-moi cela) comment pourrait être déclenché l'évènement Change si la textbox n'a pas le focus

    Ou alors tu écris dans la textbox par code ? (tu n'en avais pas parlé) !

    En ce qui concerne le nombre de caractères par ligne :
    1) il n'a rien à voir avec ta demande initiale
    2) il dépend, pour une largeur graphique donnée (la propriété width de ta textbox) de la police de caractères utilisée et du texte qui l'utilise !
    Le seul moyen de faire en sorte qu'un même nombre de caractères différents utilise toujours la même largeur graphique est d'utiliser une police de caractères à échappement fixe.
    Bon. Je ne sais pas où tu vas ainsi, mais moi, je vais maintenant dormir.
    Bonne nuit

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 660
    Par défaut
    Bonne nuit !

    Bonjour,

    S'agissant d'une question subsidiaire, ça m'ennuyait d'ouvrir un autre fil... (mais merci encore pour la réponse à la question n°1)

    Pour les caractères, je tape exactement les mêmes et il y en a 4 de moins sur la deuxième ligne...

    Tout le code est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Sub Annuler_Click()
        Unload Me 'Vide et ferme le UserForm
    End Sub
    Private Sub Valider_Click()
        [k6] = TextBox1.Value
        Unload Me
    End Sub
    Private Sub Effacer_Click()
        With ActiveSheet.Range("k6")
            .MergeArea.ClearContents
        End With
    End Sub
    Private Sub UserForm_Initialize()
        Me.TextBox1 = ActiveSheet.[k6] 
        Label_Commentaire.Caption = "Inscrivez votre commentaire dans le cadre ci-dessous..." '& vbCrLf & "(Clic sur Entrée pour retour à la ligne)."
        Label_SautLigne.Caption = "(Clic sur Entrée pour retour à la ligne)."
    End Sub
    Private Sub TextBox1_Change()
    Static anc As String
     
        TextBox1.SetFocus 'essai
     
        If Len(TextBox1.Value) / (TextBox1.LineCount) > 20 Then
            TextBox1.Value = TextBox1.Value & vbCrLf
        End If
     
        If TextBox1.LineCount > 2 Then
            TextBox1.Text = anc
            MsgBox "nombre de lignes atteint"
        End If
        anc = TextBox1.Text
     
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Hola ...
    1) Ta demande est maintenant totalement différente de celle de départ .
    2) tu ne peux jouer avec la longueur du texte sans considérer celle de la constante vbcrlf (2 caractères)
    3) Est-ce finalement cela, que tu veux faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Static anc As String, L1 As Integer
        'TextBox1.SetFocus 'essai
       Select Case TextBox1.LineCount
          Case 1
     
            If Len(TextBox1) > 19 And Len(TextBox1.Text) < 21 Then
              TextBox1.Text = TextBox1.Text & vbCrLf
              L1 = 20
            Else
              L1 = Len(TextBox1.Text)
            End If
     
          Case 2
            If Len(TextBox1.Text) - L1 - 2 > 20 Then TextBox1.Text = anc
          Case Else
            TextBox1.Text = anc
       End Select
       anc = TextBox1.Text
    Si oui: j'appelle à nouveau très sérieusement ton attention sur le fait qu'à moins d'utiliser une police de caractères à espacement fixe, les deux lignes auront bien chacune 20 caractères, mais occuperont une largeur graphique différente si les caractères sont différents (c'est évident).

    Je refuse par ailleurs de traiter parallèlement le contenu de la cellule, pour plusieurs raisons :
    1) ce serait traiter deux problèmes distincts
    2) Excel gère son affichage dans les cellules de manière distincte de la manière dont cet affichage est géré dans une textbox, y compris pour une seule ligne.
    3) Excel est un tableur et non un traitement de texte
    4) Je vois que tu utilises des cellules fusionnées --->> ni utile (ce serait même plutôt nuisible), ni souhaitable.

    Voilà pour ce qui est de CETTE discussion.
    Elle est à libérer (tag résolu) si la difficulté (celle initiale) est résolue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/02/2011, 14h09
  2. Saisie textbox limitée sur une ligne ?
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/10/2010, 12h05
  3. [VB6]passer un textbox en dessous d'une ligne
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/05/2006, 15h45
  4. Remonter d'une ligne dans la console
    Par Pragmateek dans le forum C
    Réponses: 8
    Dernier message: 07/05/2006, 00h12
  5. remonter une ligne...
    Par youp_db dans le forum C++
    Réponses: 4
    Dernier message: 17/09/2005, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo