Cellule rajout d'un 0 au début d'une série de chiffre

Bonjour,

J'ai une problématique sur des chiffres

On va dire que ce sont des numéros de téléphone qui était écris 0-000-00-000-0 et la nouvelle numérotation se note 0000000000, j'ai donc fait la fonction ctrl-f remplacer "-" par rien, sauf que le 1er zero saute.

J'ai mis ensuite dans format de cellule "personnalisé" et j'ai mis en filtre "0000000000" du coup il me complète ma série de chiffre avec un 0. Visuellement c'est correcte mais quand je double clic sur la case pour copier la valeur il me copie sans le 0, ou quand j'essaie de rechercher une référence il ne la trouve pas car il ne voie pas le 0.

Compliquer d'expliquer a l'écris donc je vous joint un fichier. 4B la case est correcte, 10B est incorrect par exemple.

15test.xlsx (9.36 Ko)

Bonjour,

Vous devez formater vos cellules en "Texte". C'est le seul moyen de garder les "leading zeros" en mémoire.

=> C'est le format de cellule à privilégier pour toutes les "suites de numéros" qui ne sont pas des nombres.

Du coup quand je sélectionne tout et que je passe en "texte" le 0 n'existe plus et faut le rajouter a la main et j'ai environs 30k références a gérer, je me disais qu'un script pouvais peut être faire le travail.

Si vous me confirmez qu'il n'existe pas de solution je passerai le sujet en clôturer.

Ah si bien sur vous pouvez utiliser une macro pour tout mettre à jour, ci-après un exemple.

Je vous le disait pour information car la prochaine fois avant de faire le CHERCHER/REMPLACER, si vous modifiez d'abord le format de la colonne en TEXTE vous n'aurez pas besoin de la macro.

Code à insérer dans un module. Lancer la macro "CorrigerFormat".

NOTA : fonctionne sur la feuille active, sur la colonne "COL_NUM" = 2 soit "B".

Option Explicit

Const COL_NUM As Long = 2
Const STR_FORMAT As String = "0000000000"

Public Sub CorrigerFormat()
  Dim ws As Worksheet: Set ws = ActiveSheet

  Dim outRng As Range
  Set outRng = ws.Range(ws.Cells(4, COL_NUM), ws.Cells(ws.Rows.Count, COL_NUM).End(xlUp))
  Dim colVals As Variant
  colVals = outRng.Value

  Dim i As Long
  For i = LBound(colVals, 1) To UBound(colVals, 1)
    colVals(i, 1) = VBA.Format$(colVals(i, 1), STR_FORMAT)
  Next i

  Application.ScreenUpdating = False
  outRng.NumberFormat = "@"
  outRng.Value = colVals
  ' fit de la largeur possible uniquement si colonne sans cellules fusionnées
  On Error Resume Next
  outRng.AutoFit
  On Error GoTo 0
  Application.ScreenUpdating = True
End Sub

Cela fonctionne parfaitement.

Pour la feuille active c'est parfait, pour les colonnes je m'adapterai, je vais essayer de comprendre un peu ce que vous m'avez envoyé car j'aime bien m’intéresser un minimum et comprendre par moi même. L'avantage avec Excel c'est que nous avons beaucoup de documentation disponible donc avec un peu de curiosité on comprend assez vite, mais impossible pour moi de commencer un script de zéro comme vous l'avez fait.

Merci, je passe le sujet en clôturer.

Je vous en prie, content d'aider. Si vous avez des interrogations sur la macro en question n'hésitez pas à les regrouper et les poser ici.

Si vous débutez en VBA vous avez le tutoriel du site qui offre une solide base pour s'initier : https://excel-pratique.com/fr/vba.

Rechercher des sujets similaires à "rajout debut serie chiffre"