Supprimer des zéros à droite, plan comptable

Bonjour à tous,

Je colle sur un problème de numérotation de plan comptable.

J'ai des groupes de numéros de 8 caractères et je souhaiterais supprimer les zéros à droite du dernier chiffre différent de zéro

Exemple :

12500000 ----> 125

64705800 ----> 647058

10000000 ----> 1

58000001 ----> 58000001

etc.

J'ai trouvé comment supprimer les zéros à gauche mais rien sur les zéros à droite. Surtout qu'il ne faut pas supprimer les zéros intercalés entre 2 chiffres.

Si quelqu'un aurait une solution sans VBA, je le remercie d'avance.

Salut,

Une bidouille toute simple pour ma part. (Voir pièce jointe)

Tu copie toutes les valeurs de la colonne B et tu fais coller valeurs en A (petit logo 123 quand tu fais clic droit de la souris)

Et ce jusqu'à avoir enlevé tous les 0 qui te gènent

Girodo

171plan-comptable.xlsx (9.39 Ko)

Bonjour,

Une proposition de fonction personnalisée (à ajouter dans un module standard de l'éditeur VBA, accessible via ALT + F11) :

Public Function Suppr0(Num As Long) As Long

Dim i As Integer, Compt As Integer

For i = 1 To Len(Num) 'Boucle sur chaque chiffre
   If Mid(Num, i, 1) = "0" Then Compt = Compt + 1 Else Compt = 0 'Si c'est un 0, on le compte, sinon on réinitialise le compteur
Next i
Suppr0 = CLng(Left(Num, Len(Num) - Compt)) 'On garde la partie gauche du nombre, moins le compteur de 0

End Function

Dans ton fichier, il te suffit ensuite de l'appeler comme une fonction Excel, avec :

=Suppr0(A1) 

Ou :

=Suppr0(12500000)

PS : le fichier est a enregistrer au format ".xlsm" (qui supporte les macros).

PS2 : on peut aussi utiliser une macro qui s’exécute avec un bouton et converti une plage entière d'un seul coup.

Bonjour à tous,

=GAUCHE(A2;MAX((STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)<>"0")*LIGNE(INDIRECT("1:"&NBCAR(A2)))))

formule matricielle à valider avec shift+ctrl+entrée

La formule doit s'entourer de { } si la validation est correcte.

eric

Merci à vous 3 !

Girodo, je n'ai pas réussi avec ta technique. Mais merci pour ton intervention.

eriiic, ta formule est nickel ! Merci beaucoup !

Pedro, ton VBA est très intéressant pour moi, j'ai essayé de l'appliquer, mais pardonne mon amateurisme, je n'ai pas réussi à passer l'étape :

Dans ton fichier, il te suffit ensuite de l'appeler comme une fonction Excel, avec :

=Suppr0(A1)

Le nommer où dans le gestionnaire de noms ou dans enregistrer une macro ??

OK,

Au temps pour moi !

Je n'avais pas vu qu'il fallait l'intégrer dans un module et non dans un objet !

C'est nickel, cela fonctionne parfaitement !

Merci à tous

Pedro, ton VBA est très intéressant pour moi, j'ai essayé de l'appliquer, mais pardonne mon amateurisme, je n'ai pas réussi à passer l'étape :

Dans ton fichier, il te suffit ensuite de l'appeler comme une fonction Excel, avec :

=Suppr0(A1)

Le nommer où dans le gestionnaire de noms ou dans enregistrer une macro ??

3 étapes :

1. Ouvrir l'éditeur VBA (ALT + F11) et insérer un module

illu2

2. Coller le code dans le module

illu3

3. Fermer l'éditeur et utiliser la fonction

illu4

Nickel les explications, merci pour ton temps

Mais j'ai conclu le sujet trop vite

J'essaye justement de créer un bouton en VBA pour faire appliquer la fonction à une plage entière mais je n'y arrive pas,

Faiblard en VBA, je suis !

Petite modification déjà pour la fonction :

Public Function Suppr0(Num As Long) As Long

Dim i As Integer, Compt As Integer, Val As String

Val = CStr(Num)
For i = 1 To Len(Val) 'Boucle sur chaque chiffre
   If Mid(Val, i, 1) = "0" Then Compt = Compt + 1 Else Compt = 0 'Si c'est un 0, on le compte, sinon on réinitialise le compteur
Next i
Suppr0 = CLng(Left(Val, Len(Val) - Compt)) 'On garde la partie gauche du nombre, moins le compteur de 0

End Function

Pour l'appliquer à une plage, créer une second macro (affectée ensuite à un bouton) :

Sub ConvertPlage()

Dim Plage As Range

Set Plage = Application.InputBox("Sélection d'une plage à convertir", type:=8)
For Each Cell In Plage
    Cell.Value = Suppr0(Cell.Value)
Next Cell

End Sub

Merci Pedro22,

Cela fonctionne,

J'ai une boite de dialogue qui s'affiche quand dans ma plage je sélectionne à la fois des cellules pleines et des cellules vides.

Mais ce n'est pas trop grave !

Encore merci , c'est nickel !

Voilà une petite modification pour éviter les soucis avec les cellules vides.

Sub ConvertPlage()

Dim Plage As Range

Set Plage = Application.InputBox("Sélection d'une plage à convertir", type:=8)
For Each Cell In Plage
    If Not IsEmpty(Cell) Then Cell.Value = Suppr0(Cell.Value)
Next Cell

End Sub

PS :

Bravo à toi Pedro22 !

C'est parfait !

Rechercher des sujets similaires à "supprimer zeros droite plan comptable"