Compter le nombre de zéro à gauche dans un texte et les supprimer

Bonjour tout le monde

Je suis débutant sur VBA

Sur une colonne "A" j'ai des cellules sous forme :

00000Texte

Le nombre de 0 à gauche varie, d'où mon code ci-dessous pour compter les 0 à gauche et les supprimer pour avoir seulement le Texte

Ci-dessous mon code, que je suppose correct, mais en vain.

Je reçois le message : Erreur d'exécution '1004':

Merci par avance pour votre support

Function Nbre_Zero()
'
' Nbre_Zero
'

Dim j As Byte

Dim k As Byte
k = 0

    For j = 1 To Len(Cells(i, 1))

        While Mid(Cells(i, 1), j, 1) = 0

            k = k + 1

        Wend

    Next j

End Function

Sub Supprimer_Zero()
'
' Supprimer_Zero
'

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim i As Long
i = 2

Range("A" & i & ":A" & LastRow).Select

    For Each Cellule In Selection

        If Left(Cells(i, 1), 1) = 0 Then

            Nbre_Zero

            MsgBox "Le nombre de ZERO dans la cellule " & i & " est de : " & k

            Cells(i, 3).Value = Mid(Cells(i, 1), k + 1, Len(Cells(i, 1)) - k)

        End If

    Next

End Sub

Bonjour,

Peut-être que vous avez un objectif précis mais :

cells(i, 3).value = replace(Cells(i, 1), "0", "")

peut simplement faire l'affaire...

Cdlt,

Bonjour 3GB,

Je vous remercie bien pour votre rapidité.

Oui c'est résolu

A noter SVP que j'ai constaté que pour le texte sous forme de 00000AZ1980 il me supprime le 0 de droite en exécutant le code.

Je connais bien cette fonction "Remplacer" sur Excel mais j'ai pas pensé à l'utiliser et c'est simple.

SVP avec mon code y a possibilité de le modifier pour que ça fonctionne? Juste pour voir le résultat de mon effort un peu complexe

Cdlt,

Il y a toujours plusieurs façons de faire. En tout cas, voilà comment j'aurais modifié votre code sans trop le dénaturer.

Mais avant tout, quelques remarques :

- inutile d'initialiser une variable à 0 (si type numérique) ou vide sinon,
- la fonction ne renvoyait rien, ça n'aurait pas pu marcher,
- il est préférable de passer en paramètre "l'objet" sur lequel on travaille et à partir duquel on obtient le résultat de la fonction. Ça rend la fonction dynamique.

Function Nbre_Zero(Texte as string) as byte

Dim k As Byte

k = 1 'initialisation k à 1
While k <= len(Texte) 'tant que k <= nb caracteres du Texte
    if Mid(Texte, k, 1) = "0" then 'si le caractère k est "0"
        Nbre_Zero = k 'fonction retourne la position du caractère
        k = k + 1 'incrémentation de k
    Else 'sinon (dès que non "0")
        Exit function 'sortie fonction
    end if
Wend

End Function

Sub Supprimer_Zero()

Dim plage as range
Dim LastRow as Long
Dim chaine$

LastRow = Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne non vide en A
Set plage = Range("A2:A" & LastRow) 'affectation plage à parcourir

For Each Cellule In plage 'pour chaque cellule de notre plage
    chaine = Cellule.value 'chaine vaut valeur de la cellule en cours
    Cells(Cellule.row, 3).Value = Right(chaine, len(chaine) - Nbre_Zero(chaine)) 'en colonne 3 sur la même ligne que Cellule : renvoie chaine sans les zéro de gauche
Next

End Sub

Je renvoie bientôt vers vous avec une alternative pour le remplacement.

Cdlt,

Voici mon idée pour le remplacement, en utilisant une expression régulière.

Il faudra juste, à partir du menu "Outils"/ Références, sélectionner la référence "Microsoft VBScript Regular Expressions 5.5",

Function EFFACER_ZERO(chaine As String) As string

Dim ExpReg As REGEXP
Dim modele$

Set ExpReg = CreateObject("vbscript.regexp")
modele = "^0+"

With ExpReg
    .Global = True
    .Pattern = modele
    If .test(chaine) Then
        EFFACER_ZERO = .replace(chaine, "")
    Else
        EFFACER_ZERO = chaine
    End If
End With

End function

Ici, on définit un modèle de chaine de caractères (à savoir un texte commençant par un zéro ou plus). Si il y a correspondance, on remplace ce modèle par une chaine vide. Sinon, on renvoie la chaine entière.

Sur excel, il suffit en C2 par exemple de saisir :

=EFFACER_ZERO($A2)

Edit : Et pour une solution Excel pure (avec le problème tel qu'il est posé), on peut saisir :

=SUBSTITUE(GAUCHE(A1;NBCAR(A1)-4); "0"; "")&DROITE(A1;4)

Cdlt,

Bonjour 3GB,

Je vous remercie infiniment pour vos réponses efficaces et vos codes claires et raffinés

Je peux exploiter mes données sans aucun souci mnt.

En cas de besoin je vous ferais signe si ça ne vous dérange absolument pas?

Une autre fois milles mercis

Cdlt,

Bonjour Dev007,

Merci à vous pour ce retour chaleureux, ça fait plaisir !

Non, ça ne me dérange pas. Si je suis disponible, je vous aiderai avec plaisir !

Bonne continuation et peut-être à bientôt,

Rechercher des sujets similaires à "compter nombre zero gauche texte supprimer"