Excel : format cellule

kabeha

Membre expert
Club iGen
13 Mai 2002
1 323
54
60
Bourg en Bresse
Bonjour,

Je n'arrive pas à créer un format personnalisé qui me convertisse une valeur de type A01B01 (sans espace) en A01 B01 (avec). Ça marche avec des valeurs numériques (format 000 000) mais avec des lettres :confused:
 
Je ne vois pas de solution par les "Formats". Différentes solutions peuvent s'appliquer tout de même, selon le besoin. La plus simple étant de passer par une colonne additionnelle avec une formule de type =DROITE(A1;3)&" "&GAUCHE(A1;3)

Sinon, on peut aussi faire en sorte de rajouter un espace par macro (Excel 2004). Bref, à voir selon les besoins et le contexte...
 
Salut,

Voici une petite macro (Excel 2004)

Sub essai()
Dim cellule As Object
For Each cellule In Selection
cellule = Left(cellule, 3) & " " & Right(cellule, 3)
Next
End Sub


Lui associer un bouton dans la feuille, sélectionner la plage à traiter, puis clic sur le bouton... et hop!;)
 
Ce que je voulais c'est que la personne saisisse la valeur sans espace pour lui faciliter la tâche (bcp de valeurs) mais qu'à l'affichage il y ait l'espace pour une lecture plus claire.
Si ce n'est pas possible avec un format, je créerai une nouvelle feuille avec une formule.
Merci pour vos réponses.
 
Si tu utilises la macro ci-dessus, pas besoin de formule !
la personne encode sans espace, sélectionne les cellules, puis clique sur le bouton!!!
mais bon, fais comme bon te semble :)
 
Si tu utilises la macro ci-dessus, pas besoin de formule !
J'avais bien compris, mais je voudrais éviter le plus de manip, la personne n'a jamais utilisé excel, alors, entre 'sélectionner la plage de cellules' (avec risque d'erreur) puis cliquer sur le bouton de la macro, et créé une deuxième feuille en copie de la feuille de saisie avec une formule sur la plage de cellule et il n'aurait qu'à changer de feuille pour l'impression…:nailbiting:

A propos de macro, comment faire pour comparer les valeurs de plusieurs cellules et leur appliquer une couleur et un format si les 3 derniers chiffres sont égaux, c-a-d :

A1 : 789456123
A2 : 789654321
A3 : 987546123
macro —>
A1 : 789456123
A2 : 789654321
A3 : 987546123

Un coup de boule en remerciement :up:
 
Il me faut un peu plus de détails :
1) faut-il colorier toutes les cellules se terminant par 123 ?
2) faut-il colorier toutes les cellules se terminant par 3 chiffres que l'on peut choisir ?
3) faut-il colorier dans la même couleur toutes les cellules se terminant par les mêmes 3 chiffres (exemple en jaune celle se terminant par 123, en vert celles se terminant par 325, etc); si c'est ce problème-ci, il y a 1000 cas possibles .... et donc dur dur pour le choix des couleurs !

je pense qu'il sera difficile (mais je n'ai jamais essayé) de mettre le contenu en 2 couleurs différentes, mais par contre il est facile de mettre tout le contenu dans la même couleur.

Dès que j'ai un peu plus de précisions, je m'y attèle ...
;) pour les boules ...
 
Pour colorier une partie du contenu d'une cellule, il est obligatoire que celle-ci soit au format TEXTE (la couleur va disparaître dès qu'on la remet au format NUMERIQUE); mais apparemment, excel accepte de faire des calculs arithmétiques avec ce format de cellule, pour autant évidemment qu'elle n'est composée QUE de chiffres.
 
