Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pourquoi ma deuxième boucle while ne marche pas

9 réponses
Avatar
\(Francois\)
ARGHHH ! HELP ! ça fait deux heures de galère sur ce truc !

Je débute en VB et j'essaye d'écrire une macro pour supprimer les espaces
*et* les sauts de ligne en début et fin de textes, contenus dans des
cellules excel (sans rien supprimer au milieu des textes).

Quand je lance la macro ci-dessous, la première boucle while fonctionne et
supprime les sauts de ligne chr(10) en début de cellule. La fonction trim
fonctionne aussi et supprime les espaces en début et fin de cellule. Mais
la deuxième boucle while ne fonctionne pas.
Si je relance la même macro sur la cellule modifiée, la deuxième boucle
while fonctionne et supprime comme prévu les sauts de ligne en fin de
cellule...

Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub

Si vous avez une autre méthode ça m'intéresse bien sûr, mais j'aimerais
pour ne pas mourir idiot comprendre mon erreur... Merci d'avance :-))

9 réponses

Avatar
Rai
ARGHHH ! HELP ! ça fait deux heures de galère sur ce truc !

Je débute en VB et j'essaye d'écrire une macro pour supprimer les espaces
*et* les sauts de ligne en début et fin de textes, contenus dans des
cellules excel (sans rien supprimer au milieu des textes).

Quand je lance la macro ci-dessous, la première boucle while fonctionne et
supprime les sauts de ligne chr(10) en début de cellule. La fonction trim
fonctionne aussi et supprime les espaces en début et fin de cellule. Mais
la deuxième boucle while ne fonctionne pas.
Si je relance la même macro sur la cellule modifiée, la deuxième boucle
while fonctionne et supprime comme prévu les sauts de ligne en fin de
cellule...

Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub

Si vous avez une autre méthode ça m'intéresse bien sûr, mais j'aimerais
pour ne pas mourir idiot comprendre mon erreur... Merci d'avance :-))

Bonsoir,


Je n'ai pas compris l'utilité de l'emploi de boucles dans ton cas.
Si j'ai bien compris, tu veux supprimer le 1er saut de ligne et le
dernier, s'ils existent.

Dans ce cas, je propose

Sub mon_menage()
For Each cellule In Selection

texte = cellule.Value

If Right(texte, 1) = Chr(10) Then texte = Left(texte,
Len(texte) - 1)
If Left(texte, 1) = Chr(10) Then texte = Right(texte,
Len(texte) - 1)

texte = Trim(texte)

cellule.Value = texte

Next cellule
End Sub

Ca convient ?

Rai

Avatar
\(Francois\)
Je n'ai pas compris l'utilité de l'emploi de boucles dans ton cas.




C'est qu'il peut y avoir un ou plusieurs sauts de ligne, au début ou à la
fin, et que je ne veut pas modifier ce qui est en milieu de texte.

Mais POURQUOI DIABLE que ça marche pas mon truc ?



Avatar
michdenis
Bonjour François,

Si l'objectif de ta procédure est :
A ) enlever les espaces au début et à la fin du texte de tes cellules
B ) enlever les Chr(10) dans le texte

Ceci devrait être suffisant :
'-------------
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Substitute(c, Chr(10), ""))
Next
End If
'-------------


Salutations!



"(Francois)" a écrit dans le message de news: 44218900$0$23113$
ARGHHH ! HELP ! ça fait deux heures de galère sur ce truc !

Je débute en VB et j'essaye d'écrire une macro pour supprimer les espaces
*et* les sauts de ligne en début et fin de textes, contenus dans des
cellules excel (sans rien supprimer au milieu des textes).

Quand je lance la macro ci-dessous, la première boucle while fonctionne et
supprime les sauts de ligne chr(10) en début de cellule. La fonction trim
fonctionne aussi et supprime les espaces en début et fin de cellule. Mais
la deuxième boucle while ne fonctionne pas.
Si je relance la même macro sur la cellule modifiée, la deuxième boucle
while fonctionne et supprime comme prévu les sauts de ligne en fin de
cellule...

Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub

Si vous avez une autre méthode ça m'intéresse bien sûr, mais j'aimerais
pour ne pas mourir idiot comprendre mon erreur... Merci d'avance :-))
Avatar
michdenis
Et pour ne pas modifier "le milieu" du texte :


If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Clean(c))
Next
End If


Salutations!



"michdenis" a écrit dans le message de news: %23yfx%
Bonjour François,

Si l'objectif de ta procédure est :
A ) enlever les espaces au début et à la fin du texte de tes cellules
B ) enlever les Chr(10) dans le texte

Ceci devrait être suffisant :
'-------------
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Substitute(c, Chr(10), ""))
Next
End If
'-------------


Salutations!



