XL 2013 Formater les chaînes de caractère VBA

Macgiy

XLDnaute Nouveau
Bonjour à tous,

J'aurais besoin d'aide pour écrire un morceau de code permettant de formater des chaînes de caractères dans les cellules et faire en sorte d'éviter quelques erreurs de saisie.

Dans mon fichier je possède des cellules à remplir avec des nombres des lettres et plus particulière des % pour exprimer des compositions.

Je vais illustrer mon propos avec un exemple.

Dans ma colonne AG je vais renseigner mes compositions :

80% trallaa, 10% xxxqxdq, 10% dsqdkqs

Je souhaiterais mettre en place une macro qui permet de contrôler le contenu de la cellule et qui permet de vérifier qu'il y a bien un espace entre le nombre et le %.

La macro devra permettre d'arriver au résultat suivant :

80 % trallaa, 10 % xxxqxdq, 10 % dsqdkqs

Je pense que la macro doit parcourir la chaîne de caractère et recherche les cas où on tombe sur un chiffre puis un % et insérer un espace entre les deux.

Je rencontre des problèmes dans l'écriture de cette macro, j'espère que vous pourrez m'aider.

Je vous remercie par avance,

Macgiy
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Bonjour à toi Modeste,

Oui tout à fait possible de demander pourquoi.

En faite cette cellule sert ensuite à générer un pavé de texte un peu complet (on vient assembler d'autre cellule). Ce pavé de texte est ensuite utilisé par un autre service pour réaliser diverses création (catalogue, flyers, ...).

Et donc la convention d'écriture qui a été choisi et cette dernière de mettre un espace entre le % et les nombres.

Certains utilisateurs n'auront aucun mal à écrire de cette façon mais d'autre ne feront pas attention et pour avoir une façon d'écrire unique je souhaite intégrer cette protection pour que l'excel le corrige automatique.

En espérant avoir répondu à ta question.
 

Modeste

XLDnaute Barbatruc
Re : Formater les chaînes de caractère VBA

Et donc la convention d'écriture qui a été choisi et cette dernière de mettre un espace entre le % et les nombres
Ben ... changez de convention, alors ;)

Plus sérieusement: le "pourcentage" est un format. Si tu encodes 6% (sans espace) et qu'après avoir validé, tu reviens au format Standard, le signe disparaît et la valeur dans la cellule devient 0,06. Tu peux, bien sûr créer un format personnalisé du style 0" %" (restera à déterminer si tu veux afficher des décimales) mais le comportement en cas de calculs ne sera plus le même ... tu es certain que ça ne posera pas de problème?

La bonne nouvelle c'est par contre qu'une macro serait superflue (enfin ... à mon avis!)
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Je comprends bien ton propos Modeste sur le format % et autre. Mais je pense que tu n'as pas bien interprété ma demande et je me suis certainement pas très bien exprimé.

Si tu reprends l'exemple que j'ai mis dans mon poste 1.

Je vais écrire dans ma cellule une certain nombre de chose et il se peut que dans le texte que j'écrive dans cette cellule des % soit mentionné. Ce n'est pas une cellule réservé à un % mais elle peut exprimer la composition des produits (dans ce cas il y aura des %) mais il peut y avoir des longueurs des diamètres, .... un certains nombre d'information en soit.

Dans les documents finaux où apparaîtrons les informations remplies dans l'Excel la convention choisie lorsqu'un % de composition est présent il doit s'écrire de la manière suivante :
Exemple : Pull, 80 % coton, 20 % laine. (l'information 80 % coton, 20 % laine se trouve dans la même et unique cellule) si un des utilisateurs écris 80% coton, 20% laine l'ensemble des textes du document final ne seront pas cohérent.

Changer de convention d'écriture n'est pas envisageable.
 

Jam

XLDnaute Accro
Re : Formater les chaînes de caractère VBA

En langage naturel cela donnerai quelque chose du genre:
Si dans ma chaîne je TROUVE caractère %, recul d'un caractère, si celui-ci est un nombre alors remplace % par (espace)%...puis on continu jusqu'au bout de ma chaîne

j'espère que cela t'aidera à défaut de donner une solution pré-machée :)


Bon courage

Bonjour Modeste
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Formater les chaînes de caractère VBA

Re,

Changer de convention d'écriture n'est pas envisageable.
Je plaisantais, je t'assure :)

Ceci étant, tes dernières explications sont effectivement plus claires. Copie-colle les lignes suivantes dans la fenêtre de code d'une feuille quelconque d'un classeur:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If InStr(1, Target, "%", 1) > 1 Then
    Application.EnableEvents = False
    Target = Replace(Replace(Target, " %", "%"), "%", " %")
    Application.EnableEvents = True
