Format cellule personalisé sur excel

Résolu
boscaium Messages postés 4 Statut Membre -  
boscaium Messages postés 4 Statut Membre -
Bonjour,
petit soucis concernant le format de cellule personnalisé
j'utilise de nombreuse référence de produit que je met dans une liste sur excel
Pour être plus clair je vous donne un exemple ci dessous
Dans une cellule je tape la référence suivante : 02024501ZZ00
En validant ma saisie je souhaite cette mise en forme :02.0245.01.ZZ.00
tout en sachant que les deux lettres ZZ ne sont pas figés que je peut mettre d'autre
lettres mais pas plus de deux lettres
En recherchant j'ai presque réussi si je ne met que des chiffres si j'ajoute du texte
cela ne marche pas
Quelqu'un a peut être la solution ?
en vous remerciant par avance
Pascal

1 réponse

  1. Utilisateur anonyme
     
    Bonsoir Pascal,

    Je ne crois pas que ce que tu demandes soit possible sans macro.

    Si tu tapes la référence en cellule B5, voici le code VBA correspondant :

    
    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address <> "$B$5" Then Exit Sub
      If Len([B5]) <> 12 Then Exit Sub
      Dim chn As String: chn = [B5]
      [B5] = Left$(chn, 2) & "." & Mid$(chn, 3, 4) & "." _
        & Mid$(chn, 7, 2) & "." & Mid$(chn, 9, 2) & "." & Right$(chn, 2)
    End Sub
    
    

    À toi d'adapter le "$B$5" et les trois [B5]. Ce code vérifie juste que
    la longueur de la référence saisie est de 12 caractères, pas si tu as
    entré des chiffres à la place de lettres ou inversement.

    Attention : ce code VBA n'est pas à mettre dans Module1
    mais dans le code de la feuille où tu tapes la référence.

    Dis-moi ce que tu en penses, et si ça te convient.

    Si ton problème est réglé, merci d'aller en haut de page
    pour cliquer sur « Marquer comme résolu ».

    Cordialement.  😊
     
    0
    1. boscaium Messages postés 4 Statut Membre
       
      Bonjour
      merci pour votre réponse
      je viens de de mettre en pratique la macro qui fonctionne pour une cellule
      par contre j'utilise une liste de référence donc il faudrait que la macro tienne compte
      d'une colonne de cellule et la je coince
      merci d'avance
      pascal
      0
      1. Utilisateur anonyme > boscaium Messages postés 4 Statut Membre
         
        Bonjour Pascal,
        J'ai besoin que tu m'indiques quelle est ta colonne de références
        (données seulement, sans la ligne d'en-têtes éventuelle) ; exemple :
        colonne C, lignes 12 à 20 => plage "C12:C20". Cordialement.  😊
         
        0
      2. boscaium Messages postés 4 Statut Membre > Utilisateur anonyme
         
        Bonsoir
        ci dessous exemple de référence contenue dans la plage B1:B10
        avec la macro la cellule B5 fonctionne très bien quand j'essai de modifier la macro
        en remplaçant B5 par la plage de cellule ça ne fonctionne pas
        je doit oublier une accolade ou autre chose
        bien cordialement
        pascal

        02036002zz00
        02036002zz01
        02036002zz02
        02036002zz03
        02.0360.02.zz.04 (cellule B5)
        02036002zz05
        02036002zz06
        02036002zz07
        02036002zz08
        02036002zz09
        0
      3. Utilisateur anonyme > boscaium Messages postés 4 Statut Membre
         
         
        Bonjour Pascal,

        Quand on utilise Worksheet_SelectionChange(), on doit faire très attention
        à certains détails car il faut utiliser un type de programmation spécial, et
        on ne peut pas remplacer simplement comme ça B5 par B1:B10 !

        Donc quand tu as essayé, c'est normal que ça n'ait pas fonctionné, et ce
        n'est pas une histoire de parenthèse ou accolade oubliée ! Le code VBA
        doit être modifié comme suit, pour B1:B10 :

        
        Option Explicit
        
        
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target.Column <> 2 Then Exit Sub ' 2 pour colonne B
          If Target.Row > 10 Then Exit Sub
          If Len(Target) <> 12 Then Exit Sub
          Dim chn As String: chn = Target
          Target = Left$(chn, 2) & "." & Mid$(chn, 3, 4) & "." _
            & Mid$(chn, 7, 2) & "." & Mid$(chn, 9, 2) & "." & Right$(chn, 2)
        End Sub
        
        

        Si ta plage était B2:B10 :

        
        Option Explicit
        
        
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target.Column <> 2 Then Exit Sub ' 2 pour colonne B
          Dim chn As String, lig As Long: lig = Target.Row
          If lig = 1 Or lig > 10 Then Exit Sub
          If Len(Target) <> 12 Then Exit Sub
          chn = Target
          Target = Left$(chn, 2) & "." & Mid$(chn, 3, 4) & "." _
            & Mid$(chn, 7, 2) & "." & Mid$(chn, 9, 2) & "." & Right$(chn, 2)
        End Sub
        
        

        Si ta plage était B5:B10 :

        
        Option Explicit
        
        
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target.Column <> 2 Then Exit Sub ' 2 pour colonne B
          Dim chn As String, lig As Long: lig = Target.Row
          If lig < 5 Or lig > 10 Then Exit Sub
          If Len(Target) <> 12 Then Exit Sub
          chn = Target
          Target = Left$(chn, 2) & "." & Mid$(chn, 3, 4) & "." _
            & Mid$(chn, 7, 2) & "." & Mid$(chn, 9, 2) & "." & Right$(chn, 2)
        End Sub
        
        

        Dis-moi ce que tu en penses, et si ça te convient.

        Si ton problème est réglé, merci d'aller en haut de page
        pour cliquer sur « Marquer comme résolu ».

        Cordialement.  😊
         
        0
      4. boscaium Messages postés 4 Statut Membre > Utilisateur anonyme
         
        Un grand merci a toi Albkan
        cordialement
        Pascal
        0