XL 2013 VBA supprimer Les espaces avant un retour chariot

Tiger75

XLDnaute Nouveau
Bonjour,
Je cherche un code en VBA qui me permettrait de supprimer les espaces avant un retour chariot,
exemple dans ma cellule j'ai :
France" "
ET
Espagne" "AND" "Portugal

je voudrai supprimer le " " avant le ET
Afin d'avoir
France
ET
Espagne" "AND" "Portugal
 

vgendron

XLDnaute Barbatruc
Hello Pierre Jean,
désolé pour la collision
du coup.. on peut sans doute remplacer cette ligne de mon code
tablo(0) = Left(tablo(0), Len(tablo(0)) - 1)
par ton code
tablo(0)=trim(tablo(0))

bonjour

essai avec la fonction Split
avec ce code, si ton texte est en A7
VB:
Sub sup()

tablo = Split(Range("A7"), Chr(10))
'MsgBox tablo(0)
tablo(0) = Left(tablo(0), Len(tablo(0)) - 1)
'MsgBox tablo(0)
For i = UBound(tablo) To 0 Step -1
    chaine = tablo(i) & Chr(10) & chaine
Next i
Range("A7") = chaine
End Sub
 

vgendron

XLDnaute Barbatruc
Re..
Normalement. ca fonctionne. chez moi..
VB:
Sub sup()

tablo = Split(Range("A7"), Chr(10)) 'on sépare le texte de la cellule A7, avec retour chariot comme séparateur
tablo(0) = Trim(tablo(0)) 'on enlève les espaces dans le premier élément du tablo: donc ici.. "FRANCE " qui devien "FRANCE"
'et on reassemble la chaine en remettant des retours chariots
For i = UBound(tablo) To 0 Step -1
    chaine = tablo(i) & Chr(10) & chaine
Next i
Range("A7") = chaine 'on réécrit la chaine
End Sub


Sub sup2()

tablo = Split(Range("A7"), Chr(10)) 'on sépare le texte de la cellule A7, avec retour chariot comme séparateur
For i = UBound(tablo) To 0 Step -1
    chaine = Trim(tablo(i)) & Chr(10) & chaine
Next i
Range("A7") = chaine 'on réécrit la chaine
End Sub
si tu souhaites supprimer les espaces de CHAQUE ligne./. voir sup2

sinon. avec ton fichier exemple.. ce sera plus pratique..
 

vgendron

XLDnaute Barbatruc
bah en fait. dans ton code. tu as oublié une ligne importante...:)

VB:
Sub Bouton()
Dim str_temp As String
Dim tab_str_temp() As String
Dim iNbLigneDci As Integer

iNbLigneDci = Application.WorksheetFunction.CountA(Columns(2)) - 1

   
    For i = 3 To iNbLigneDci + 3
        str_temp = Cells(i, "R")
        tab_str_temp = Split(str_temp, Chr(10))
        For j = 0 To UBound(tab_str_temp)
            chaine = Trim(tab_str_temp(j)) & Chr(10) & chaine
        Next j
    Next i
    Cells(i, "R") = chaine 'on remet le resultat dans la cellule
End Sub
 

vgendron

XLDnaute Barbatruc
??
ce code avec ton fichier ne me donne plus d'espace en fin de ligne...
VB:
Sub Bouton()
Dim str_temp As String
Dim tab_str_temp() As String
Dim iNbLigneDci As Integer

'iNbLigneDci = Application.WorksheetFunction.CountA(Columns(2)) - 1
iNbLigneDci = Range("R" & Rows.Count).End(xlUp).Row - 2
   
    For i = 3 To iNbLigneDci + 2
        chaine = ""
        tab_str_temp = Split(Cells(i, "R"), Chr(10))
        For j = UBound(tab_str_temp) To 0 Step -1
            chaine = Trim(tab_str_temp(j)) & Chr(10) & chaine
        Next j
        Cells(i, "R") = chaine 'la chaine se termine toujours par un retour chariot...
    Next i
   
End Sub
 

vgendron

XLDnaute Barbatruc
et donc ce code pour supprimer le dernier retour chariot
VB:
Sub Bouton()
Dim str_temp As String
Dim tab_str_temp() As String
Dim iNbLigneDci As Integer

'iNbLigneDci = Application.WorksheetFunction.CountA(Columns(2)) - 1
iNbLigneDci = Range("R" & Rows.Count).End(xlUp).Row - 2
   
    For i = 3 To iNbLigneDci + 2
        chaine = ""
        tab_str_temp = Split(Cells(i, "R"), Chr(10))
        For j = UBound(tab_str_temp) To 0 Step -1
            chaine = Trim(tab_str_temp(j)) & Chr(10) & chaine
        Next j
        Cells(i, "R") = Left(chaine, Len(chaine) - 1) 'on supprime le dernier retour chariot
    Next i
End Sub
 

Tiger75

XLDnaute Nouveau
Merci 1000 fois , j'ai une toute dernière requête, imaginons que il y a déjà plusieurs retour chariot à la fin de la cellule, ou bien au début de la cellule, y a t'il un moyen de les supprimer ? ( juste ceux qui sont après et avant l'expression) comme ici :
 

Pièces jointes

  • test.xlsm
    23.6 KB · Affichages: 44

vgendron

XLDnaute Barbatruc
Avec ceci je pense.. à tester sur toutes les possibilités que tu peux avoir..
des retours chariots consécutifs avant, après, au milieu....
VB:
Sub Bouton()
Dim str_temp As String
Dim tab_str_temp() As String
Dim iNbLigneDci As Integer

 iNbLigneDci = Range("R" & Rows.Count).End(xlUp).Row - 2
   
     For i = 3 To iNbLigneDci + 2
         chaine = ""
         tab_str_temp = Split(Cells(i, "R"), Chr(10))
         For j = UBound(tab_str_temp) To 0 Step -1
             If tab_str_temp(j) <> "" Then chaine = Trim(tab_str_temp(j)) & Chr(10) & chaine
         Next j
         Cells(i, "R") = Left(chaine, Len(chaine) - 1) 'on supprime le dernier retour chariot
     Next i
End Sub
 

Tiger75

XLDnaute Nouveau
Code:
Sub Bouton()
Dim str_temp As String
Dim tab_str_temp() As String
Dim iNbLigneDci As Integer

'iNbLigneDci = Application.WorksheetFunction.CountA(Columns(2)) - 1
iNbLigneDci = Range("R" & Rows.Count).End(xlUp).Row - 2
    str_temp = Cells(i, "R")
     For i = 3 To iNbLigneDci + 2
         chaine = ""
         tab_str_temp = Split(Cells(i, "R"), Chr(10))
        For j = UBound(tab_str_temp) To 0 Step -1
             chaine = Trim(tab_str_temp(j)) & Chr(10) & chaine
        Next j
        If str_temp = "" Then
            i = i + 1
        End If
        
         Cells(i, "R") = Left(chaine, Len(chaine) - 1) 'on supprime le dernier retour chariot
     Next i
End Sub
je me permets de relancer le sujet ... le code ne fonctionne plus quand on a des cellule vide, et lorsque c'est le cas j'aimerai passer à la cellule suivante
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma