Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J-Charles

XLDnaute Occasionnel
Bonsoir à tous,
Dans le fichier ci-joint, j'ai besoin de trier la colonne A par ordre croissant. Dans cette colonne A des cellules sont vides mais comportent un espace.
J'ai essayé de créer une macro (rattaché au bouton "Supprime Espace") afin déliminer ces espaces mais en vain.
Pour info, il est à noter que le contenu de ces cellules correspond à une récupération de données provenant d'Acces, rassemblé dans un fichier .Txt , celui-ci convertit en fichier Excel.
Quelqu'un aurait il une solution à me proposer ?
Je vous en remercie d'avance.
 

Pièces jointes

Re : Supprimer espace

Bonsoir JCGL,
Tout d'abord merci de te pencher sur mon problème. La macro que j'ai écrite ne supprime pas les espaces. Si tu vas dans une des cellules vides de la colonne A (de A2 à A9) et que tu fais une tabulation arrière le curseur se déplace vers la gauche.Ensuite lorsque je trie la colonne A s'il n'y avait pas d'espace dans les cellules, la première cellule en A correspondrait à celle de A10 actuellement. Mon pb étant que je récupère cette liste pour une ListBox et donc cela me crée une ligne vide dans le menu déroulant.
 
Re : Supprimer espace

Tu pourrais faire quelque chose comme ca :

Code:
Sub Macro9()
'
' Macro9 Macro
'

'
    Selection.CurrentRegion.Select
    Selection.Replace What:="*", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    ActiveWorkbook.Worksheets("Liste").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Liste").Sort.SortFields.Add Key:=Range("A2:A30"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Liste").Sort
        .SetRange Range("A1:A30")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
 
Re : Supprimer espace

Re...
Bien vu ! Il s'agit d'une espace insécable (code ASCII 160)
Code:
[COLOR="DarkSlateGray"][B]Sub SupprimeEspace()

    Dim Cellule As Range
    
    For Each Cellule In Range("A1:A40").Cells
         If Cellule.Value = Chr(160) Then Cellule.Value = Empty
    Next Cellule

End Sub[/B][/COLOR]
ROGER2327
#2449
 
Re : Supprimer espace

Re...
Bien vu ! Il s'agit d'une espace insécable (code ASCII 160)
Code:
[COLOR="DarkSlateGray"][B]Sub SupprimeEspace()

    Dim Cellule As Range
    
    For Each Cellule In Range("A1:A40").Cells
         If Cellule.Value = Chr(160) Then Cellule.Value = Empty
    Next Cellule

End Sub[/B][/COLOR]
ROGER2327
#2449

Bonjour Roger,

Pourriez-vous s'il vous plait, pour me rendre service, ajouter à votre code une petite merveille qui me demanderait, au moment de l'exécution de votre macro, dans quelle colonne je souhaite faire le ménage ? J'en trépigne à l'avance...

Merci !
 
Re : Supprimer espace

Re...
Essayez ceci :
Code:
[COLOR="DarkSlateGray"][B]Sub SupprimeEspace()
Dim Cellule As Range, c As Long
   On Error Resume Next
   c = InputBox("Quelle colonne ?")
   On Error GoTo 0
   If c And c <= Columns.Count Then
      If Not Intersect(UsedRange, Columns(c)) Is Nothing Then
         For Each Cellule In Intersect(UsedRange, Columns(c)).Cells
            If Cellule.Value = Chr(160) Then Cellule.Value = Empty
         Next Cellule
      End If
   End If
End Sub[/B][/COLOR]
La réponse à la demande Quelle colonne ? doit être un entier, comme vous le suggériez dans votre message privé de cet après-midi.
J'apprécie, au passage, le ton enjoué et dithyrambique de votre message...
...mais c'est peut-être beaucoup, non ?
Cordialement,
ROGER2327
#2790
 
Re : Supprimer espace

Bonjour Roger,

Un petit souci : lorsque j'exécute votre macro, le débogage s'arrête sur cette partie :

If Not Intersect(UsedRange, Columns(c)) Is Nothing Then

Qu'est-ce qui peut clocher à votre avis ?

Merci encore !

Soya
 
Re : Supprimer espace

Re...
Effectivement, le code proposé ne fonctionne que s'il est placé dans le module de la feuille qu'il est censé traiter.

Voici le code à placer dans un module standard pour traiter la feuille active (qui peut être n'importe quelle feuille du classeur) :
Code:
[COLOR="DarkSlateGray"][B]Sub SupprimeEspace()
Dim Cellule As Range, c As Long
   On Error Resume Next
   c = InputBox("Quelle colonne ?")
   On Error GoTo 0
   [COLOR="Red"]With ActiveSheet[/COLOR]
      If c And c <= [COLOR="Red"].[/COLOR]Columns.Count Then
         If Not Intersect([COLOR="Red"].[/COLOR]UsedRange, [COLOR="Red"].[/COLOR]Columns(c)) Is Nothing Then
            For Each Cellule In Intersect([COLOR="Red"].[/COLOR]UsedRange, [COLOR="Red"].[/COLOR]Columns(c)).Cells
               If Cellule.Value = Chr(160) Then Cellule.Value = Empty
            Next Cellule
         End If
      End If
   [COLOR="Red"]End With[/COLOR]
End Sub[/B][/COLOR]
On voit une fois de plus que la rédaction correcte du code dépend de l'endroit où on le place...​
ROGER2327
#2793
 
Re : Supprimer espace

Je comprends le principe, mais contrairement à ce que vous avez écrit, je n'y voyais rien... Ma compréhension de ce langage se compare à "My sister is not a boy" et "My taylor is rich"... si cela peut vous donner une idée... 😉

Merci !
 
Re : Supprimer espace

Re...
Mon commentaire était en effet un peu court.

Lorsque dans une procédure attachée à une feuille, on écrit, par exemple, UsedRange (=partie utilisée) sans préciser de quelle feuille il s'agit, VisualBasic "comprend" comme un grand qu'il s'agit certainement de la partie utilisée de la feuille dans laquelle est placé le code.

Mais si on écrit UsedRange dans un module standard, VisualBasic est incapable de savoir de quelle feuille il doit traiter la partie utilisée... ...et il bloque tout.
Il faut donc préciser à quelle feuille on pense lorsqu'on écrit UsedRange.
On doit donc écrire :
Sheets(1).UsedRange si on veut traiter la partie utilisée de la première feuille du classeur, ou encore
ActiveSheet.UsedRange si on veut traiter la partie utilisée de la feuille active au moment de l'exécution du code.

Voilà...
J'espère que c'est plus clair (?)​
ROGER2327
#2795
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

K
Réponses
10
Affichages
844
K
G
Réponses
4
Affichages
1 K
Gregoryen
G
S
Réponses
8
Affichages
2 K
S
4
  • Question Question
Réponses
6
Affichages
1 K
4
A
Réponses
4
Affichages
2 K
alkazaar
A
C
Réponses
3
Affichages
748
M
  • Question Question
Réponses
3
Affichages
1 K
MajIsh
M
G
Réponses
2
Affichages
656
G
M
Réponses
6
Affichages
2 K
Maryloo2005
M
Retour