Microsoft 365 Comment supprimer un espace entre deux chiffres ?

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 !

DenisHen

XLDnaute Junior
Bonjour à la communauté.
Aujourd'hui, je cherche corriger la saisie d'une dimension de rectangle.
Exemple, j'ai des textes qui contiennent (en autre) "blablabla 1 253mm x 2 411mm blablabla" mais j'aimerais uniformiser les différentes cotes, car parfois, c'est "blablabla 1 253mm x 2411mm blablabla" ou autre chose.
Voici un bel exemple :
01.3.2.53 Ensemble vitré, repère EV24 : 6 540x 2120mm Haut
Et pourquoi pas, en même temps, supprimer les espaces entre les "x" et les chiffres...
Sachant que la cellule peut contenir plusieurs cotes.

De plus, j'ai d'autres macros qui n'aiment pas ces espaces...
Je pense qu'il doit il y avoir un truc avec Like ou autre, mais je ne trouve pas.

J'ai écris un truc dans ce genre, mais j'ai des centaines de lignes dans mes feuilles Excel, et ça prends beaucoup trop de temps :
Code:
      For PouA = 0 To 9
        VarA = Trim(PouA)
        For PouB = 0 To 9
          VarB = Trim(PouB)
          Cells(Lign, 2).Value = Replace(Cells(Lign, 2).Value, PouA & " " & PouB, PouA & PouB)
        Next PouB
      Next PouA

Quelqu'un aurait une idée ?
Bien à toi la communauté.
Denis...
 
Solution
Bonjour DenisHen, vgendron, nullosse,

Avec la méthode Replace :
VB:
Sub Epure()
Dim i, j
With ActiveSheet.UsedRange
    While Application.CountIf(.Cells, "*  *")
        .Replace "  ", " ", xlPart 'doubles espaces
    Wend
    For i = 0 To 9
        .Replace i & " x", i & "x", xlPart, MatchCase:=False
        .Replace "x " & i, "x" & i, MatchCase:=False
        For j = 0 To 9
            .Replace i & " " & j, i & j
    Next j, i
End With
End Sub
A+
une proposition par macro qui présume que
1) les dimensions sont annoncées par le double point ":"
2) la dimension finit toujours par "Haut"
VB:
Sub SuppEsp()
    With ActiveSheet
        LastLine = .Range("B" & .Rows.Count).End(xlUp).Row
        For i = 3 To LastLine
            If Not .Range("B" & i) Like "Ph" & "*" Then
                If InStr(1, .Range("B" & i), ":") <> 0 And .Range("B" & i) <> "" Then
                    MsgBox i
                    NombreInit = Split(.Range("B" & i), ":")(1)
                    Nombre = Left(NombreInit, Len(NombreInit) - 4)
                    Nombre = WorksheetFunction.Substitute(Nombre, " ", "")
                    .Range("B" & i) = WorksheetFunction.Substitute(.Range("B" & i), NombreInit, Nombre & " Haut")
                End If
            End If
        Next i
    End With
End Sub
 
Merci @vgendron pour cette aide.
Petits soucis, le tableau que j'ai joins n'est qu'un petit extrait, le vrai fait plus de 300 lignes.
Car mon problème se situ dans la colonne B et C, les dimensions ne sont pas toujours annoncées par ":" et ne terminent pas toujours par "Haut".
D'où ma question : comment supprimer des espaces entre des chiffres ("...1 200 x 2 500...").
Et ma deuxième : pourquoi pas s'occupé aussi des espaces autour des "x" ("...800x 2150..." ou "...1 100 x650...").
Mais l'idée du Split n'est pas bête, je n'y avais pas pensé.
Encore merci pour l'aide.

Et je n'ai pas encore parlé des doubles espaces ! ! Mais je pense avoir résolu ce problème.

J'ai joins un nouveau fichier, c'est la première feuille, j'en ai d'autres mais pas plus utiles que celle-ci.

Denis.
 

Pièces jointes

Dernière édition:
pour l'annonce des dimensions.. quoique tu fasses, tu vas avoir besoin d'un séparateur SYSTEMATIQUE pour pouvoir l'utiliser pour séparer la chaine de caractères..

pour ta deuxième question: il me semble que ma proposition le fait..non?

autre question: comment est généré le fichier? peut etre est il plus simple d'imposer une syntaxe dès le début..
 
Bonjour DenisHen, vgendron, nullosse,

Avec la méthode Replace :
VB:
Sub Epure()
Dim i, j
With ActiveSheet.UsedRange
    While Application.CountIf(.Cells, "*  *")
        .Replace "  ", " ", xlPart 'doubles espaces
    Wend
    For i = 0 To 9
        .Replace i & " x", i & "x", xlPart, MatchCase:=False
        .Replace "x " & i, "x" & i, MatchCase:=False
        For j = 0 To 9
            .Replace i & " " & j, i & j
    Next j, i
End With
End Sub
A+
 

Pièces jointes

Merci à vous pour votre aide.
@nullosse : effectivement, je ne l'avais pas vu, merci.
@vgendron : je n'ai presque jamais de caractère qui annonce les dimensions (sachant que ces textes sont issus d'un document qu'on me donne). A vrai dire, je teste encore ton code (en l'adaptant au mien), et je ne comprend pas vraiment le Like "Ph" & "*".
Encore merci.
Denis.
 
Merci à vous pour votre aide.
@nullosse : effectivement, je ne l'avais pas vu, merci.
@vgendron : je n'ai presque jamais de caractère qui annonce les dimensions (sachant que ces textes sont issus d'un document qu'on me donne). A vrai dire, je teste encore ton code (en l'adaptant au mien), et je ne comprend pas vraiment le Like "Ph" & "*".
Encore merci.
Denis.
C'est pour éviter de traiter les lignes qui commencent par "Ph"
 
Effectivement, c'est bien @job75 qui a trouvé, bien que tout le monde m'a bien aidé, j'ai découvert d'autres trucs que je ne connaissais pas...

Mais je cherche comment faire pour que la macro ne s'applique qu'aux colonnes B et C ?

Un super grand merci à la communauté !

Denis...
 
Dernière édition:
- 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

Réponses
41
Affichages
5 K
Retour