J'avais bien compris, mais je voudrais éviter le plus de manip, la personne n'a jamais utilisé excel, alors, entre 'sélectionner la plage de cellules' (avec risque d'erreur) puis cliquer sur le bouton de la macro, et créé une deuxième feuille en copie de la feuille de saisie avec une formule sur la plage de cellule et il n'aurait qu'à changer de feuille pour l'impression…:nailbiting:

si tu donnes un poisson à quelqu'un, il ne mangera qu'une seule fois; si tu lui apprend à pêcher, il mangera toute sa vie....
 
En attendant plus de précisions :

Sub couleur_selection()
'met en rouge italique les 3 derniers caractères d'une chaîne de 9 si ces 3 caractères sont 123
'
Dim cellule As Object, x As String
For Each cellule In Selection
cellule.NumberFormat = "@"
x = cellule
If Right(x, 3) = "123" Then
cellule = x
cellule.Characters(Start:=1, Length:=0).Font.ColorIndex = xlAutomatic
cellule.Characters(Start:=7, Length:=0).Font.ColorIndex = 3
cellule.Characters(Start:=7, Length:=0).Font.FontStyle = "Italique"
End If
Next
End Sub
 
Il me faut un peu plus de détails :
1) faut-il colorier toutes les cellules se terminant par 123 ?
2) faut-il colorier toutes les cellules se terminant par 3 chiffres que l'on peut choisir ?
3) faut-il colorier dans la même couleur toutes les cellules se terminant par les mêmes 3 chiffres (exemple en jaune celle se terminant par 123, en vert celles se terminant par 325, etc); si c'est ce problème-ci, il y a 1000 cas possibles .... et donc dur dur pour le choix des couleurs !

il faudrait colorier en rouge les 3 derniers chiffres chaque qu'au moins deux cellules ont ces 3 derniers chiffres égaux, soit :

A1 = 799455123
A2 = 756784123
A3 = 485617537
A4 = 485478123
A5 = 475954598
A6 = 458921572
A7 = 158450598

dur dur ? :siffle:
 
il faudrait colorier en rouge les 3 derniers chiffres chaque qu'au moins deux cellules ont ces 3 derniers chiffres égaux, soit :

A1 = 799455123
A2 = 756784123
A3 = 485617537
A4 = 485478123
A5 = 475954598
A6 = 458921572
A7 = 158450598

dur dur ? :siffle:

je crois pas, mais plus ce soir, suis fatigué :sleep: et grosse journée demain.
Quelle est approximativement la quantité de cellules à traiter? Sont-elles toujours dans 1 seule colonne?
 
il faudrait colorier en rouge les 3 derniers chiffres chaque qu'au moins deux cellules ont ces 3 derniers chiffres égaux, soit :

A1 = 799455123
A2 = 756784123
A3 = 485617537
A4 = 485478123
A5 = 475954598
A6 = 458921572
A7 = 158450598

dur dur ? :siffle:

Le faire, oui, c'est possible, mais simplement, alors là, clairement, c'est non ! C'est quoi, la finalité de la chose ?
 
