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

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:

herve62

XLDnaute Barbatruc
Supporter XLD
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:cool:
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

  • Recherche_chaine_SPLIT.xlsm
    16.9 KB · Affichages: 9

Le Rouky

XLDnaute Nouveau
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
 

herve62

XLDnaute Barbatruc
Supporter XLD
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 Rouky

XLDnaute Nouveau
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 Rouky

XLDnaute Nouveau
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
 

job75

XLDnaute Barbatruc
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

  • Classeur(1).xlsm
    19.2 KB · Affichages: 5

Le Rouky

XLDnaute Nouveau
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

  • Essai JOB75.xlsm
    18.6 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
Oui on peut continuer longtemps comme ça !

Mais bon voyez le fichier (2) et cet ajout :
VB:
        s1 = Split(s(0), "/")
        If UBound(s1) Then s(0) = Format(s1(0), "000") & "/" & Format(s1(1), "000")
J'ai retiré les Val des lignes suivantes.
 

Pièces jointes

  • Essai JOB75(2).xlsm
    19.9 KB · Affichages: 4

job75

XLDnaute Barbatruc
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

  • Essai JOB75(3).xlsm
    20 KB · Affichages: 5

Discussions similaires