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 11/08/2011, 11h59   #1
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
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 :
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
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 12h02   #2
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
Bonjour,
C'est ceci que tu veux ?
Code :
 Range("B5") = "Forum" & vbLf & "Excel"
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 13h17   #3
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
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).
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 13h26   #4
Membre régulier
 
Homme Florian
Étudiant
Inscription : mai 2011
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Florian
Âge : 21
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 44
Points : 73
Points : 73
Salut à toi. Une solution de ce genre te convient-il ?
Code :
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
Orhleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 15h50   #5
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
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):

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

Citation:
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.
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 17h09   #6
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
Bonjour,
Voici un petit code qui est une piste. C'est à remanier et à adapter selon tes besoins.
Code :
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
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 10h44   #7
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
Bien que je ne comprenne pas tout le code, il fonctionne bien pour la cellule A2.

Après modification et adaptation :
Code :
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
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h20   #8
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
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 :
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
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 12h25   #9
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
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 :
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 :
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
Chicard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 14h39   #10
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
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 :
Citation:
'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.
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 15h11   #11
Membre du Club
 
Homme
Inscription : janvier 2004
Messages : 239
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France

Informations forums :
Inscription : janvier 2004
Messages : 239
Points : 63
Points : 63
Envoyer un message via MSN à Chicard
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.
Chicard 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 10h55.


 
 
 
 
Partenaires

Hébergement Web