Supprimer espaces d'une cellule

[Résolu]
Signaler
Messages postés
7
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour,

J'au une colonne d'une feuille Excel contenant différents nombres. Parfois, des cellues contiennent, en plus du nombre, un certain nombre d'espaces derrière. Je souhaiterais supprimer ces espaces en créant un programme Visual Basic les supprimant automatiquement. Comment faire ?

6 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,

>[../auteur/MARCOLEVRAI858/1476670.aspx marcolevrai858] :Si tu estimes que ton problème est résolu,
penses à appuyer sur réponse acceptée sur le OU les posts qui t'ont aider à avancer. (Meme si ici c'est l'un des tiens)

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
40
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
21 janvier 2010
3
tu as une fonction qui s'appele Trim.
ca doit donner un truc du genre :
monResultat=trim(mavaleur)

Meldur
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

Bonjour,

Sinon, sans code, il y a la fonction SUPPRESPACE dans la catégorie des fonctions texte de EXCEL.. La programmation est-elle indispensable quand des fonctions de ce type existent ? Voilà une question qui mérite débat.
En cas de programmation je répond comme Meldur74
exemple
 
   Range("C1").FormulaR1C1 = "=TRIM(RC[-2])" (c'est la fonction SUPPRESPACE transformée en VB)

thierry la fronde
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

Thierry la fronde : suprespace en anglais ce dit trim ! mais par contre je suis d'accord qu'une formule + l'autofill d'excel  + un copier coller ferait l'affaire
Mais le probleme du trim c'est qu'il ne supprime pas les espace entre les mots ou entre les chiffres. Pour etre plus radicale j'utiliserais la fonction substitution.

Et comme on est sur un site de programation :

Sub SupprimerEspace()
    'les variables:
    Dim MaFormule As String, RefDeMaChaine As String, Premierligne As Long
    Dim DerniereLigne As Long, Maplage As Range, ColonneResultat As String
   
    Application.ScreenUpdating = False
    Premierligne = 1 ' ou premierligne correspond a la premiere ligne de la plage de cellule dans les quelles on doit virer les espaces
    ColonneResultat = "K"
    MaFormule = "=SUBSTITUTE(" 'la formule commence ici
   
    RefDeMaChaine = Columns("A").Rows(Premierligne).Address(RowAbsolute:=False)
            ' si la premiere ligne = 14, sans l'option RowAbsolute:=False le resultat
            ' pour la premier colonne serait $A$14
            ' Mais avec cette option, le resultat est $A14. ceci prepare notre formule a la fonction l'Autofill
    MaFormule = MaFormule & RefDeMaChaine
    MaFormule = MaFormule & ",Char(32)," & """"")" 'char(32) correspond a un espace

    'on recherche la derniere ligne de la plage de cellules a concatener sur la colonne A
    DerniereLigne = Columns("A").Find("*", , , , xlByRows, xlPrevious).Row
   
    'on determine la plage de cellules qui doit contenir le resultat de concatenation
    Set Maplage = Range(ColonneResultat & Premierligne & ":" & ColonneResultat & DerniereLigne)
   
    'on pose la formule dans la premiere cellule la colonne de resultat
    Range(ColonneResultat & Premierligne).FormulaLocal = MaFormule
   
    'on copie la formule sur toute la plage de resultat par la fonction autofil d'excel
    Range(ColonneResultat & Premierligne).AutoFill Destination:=Maplage, Type:=xlFillDefault
   
    'copy de la colonne de resultat
    Maplage.Copy
   
    'on ecrase la colonne source par les valeurs de la colonne resultat
    Range("A" & Premierligne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Maplage.ClearContents
    Application.ScreenUpdating = True
End Sub

Cette methode peut paraitre bien compliquée mais en faite elle est beaucoup plus rapide qu'une methode par boucle for/next ou autre

Attention j'utilise une version anglaise donc il est possible que tu es des dificultés.  Normalement cela ne devrait pas etre le cas car j'en ai tenu compte

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
a oui j'oubliais :

pas dans le bon theme ! pour le VBA c'est ici :

Thèmes / [forum-VISUAL-BASIC_1.aspx Visual Basic 6] / [theme-LANGAGES-DERIVES_287.aspx Langages dérivés] / [theme-VBA_244.aspx VBA] /

desolé PCPT encore du boulot pour toi
Messages postés
7
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
16 juillet 2010

Bonjour,

Je vous remercie pour votre aide. J'ai finalement réussi en remplaçant les espaces par rien dans Edition/Remplacer sur Excel et j ai enregistré la macro.