Formater une saisie de texte

Bonjour à tous,

J'aimerais formater de façon automatique, une saisie de texte dans une cellule, de telle manière que lorsque je tape "1-2", le texte dans la cellule se changera en "F1-F2", avec 1 et 2 en indice.

Merci d'avance.

bonsoir

exemple

="F" & SUBSTITUE(C6;"-";"-F")

par contre tes cellules ou tu tape 1-2 doivent être au format text

Bonsoir à tous,

Pour une application sur la cellule même de manière automatique.

Insérer le code ci-dessous dans la partie code de la feuille de la saisie à formater.

Private Sub Worksheet_Change(ByVal Target As Range)
'Evite toute sélection > à 1 à effacer
If Target.Count > 1 Then Exit Sub
'et tout nombre négatif ou effet suite effacement
If InStr(1, Target, "-") > 1 And Target > "" Then
Adr = Target.Address
Application.EnableEvents = False
Range(Adr) = "F" & WorksheetFunction.Substitute(Target, "-", "-F")
Application.EnableEvents = True
End If
End Sub

Bonjour patricktoulon, X Cellus,

@patricktoulon

Le formatage devra-être dans le même cellule de saisie.

@X Cellus

Voici ce que ça donne la procédure (Le 1-2 était un simple exemple, mais les chiffres vont de 1-2 à 23-24) :

formattage

A nouveau,

La colonne, soit doit être en format texte, soit il faut rentrer du texte en placement un ' avant le chiffre.

Car sinon Excel comprendra que tu rentres une date. Ex: 1-2 sera le 1ier février.

Salut Atlas,
Salut l'équipe,

je plussoie : après moult essais, sauf ignorance coupable, la colonne concernée doit être en format 'Texte'.
Le code suivant ne fonctionnera que si il n'existe qu'un tiret dans l'item à traiter.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
If InStr(Target, "-") > 0 Then
    If InStrRev(Target, "-") = InStr(Target, "-") Then
        If IsNumeric(Split(Target, "-")(0)) And IsNumeric(Split(Target, "-")(1)) Then
            Target = "F" & Format(Split(Target, "-")(0), "0") & "-" & "F" & Format(Split(Target, "-")(1), "0")
            Target.Characters(2, InStr(Target, "-") - 2).Font.Subscript = True
            Target.Characters(InStr(Target, "-") + 2, Len(Target) - InStr(Target, "-") - 1).Font.Subscript = True
        End If
    End If
End If
'
Application.EnableEvents = True
'
End Sub
7atlas.xlsm (20.79 Ko)


A+

Bonjour curilis57 et merci.

Seulement, je voulais formater les cellules avec :

Target.NumberFormat = "@"

Mais ça ne marche pas !

Salut Atlas,

j'ai essayé, tu penses bien...
Comme tu dis, cela ne fonctionne pas sauf, ignorance...


A+

Bonjour de bon matin a la fraiche

assistant de saisie

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo réactive_event
    With Target
        If .Count = 1 And .Column = 1 Then
            .NumberFormat = "@"
            Application.EnableEvents = False
            .Value = Format(Replace("F" & .Value, "-", "F-"))
            If Not IsNumeric(Replace(Replace(.Value, "F", ""), "-", "")) Then MsgBox "la valeur saisie n'est pas bonne": .Value = "": Target.Select
        End If
    End With
réactive_event:
    Application.EnableEvents = True
End Sub

Bonjour curilis57, patrick,

@curilis57

j'ai essayé, tu penses bien...

Comme tu dis, cela ne fonctionne pas sauf, ignorance...

Non, tu as bien essayé, au contraire

@patrick

Voici les résultats obtenus :

code patrick

J'ai apporté quelques modification sur le code, mais ça ne donne rien pour le moment :

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        .NumberFormat = "@"
        '
        Application.EnableEvents = False
        '
        If .Count = 1 And .Column = 5 Then
            If InStr(.Value, "-") > 0 Then
                If InStrRev(.Value, "-") = InStr(.Value, "-") Then
                    If IsNumeric(Split(.Value, "-")(0)) And IsNumeric(Split(.Value, "-")(1)) Then
                        .Value = "F" & Format(Split(.Value, "-")(0), "0") & "-" & "F" & Format(Split(.Value, "-")(1), "0")
                        .Characters(2, InStr(.Value, "-") - 2).Font.Subscript = True
                        .Characters(2, InStr(.Value, "-") - 2).Font.Size = 12
                        .Characters(InStr(.Value, "-") + 2, Len(.Value) - InStr(.Value, "-") - 1).Font.Subscript = True
                        .Characters(InStr(.Value, "-") + 2, Len(.Value) - InStr(.Value, "-") - 1).Font.Size = 12
                    End If
                End If
            End If
        End If
        '
        Application.EnableEvents = True
        '
    End With
End Sub

Salut Atlas,

je suppose que c'est Font.Size qui ne fonctionnait pas ?
En inversant les lignes, ça fonctionne !

With Target
    .NumberFormat = "@"
    Application.EnableEvents = False
    '
    If .Count = 1 And .Column = 5 And InStr(.Value, "-") > 0 Then
        If InStrRev(.Value, "-") = InStr(.Value, "-") And IsNumeric(Split(.Value, "-")(0)) And IsNumeric(Split(.Value, "-")(1)) Then
            .Value = "F" & Format(Split(.Value, "-")(0), "0") & "-" & "F" & Format(Split(.Value, "-")(1), "0")
            .Characters(2, InStr(.Value, "-") - 2).Font.Size = 12
            .Characters(2, InStr(.Value, "-") - 2).Font.Subscript = True
            .Characters(InStr(.Value, "-") + 2, Len(.Value) - InStr(.Value, "-") - 1).Font.Size = 12
            .Characters(InStr(.Value, "-") + 2, Len(.Value) - InStr(.Value, "-") - 1).Font.Subscript = True
        End If
    End If
    '
    Application.EnableEvents = True
