Microsoft 365 Mise en forme des cellules (Résolu)

  • Initiateur de la discussion Initiateur de la discussion Le Rouky
  • Date de début Date de début

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 !

Le Rouky

XLDnaute Nouveau
Le forum bonsoir,

j'utilise le code ci dessous pour organiser l'intérieur de mes cellules de la colonne "J" depuis la ligne 2 jusqu'à la fin du tableau.
pour faire simple,
je supprime :
- les espaces,
- la lettre "P" si elle est au début,
- mettre un espace entre le premier et le second caractère ( pas bon si c'est deux lettres consecutives)

je voudrai mettre :
- un espace entre les lettres et les chiffres ( ex: D123 => D 123 ou DR12 => DR 12)
- que les chiffres soient toujours sur 3 (ex: D 23 => D 023 ou DR 2 => DR 002)
- que si les chiffres possèdent un "-", ils soient sur 3 et 2 (ex: D 123-3 => D 123-03 ou DR 23-3 => DR 023-03)

pour résumer,
si j'ai "DER12" cela devient "DER 012"
si j'ai "DR 2-3" cela devient "DR 002-03"

j'espère avoir été assez clair, merci de votre compréhension.

Cordialement

VB:
Sub test()

    Range("J2").Select
    Selec = Range(Selection, Selection.End(xlDown)).Select
    For Each cel In Selection
        cel.Value = Replace(cel, " ", "")
        cel.Value = Replace(cel, "D", "", 1, 1)
        cel.Value = Left(cel, 1) & " " & Right(cel, Len(cel) - 1)
    Next cel

End Sub
 
Dernière édition:
Bonsoir
Cela ressemble étrangement à un truc que j'ai fait ici .... il y a plus de 10ans !!!!
Là j'ai pas le temps de refaire pour toi , je termine une autre appli ensuite WE😎
Si tu "touches" un peu le vba je te laisses le fichier de mon grenier ....retire la poussière , analyse et je pense que tu devrais trouver réponse !!! mais il faut bosser un peu (beaucoup) dessus .. nous on aide !!!
Le seul truc en + que j'ai du faire c'est insérer une ligne à chaque séparation de chaine
Compare en passant Feuil1 et Feuil2 ( c'est du activate en vba)
 

Pièces jointes

Le forum, @herve62 bonsoir,

Merci de ton retour, mais je ne vois pas en quoi ton script peut m'aider,
il n'y a rien dedans qui puisse m'orienter vers une réponse à la demande faite précédemment,
même en bossant, ou alors la couche de poussière est tellement épaisse que j'ai loupé quelque chose.
merci quand même.

Cordialement
 
Bonjour , Le rouky
Ben si le "split" et le Ubound permettent de trouver caractères d'en faire un tableau et ensuite de traiter : remplacer , supprimer ...etc
là je cherchais le caractère voulu je gardais le début et insertion de ligne et ainsi de suite , on voit bien l'exemple en ligne 8 qui devient de 9 à 13 en feuille 2

VB:
For x = 4 To lf
parc = .Cells(x, 8).Value
tir = Split(parc, "-")  > recherche l'occurence -

For n = 0 To UBound(tir) a chacune d'elle on ajoute une ligne
A = tir(n)
For j = 1 To der_col
Sheets(2).Cells(lig + n, j).Value = .Cells(x, j).Value
Sheets(2).Cells(lig + n, 8).Value = A
Next j
Next n
lig = Sheets(2).Range("a65000").End(xlUp).Row + 1
Next x
Toi au lieu d'insérer > tu supprimes : espaces , P .etc ; Le + dur sera de séparer lettres & chiffres
Enfin c'était juste pour l'idée
Bonne journée
 
Dernière édition:
Le forum, @herve62 bonjour,

Merci de ton résumé, ca ne change rien, le soucis pour l'instant c'est de mettre un espace pour séparer les lettres des chiffres. (j'ai cherché un peu partout, je ne trouve rien de concluant en VBA)
si quelqu'un a une idée, je suis preneur.

Cordialement
 
Le Forum, Bonjour,

Au vu du temps sans réponse, c'est que ou ma demande n'est pas assez claire ou que mon problème est trop dur à résoudre et n'a pas de solution.
Merci quand même a ceux qui ont essayé
Je clôture donc cette discussion sans être résolu.

Cordialement
 
Bonjour Le Rouky, herve62,

Vous auriez eu des réponses si vous aviez joint un fichier avec tous les cas de figures.

Mais mieux vaut tard que jamais, voyez le fichier joint et cette macro :
VB:
Sub MAJ()
Dim F As Worksheet, P As Range, tablo, i&, x$, j%, flag As Boolean, s
Set F = Feuil1 'CodeName de la feuille
Set P = F.Range("J2", F.Range("J" & F.Rows.Count).End(xlUp))
If P.Row = 1 Then Exit Sub
tablo = P.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
For i = 1 To UBound(tablo)
    x = CStr(tablo(i, 1))
    x = Replace(x, " ", "")
    While UCase(Left(x, 1)) = "P": x = Mid(x, 2): Wend
    flag = False
    For j = 1 To Len(x)
        If IsNumeric(Mid(x, j, 1)) Then flag = True: Exit For
    Next j
    If flag Then
        s = Split(Mid(x, j), "-")
        x = Left(x, j - 1) & " " & Format(Val(s(0)), "000")
        If UBound(s) Then x = x & "-" & Format(Val(s(1)), "00")
    End If
    tablo(i, 1) = x
Next i
'---restitution---
P = tablo
End Sub
A+
 

Pièces jointes

Le Forum, @job75, Bonjour,

Merci pour ton script qui réponds en tout point à ma demande, je tacherai de prendre en compte ta remarque sur un fichier à joindre.
d'ailleurs si je peux me permettre, en complément de sujet , j'ai modifié le script, afin de créer une exception du genre, si "TOTO1" ou "TOTO2" deviennent "TOTO 1" ou "TOTO 2" et pas "TOTO 001" ou "TOTO 002" juste avec ce mot, peux tu regarder si c'est correcte ou y a t il mieux.

Je re-joints ton fichier avec l'exemple.

merci encore

Je change en Résolu

Cordialement
 

Pièces jointes

Dernière édition:
C'est normal car 2/56 est une date, le 01/02/1956 et la ligne suivante la convertit en nombre.

Ce fichier (3) y remédie :
VB:
        s1 = Split(s(0), "/")
        If UBound(s1) Then s(0) = Format(s1(0), "000") & "\" & Format(s1(1), "000")
        x = Left(x, j - 1) & " " & Format(s(0), IIf(UCase(Left(x, j - 1)) = "TOTO", "0", "000"))
        x = Replace(x, "\", "/")
 

Pièces jointes

- 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

Retour