End If
End Sub
Fais des tests ensuite (en colonne A uniquement!) ... tu verras si j'ai mieux compris (je n'ai pas géré le cas où quelqu'un mettrait deux espaces devant le signe '%' :p)

Bonjour Jam
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Bonjour à tous,

Je suis désolé de ne répondre que maintenant, j'ai était très pris par mon travail (+ des déplacements) et obligé de redescendre ce sujet dans mes priorité. Je peux le rependre aujourd'hui.

Je vous remercie déjà pour vos réponses que je vais aller essayer de ce pas :)

Je vous tiendrai au courant de mes avancés.
 

Modeste geedee

XLDnaute Barbatruc
Re : Formater les chaînes de caractère VBA

Bonsour®
Macgiy à dit:
Ce n'est pas une cellule réservé à un % mais elle peut exprimer la composition des produits (dans ce cas il y aura des %) mais il peut y avoir des longueurs des diamètres, .... un certains nombre d'information en soit.
un fichier exemple avec formats attendus (unités) serait bien venu ...
Macgiy à dit:
la convention d'écriture qui a été choisi et cette dernière de mettre un espace entre le % et les nombres.
20%coton ===> 20 % coton ?
20% lin ===> 20 % lin ?
10,55Long ===>10,55 Long ?
50cm² ===> 50 cm² ?
75clAlcool===> 75 cl Alcool ?
33mmØnominal ==> 33 mm Ø nominal ?

????
combien de post-arguments doit-on envisager et leur longueur(caractères)
à fin de détecter la fin de la partie numérique et/ou les unités attendues et nb caractères???
Macgiy à dit:
la convention d'écriture qui a été choisi
exemples convention :
- mètre, m,
- Litre, l,
- Long, L, lg, longueur,
- larg, l, largeur,
- g, gr, gramme
- k, kilo, kg, kilogramme
- Ø, Dia, Diam, Diamètre,
- matière : lin, coton, acier, alcool, polyester, viscose, soie, PVC,
 
Dernière édition:

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Re bonjour

Jam tu avais parfaitement reformulé l'algorithme que je voulais mettre en place.

Modeste la solution fournie fonctionne parfaitement j'ai pu l'améliorer pour cibler les zones particulières de mon fichier la où je souhaite que la macro s'applique. J'ai aussi pu adapté le cas pour d'autre symbole que le %.

Cependant afin de continuer mon apprentissage dans le VBA peux-tu m'expliquer le rôle et le fonctionnement des lignes suivantes :
If Target.Count > 1 Then Exit Sub


Le fonctionnement de cette fonction :
If InStr(1, Target, "%", 1) > 1 Then

Et pourquoi écrire cette ligne de la manière suivante :
Target = Replace(Replace(Target, " %", "%"), "%", " %")

Je te remercie encore pour ta disponibilité
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Bonjour Modeste Geedee et merci pour ta contribution

Tes exemple rentre exactement dans les cas que je cherche à traiter. Un certain nombre de post-arguments sont envisageables :Ø, H, L, l, P, % et des indices de mesure : cm, m, mL, g, kg, L

En le voyant certain seront plus compliqués à gérer notamment avec les lettre m ou l comment éviter d'avoir un espace que s'insère au milieu d'un mot alors que ça ne devrait pas.

A noter que je cherche à faire un premier contrôle rapide et non une usine à gaz, la macro doit aider les utilisateurs sur quelques inattentions mais ne doit pas remplacer leur rigueur dans l'écriture.
 

Modeste geedee

XLDnaute Barbatruc
Re : Formater les chaînes de caractère VBA

Bonsour®
le plus simple (ou plutôt le moins contraignant au niveau algorithme)
serait de revoir les données à afficher en séparant :
- un champ valeur (sans unité)
- un champ Unité
- un champ complémentaire (matière, dimension(Long, larg, Haut, Prof, forme ou autre info)
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Oui je comprend bien ce que tu veux dire et c'est une idée qui m'a traversée aussi mais on essaye de faire un nombre de champ assez restreints donc il n'y en as qu'un et je vais essayer de traiter un maximum de cas et on verra bien à l'usage comment ça évolue
 

Macgiy

XLDnaute Nouveau
Re : Formater les chaînes de caractère VBA

Bonjour Victor21,

Non je n'ai pas envisagé cette option mais je vais aller l'essayer de ce pas voir comment est-ce que ça fonctionne et si ça peut répondre à un certain nombre de problématique

Encore merci

Mise à jour du post :

Cette option peut être intéressante cependant les modification des options Excel seront-elles liées à mon ordinateur ou au fichier ? est-ce que si je les modifie elles vont s'appliquer par défaut à tes mes fichiers ? Est-ce que d'autres utilisateurs pourront en bénéficier ?
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
308
Réponses
10
Affichages
302

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.