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 :

écriture dans une cellule avec retour à la ligne [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut écriture dans une cellule avec retour à la ligne
    Bonjour,

    la situation : j'ai fait un textbox d'une taille de 24 caractères (taille réglé en tapant 24 caractères)

    Effet recherché : chaque 24 caractères mon textobx renvoi à la ligne et les mots sont insécables. Je voudrais avoir la même chose dans ma cellule.

    Problèmes: quelle est la "propriété" (pas forcément le bon terme) du textbox à utiliser. J'ai essayé l'exit, le keypress et le change mais je me retrouve avec une erreur de compil.

    Voilà le code qui ne fonctionne pas (je pense que la ligne est bonne mais pas l'appel de la textox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TextBox_objet_marche_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    If Len(TextBox_objet_marche) = 24 Then vbLf
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est ceci que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("B5") = "Forum" & vbLf & "Excel"

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Oui à ceci près que je passe par une textbox qui sera rempli par l'utilisateur.

    La cellule à remplir est déjà défini ailleurs. Ce que je cherche en plus de ce que tu viens de donner (& vblf &) c'était faire ça de façon automatique quand je valide ma box et ce tout les 24 caractères ( je dois pouvoir peut-être passé par une variable).

  4. #4
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Salut à toi. Une solution de ce genre te convient-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim TexteAvecRetour As String, Texte As String
    Texte = TA_TEXTBOX.Text
    TexteAvecRetour = vbNullString
    Do While Len(Texte) > 24
        TexteAvecRetour = TexteAvecRetour & Left(Texte, 24) & vbLf
        Texte = Right(Texte, Len(Texte) - 24)
    Loop
    TexteAvecRetour = TexteAvecRetour & Texte
    'Et te voilà avec dans la variable TexteAvecRetour ton texte que tu peux mettre dans une cellule

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    ce que je cherchais avant tout c'était ce qu'il y avait derrière Private Sub TextBox_objet_marche_exit( ou keypress, ...)

    Sinon ce code fonctionne et mets la valeur dans ma cellule mais celle-ci est affiché sur une seule ligne.

    Voilà ce que j'obtiens actuellement (version schématique le cadre de la citation représentant une cellule):

    fourniture de carte de visite et de correspondance
    Voilà ce que je voudrais obtenir (version schèmatique):

    fourniture de carte de
    visite et de
    correspondance
    En fait c'est écrire plusieurs lignes dans la même cellule en passant par une textbox qui se trouve dans un formulaire.

    La création d'une nouvelle ligne étant la combinaison par Alt+Entrée lorsque qu'on est déjà dans une cellule.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un petit code qui est une piste. C'est à remanier et à adapter selon tes besoins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Const nbcar As Integer = 24
      Const myString As String = "fourniture de carte de visite et de correspondance"
      Dim table() As String, x As Integer, txt As String, t As String
      table = Split(myString)
      While x <= UBound(table)
        If Len(t & Chr(32) & table(x)) < nbcar Then
            t = t & table(x) & Chr(32): x = x + 1
          Else
            txt = txt & Trim(t) & vbLf:  t = table(x) & Chr(32): x = x + 1
        End If
      Wend
      txt = txt & Trim(t)
      Range("A2") = txt

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Bien que je ne comprenne pas tout le code, il fonctionne bien pour la cellule A2.

    Après modification et adaptation :
    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
    Const nbcar As Integer = 24
      Dim myString As String
        myString = TextBox_objet_marche.Text
     
      Dim table() As String, x As Integer, txt As String, t As String
     
      table = Split(myString)
      While x <= UBound(table)
        If Len(t & Chr(32) & table(x)) < nbcar Then
            t = t & table(x) & Chr(32): x = x + 1
          Else
            txt = txt & Trim(t) & vbLf:  t = table(x) & Chr(32): x = x + 1
        End If
      Wend
      txt = txt & Trim(t)
    TextBox_objet_marche.Text = txt
    Et là il me met mon texte dans la cellule désignée et non figée

    merci

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'est-ce que tu ne comprends pas.
    Tu peux faire une fonction du code que je t'ai envoyé. C'est mieux pour la maintenance et pour la clarté de ton code.
    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
    Function TxtMultiLine(Text As String, Optional nbCar As Integer = 24) As String
      Dim table() As String, x As Integer, txt As String, t As String
      table = Split(Text)
      While x <= UBound(table)
        If Len(t & Chr(32) & table(x)) < nbCar Then
            t = t & table(x) & Chr(32): x = x + 1
          Else
            txt = txt & Trim(t) & vbLf:  t = table(x) & Chr(32): x = x + 1
        End If
      Wend
      TxtMultiLine = txt & Trim(t)
    End Function
    Sub Test()
      Const myString As String = "fourniture de carte de visite et de correspondance"
      Range("A5") = TxtMultiLine(myString, 15)
    End Sub
    Le deuxième argument n'est pas obligatoire et est égal à 24 par défaut

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    Disons que j'aime bien mettre des commentaires (pour les gens qui peuvent arriver derrière moi et puis c'est parfois utile).

    voilà mon code qui fonctionne aussi et qui est plus que largement inspiré de celui que tu as posté il y a deux messages de ça:
    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
    34
    Private Sub TextBox_objet_marche_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        'Nombre de caractère maximum sur la ligne de la cellule rentré dans une constante
        Const nbcar As Integer = 24
     
        'Création d'une chaine pour contenir le texte de la textbox
        Dim myString As String
     
        'Création de paramètres
        Dim table() As String, x As Integer, txt As String, t As String
     
        'Enregistrement du contenu de la textbox dans la chaine myString
        myString = TextBox_objet_marche.Text
     
        'Enregistrement de la chaine myString dans un tableau
        table = Split(myString)
     
        'Traitement de la chaine dans le tableau
        While x <= UBound(table)
            If Len(t & Chr(32) & table(x)) < nbcar Then
                t = t & table(x) & Chr(32): x = x + 1
            Else
                txt = txt & Trim(t) & vbLf:  t = table(x) & Chr(32): x = x + 1
            End If
        Wend
     
        'Supression des espace avant et après la chaine
        txt = txt & Trim(t)
     
        'Remise de la chaine dans la variable textbox.text pour intégration dans
        'la dernière ligne du fichier par l'appel fait plus haut
        TextBox_objet_marche.Text = txt
     
    End Sub
    J'aimerais juste savoir si les commentaires sont justes et des explications sur ce morceau (le pourquoi du comment):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    table = Split(myString)
     
        'Traitement de la chaine dans le tableau
        While x <= UBound(table)
            If Len(t & Chr(32) & table(x)) < nbcar Then
                t = t & table(x) & Chr(32): x = x + 1
            Else
                txt = txt & Trim(t) & vbLf:  t = table(x) & Chr(32): x = x + 1
            End If
        Wend

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fonction Split permet de scinder une chaîne de caractères et place chaque mot dans une variable dimensionnée (ici Table). (Voir l'explication ici)
    La fonction UBound() renvoie l'indice maximum du tableau. (Voir ici)
    La fonction chr() transforme un code ASCII en caractère. Ainsi le code ASCII 32 représente l'espace. On écrit t = t & " " ou t = t & chr(32)
    La fonction TRIM() supprime les espaces avant et arrière d'une chaîne de caractères.

    Pour bien comprendre, comment fonctionne cette fonction, je te conseille de la faire tourner Pas à Pas touche raccourcis (F9) en plaçant des espions.

    Comme je te l'ai écrit plus haut, il serait préférable pour la maintenance et la clarté de ta procédure d'utiliser la procédure que je t'ai donné comme une fonction. Je t'ai laissé le code complet avec une procédure Test.

    Pour tes commentaires :
    'Création de paramètres
    Dim table() As String, x As Integer, txt As String, t As String
    J'écrirais - Déclaration des variables
    Pour le reste, les commentaires, c'est très personnel. L'important c'est que la personne qui les lit, les comprenne.

    ps : Avec un peu de temps, il y aurait moyen de raccourcir encore le code.

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Points : 95
    Points
    95
    Par défaut
    OK.

    Merci et pour la fonction on verra plus tard si je m'y colle ou pas mais c'est intéressant d'avoir un code comme ça sous le coude.

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

Discussions similaires

  1. [XL-2010] vba écriture d'un formule IF dans une cellule avec test <>""
    Par Nicolas1977 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/05/2015, 18h10
  2. Réponses: 4
    Dernier message: 02/06/2007, 12h35
  3. Forcé un type d'écriture dans une cellule
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2006, 11h05
  4. [CSS] espace dans les li avec retour à la ligne
    Par grinder59 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 04/07/2006, 11h00
  5. [html] insertion d 1 image dans une cellule avec taille en %
    Par hijodelanoche dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 19/01/2006, 00h50

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