End With


A+

re

bonjour a tous

de bon matin a la fraîche

dite moi un peu ou est l'erreur dans cette ligne

If .Count = 1 And .Column = 5 And InStr(.Value, "-") > 0 Then

de plus!!!!

expliquer moi un peu je comprends pas tou ce ramdam avec les instr et instrrev et split compagnie

a quoi ca vous sert ?????????????

c'est absolument inutile!!!!!!!!

car il est clair que le format tapé doit être absolument "00-00"

parti de là calculer les positions ne vous sont d'aucune utilité a part faire tourner le bourrin en bourrique

la demande est simple

si .value=xx-xx alors .value=Fxx-Fxx et les chiffres en subscript

donc les caractères numériques sont toujours de 2 à 3 et de 6 à 7

pourquoi aller chercher midi 14 heure ???

et puis bon sang de bon soir ou est la gestion d'erreur qui empêcherait de perdre le enableevents en cas de plantage !!!??????

re

je pense vous avoir blindé la chose comme ceci

vous n'avez plus de plantage en cas d'erreur et si vous avez oublié de mettre la colonne au format text ça le fait pour vous et vous invite a recommencer avec un message bien sympatique LOL

Const texte As String = "la colonne n’était pas au format texte, l'application l'a fait pour vous  (tu peux recommencer tète plate c'est bon maintenant)"
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim T$, X&
    With Target
         If .Count > 1 Or .Column <> 5 Then Exit Sub
        If Target = "" Then Exit Sub
       If .NumberFormat <> "@" Then .Value = "": .EntireColumn.NumberFormat = "@": Target.Select: MsgBox texte: Exit Sub
        On Error GoTo errr
        T = Format(.Text, "@")
        If InStr(T, "-") > 0 And IsNumeric(Replace(T, "-", "")) Then    '
         Application.EnableEvents = False
           T = "F" & Replace(T, "-", "-F"): X = InStr(1, T, "-F") + 2: .Value = T
            With .Characters(2, X - 4): .Font.Size = 12: .Font.Subscript = True: End With
            With .Characters(X, 2): .Font.Size = 12: .Font.Subscript = True: End With
        End If
errr:
        Application.EnableEvents = True
    End With
End Sub

Bonjour la compagnie

@ atlas & curulis

Bonjour curilis57 et merci.

Seulement, je voulais formater les cellules avec :

Target.NumberFormat = "@"

Mais ça ne marche pas !

le problème étant le formatage automatique en date, tu peux très bien reprendre la proposition de curulis et si target est détecté en date, remettre sa forme initiale, formater en @

If IsDate(Target) Then x = Day(Target) & "-" & Month(Target)

et ensuite traiter simplement comme curulis le proposait

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If IsDate(Target) Then x = Day(Target) & "-" & Month(Target)
Target.NumberFormat = "@"
If InStr(x, "-") > 0 Then
    If InStrRev(x, "-") = InStr(x, "-") Then
        If IsNumeric(Split(x, "-")(0)) And IsNumeric(Split(x, "-")(1)) Then
            Target = "F" & Format(Split(x, "-")(0), "0") & "-" & "F" & Format(Split(x, "-")(1), "0")
            Target.Characters(2, InStr(Target, "-") - 2).Font.Subscript = True
            Target.Characters(InStr(Target, "-") + 2, Len(Target) - InStr(Target, "-") - 1).Font.Subscript = True
        End If
    End If
End If
Application.EnableEvents = True
End Sub

cela fonctionne très bien avec deux fois un simple chiffre, je n'ai pas été plus loin

dans cette version, seule la cellule touché est en format @

je ne dis pas que les autres propositions ne sont pas valables, je dis seulement que le format n'était pas incompatible de la proposition, de curulis

bien vu Steelson j'avais eu la même idée au depart

Il y a un point que je n'ai pas traité mais je laisse les spécialistes le faire ... tester s'il s'agit bien du mois et pas du jour car excel peut inverser les 2 si le second nombre tapé est supérieur à 12. C'est pour cela que ça fonctionne avec les nombres à 1 chiffre, au-delà, ta solution est peut-être indispensable.

re

bonne question à la quelle tu a répondu toi même et quoi que là on est encore dans un problème ou la solution va coûter quelque lignes de code

puisque là on est dans le problème <= 12(jj/mm) des dates entrées en string dans une cellule

If IsDate(Target) Then x = Day(Target) & "-" & Month(Target)

donc au final je ne sais pas si le test isdate est une si bonne solution que ça

re

tiens là je pense que l'on est bien

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Or Target.Column <> 5 Then Exit Sub    
    If Target.Value = "" Then Exit Sub    ' si vide on sort
'en format standard "1-1" tapé ressort en date courte(mois en lettre)
'en format nombre "1-1" resord avec le  numero de serie donc (long) (entierement numerique)
'conclusion
    If IsNumeric(Target.Text) Or Target.Text Like "*[a-z]*" Then
        MsgBox "votre cellule n'est pas formatée en texte recommencez": Target.EntireColumn.NumberFormat = "@": Target.Value = ""    'ca ne se produira que la premiere fois pour toute la colonne 
    Else
        'traitez ici

    End If
End Sub

J'ai mieux ! demander à taper 1+1 et non 1-1 et toutes solutions données fonctionnent.

Je conçois bien que l'on utilise un clavier numérique pour entrer les valeurs, mais moi qui n'ait pas de pad numérique, cela me saoule de taper - au milieu de chiffres !

Rechercher des sujets similaires à "formater saisie texte"