"(Francois)" a écrit dans le message de news: 44218900$0$23113$
ARGHHH ! HELP ! ça fait deux heures de galère sur ce truc !

Je débute en VB et j'essaye d'écrire une macro pour supprimer les espaces
*et* les sauts de ligne en début et fin de textes, contenus dans des
cellules excel (sans rien supprimer au milieu des textes).

Quand je lance la macro ci-dessous, la première boucle while fonctionne et
supprime les sauts de ligne chr(10) en début de cellule. La fonction trim
fonctionne aussi et supprime les espaces en début et fin de cellule. Mais
la deuxième boucle while ne fonctionne pas.
Si je relance la même macro sur la cellule modifiée, la deuxième boucle
while fonctionne et supprime comme prévu les sauts de ligne en fin de
cellule...

Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub

Si vous avez une autre méthode ça m'intéresse bien sûr, mais j'aimerais
pour ne pas mourir idiot comprendre mon erreur... Merci d'avance :-))
Avatar
\(Francois\)
Et pour ne pas modifier "le milieu" du texte :
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Clean(c))
Next
End If





Merci de tout coeur pour vos réponse mais...

Clean() efface les sauts de ligne dans le milieu du texte.

Personne ne voit pourquoi mon code ci-dessous ne fonctionne pas ? J'ai
fait sûrement une grosse erreur de débutant genre variable mal déclarée,
pas mise à jour ??? pourquoi la deuxième boucle while semble ne pas
s'éxécuter quand la première s'éxécute ?


Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub



Avatar
Clément Marcotte
Bonjour,

Si ta fin de ligne de droite n'est pas le dernier caractère du texte, tu
dois tester un nombre plus grand que 1. Moi je commencerais par TRIMer le
texte avant de chercher les marques de fin de ligne. Mais comme personne ne
voit tes vraies cellules, difficile de voir ce qui ne vas pas.


"(Francois)" a écrit dans le message de news:
4421accd$0$29743$
Et pour ne pas modifier "le milieu" du texte :
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Clean(c))
Next
End If





Merci de tout coeur pour vos réponse mais...

Clean() efface les sauts de ligne dans le milieu du texte.

Personne ne voit pourquoi mon code ci-dessous ne fonctionne pas ? J'ai
fait sûrement une grosse erreur de débutant genre variable mal déclarée,
pas mise à jour ??? pourquoi la deuxième boucle while semble ne pas
s'éxécuter quand la première s'éxécute ?


Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub






Avatar
Clément Marcotte
P.S. Fais attention avec TRIM(). Cette fonction est inconnue sur VBA pour
Office 97.


"(Francois)" a écrit dans le message de news:
4421accd$0$29743$
Et pour ne pas modifier "le milieu" du texte :
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Clean(c))
Next
End If





Merci de tout coeur pour vos réponse mais...

Clean() efface les sauts de ligne dans le milieu du texte.

Personne ne voit pourquoi mon code ci-dessous ne fonctionne pas ? J'ai
fait sûrement une grosse erreur de débutant genre variable mal déclarée,
pas mise à jour ??? pourquoi la deuxième boucle while semble ne pas
s'éxécuter quand la première s'éxécute ?


Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub






Avatar
Clément Marcotte
P.P.S. TRIM() ne trime pas non plus le caractère 160 qui pullule sur les
sites Web.


"(Francois)" a écrit dans le message de news:
4421accd$0$29743$
Et pour ne pas modifier "le milieu" du texte :
If TypeName(Selection) = "Range" Then
For Each c In Selection
c.Value = Trim(Application.Clean(c))
Next
End If





Merci de tout coeur pour vos réponse mais...

Clean() efface les sauts de ligne dans le milieu du texte.

Personne ne voit pourquoi mon code ci-dessous ne fonctionne pas ? J'ai
fait sûrement une grosse erreur de débutant genre variable mal déclarée,
pas mise à jour ??? pourquoi la deuxième boucle while semble ne pas
s'éxécuter quand la première s'éxécute ?


Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(texte, 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(texte, 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub






Avatar
\(Francois\)
Moi je commencerais par Trimer le texte avant de chercher les marques
de fin de ligne




BINGO !

J'avais essayé une version avec un trim() avant les deux boucles, mais
effectivement... la boucle s'arrêtait sur un espace... Bref avec le code
ci-dessous, en rajoutant un trim() à chaque itération avant de chercher le
caractère 10, ça marche !

Clément Marcotte, MERCI MERCI MERCI !!! :-)))


Sub mon_menage()
For Each cellule In Selection
texte = cellule.Value

While (Asc(Left(Trim(texte), 1)) = 10)
texte = Right(texte, (Len(texte) - 1))
Wend

While (Asc(Right(Trim(texte), 1)) = 10)
texte = Left(texte, (Len(texte) - 1))
Wend

cellule.Value = Trim(texte)

Next
End Sub