Il s'agit d'éditer une liste de références produits dont on utilise communément que les 3 derniers chiffres. On doit aller chercher en stock une 123, mais on peut avoir plusieurs références se terminant par 123, situées en différents lieux (avec système d'adressage).

En général, l'utilisateur sait quelle pièce il veut et sait par habitude où la chercher. Le problème est quand ce n'est pas l'utilisateur habituel ou le responsable qui sait que la 123 pour untel se trouve à telle adresse.

Il s'agit simplement d'avoir une alerte visuelle sur le listing qui nous rappelle de se munir de la référence complète 7420456123 par ex. pour aller chercher la bonne pièce.

Je ne sais pas si mon explication est claire :mouais: :siffle:
 
Si si, c'est clair … :nailbiting: … Enfin, disons plutôt que "j'ai compris le sens de ta préoccupation" :D

Alors, à priori, on va avoir deux phases : le traitement du "gros", et les "mises à jour"

Pour le traitement du gros, va falloir une macro assez chiadée, pour les "mises à jour" (j'entends par là l'ajout de nouvelles références), le plus simple sera le traitement manuel au fur et à mesure.

Pour la macro, dès que j'ai cinq minutes dans la journée ou la soirée, je jette un œil, et je reviens ici.
 
Il s'agit simplement d'avoir une alerte visuelle sur le listing qui nous rappelle de se munir de la référence complète 7420456123 par ex. pour aller chercher la bonne pièce.
Tu peux obtenir ça par macro. Maintenant, tu peux aussi obtenir quelque chose d'assez proche avec une "Mise en forme conditionnelle..." (menu "Format".

Il faut recourir à une colonne dédié (éventuellement masquée, mais attention à la recopier vers le bas suffisamment si tu dois rajouter régulièrement des lignes). Dans cette colonne (mettons la colonne B:B) tu mets une formule qui extrait les trois derniers caractères des références (qui sont dans la colonne A:A) :
=DROITE(A2;3)

Ensuite, tu appliques à la cellule A2 (supposément la première contenant une référence) une mise en forme conditionnelle en choisisssant comme condition "La formule est" dans le menu déroulant et dans le champ tu tapes :
=NB.SI($B:$B;B2)>1

Puis tu choisis un format caractéristique, par exemple la police en gras et rouge, ou dans les motifs, un fond de cellule jaune,... et tu valides par "OK".

Si ta cellule contient une valeur dont les trois derniers chiffres sont communs avec au moins une autre cellule de la colonne A:A, le format appliqué distinguera ta cellule. Tu peux maintenant copier la cellule et faire un "Collage spécial..." en ne collant que le format sur toutes les cellules concernées (voire toute la colonne).

Une macro te permettra d'obtenir plus ou moins la même chose, mais en limitant la modification aux trois derniers caractères, et sans colonne additionnelle. Mieux encore, la modif peut aussi se faire par le biais d'une macro événementielle, ce qui permet de la rendre totalement automatique (par exemple à l'enregistrement du classeur, etc...)
 
Je n'arrive pas à créer un format personnalisé qui me convertisse une valeur de type A01B01 (sans espace) en A01 B01 (avec).
Bon, allez, tant qu'on en est à réfléchir aux macros événementielles (qui permettent aux modifs d'être apportées automatiquement, sans que l'utilisateur ait quoi que ce soit de particulier à faire) voici une solution pour le premier problème évoqué.

En partant du principe que la saisie se fait dans les cellules A2:A200 (à adapter aux besoins réels), voilà une macro qui va rajouter un espace dans le groupe :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
MaCellule = Target.Address
isect = Intersect(Range(MaCellule), Range("A2:A200")) ' à adapter
If IsNull(isect) Then Exit Sub
isect = Left(isect, 3) & " " & Right(isect, 3)
Range(MaCellule) = isect
Application.EnableEvents = True
End Sub

Pour que ça fonctionne, il faut coller le code dans la page correspondant à la feuille de calcul concernée. Le plus simple, c'est de faire un clic droit sur l'onglet de la feuille et demander "Visualiser le code". Cela va t'ouvrir l'éditeur VBA directement sur une page dans laquelle tu peux coller les lignes ci-dessus. Puis tu le refermes et, si tout va bien, à chaque saisie d'une valeur dans la colonne A, elle se verra automatiquement complétée.
 
en voici une autre ...
ya pas de formules, pas de colonnes complémentaires, il faut juste sélectionner la plage et cliquer sur un bouton...et tous les doublons sont coloriés.

Sub jmd()
'met en rouge les 3 derniers caractères d'un nombre de 9 chiffres'
'pour autant que ces 3 caractères ont au moins 1 doublon dans la liste sélectionnée
'maximum 400 cellules, sinon modifier instruction dim t(400,2)

Dim cellule As Object, x As String
Dim i, k, nb_cell As Integer
Dim t(400, 2)

' mise au format texte, comptage des cellules
' et création du tableau pour tester les doublons
'------------------------

k = 0
For Each cellule In Selection
cellule.NumberFormat = "@"
k = k + 1
t(k, 1) = Right(cellule, 3)
t(k, 2) = 0
nb_cell = nb_cell + 1
Next

'comptage des doublons
'----------------
For k = 1 To nb_cell
x = t(k, 1)
For i = 1 To nb_cell
If t(i, 1) = x Then
t(k, 2) = t(k, 2) + 1
End If
Next i
Next k

' test
For k = 1 To nb_cell
Cells(k, 6) = t(k, 1)
Cells(k, 7) = t(k, 2)
Next k

'traitement des cellules
'---------------------
k = 0
For Each cellule In Selection
k = k + 1
If t(k, 2) > 1 Then
x = cellule
cellule = x
cellule.Characters(Start:=1, Length:=0).Font.ColorIndex = xlAutomatic
cellule.Characters(Start:=7, Length:=0).Font.ColorIndex = 3
cellule.Characters(Start:=7, Length:=0).Font.FontStyle = "Italique"
End If
Next

End Sub
 
Dernière édition par un modérateur: