Mise en forme conditionnelle avec formule

C@thy

XLDnaute Barbatruc
Bonjour le fofo,

j'ai réussi à faire une mfc qui me repère les lignes dont la colonne E contient plusieurs fois une chaine de caractères (nommée chaine) dans la même cellule. Je colore en jaune la colonne B, jusque là c'est parfait... (exemple joint)

mais, C@thy étant toujours C@thy (on ne change pas les rayures du zèbre...:rolleyes:), il m'en faut encore un peu plus:eek:,
à savoir que j'aimerais mettre aussi en jaune les autres valeurs de la colonne B qui sont égales à la valeur mise en jaune quelle que soit la valeur de la colonne A... (donc tous les codes identiques en B à celui peint en jaune)...

Est-ce possible???

Question subsidiaire, liée :

il va me falloir refaire cette opération pour plusieurs chaines de caractères différentes, ne vaut-il pas mieux écrire une ch'tite macro qui demanderait la chaîne à chaque fois???*

Un très grand Merci pour votre aide.

Bises​
 

Pièces jointes

  • mfc test.xlsx
    9.9 KB · Affichages: 128
Dernière édition:

job75

XLDnaute Barbatruc
Re : ise en forme conditionnelle avec formule

Coucou C@thy,

Peut-être, mais je ne l'aurais pas trouvé...

Je suis sûr que si, mais il fallait que tu prennes le temps de bien comprendre tout ce que fait la macro.

En passant un petit complément qui supprime les espaces inutiles :

Code:
dest(, 3 + i) = Application.Trim(Left(code & s(i), 32))
Application.Trim c'est SUPPRESPACE.

A+
 

C@thy

XLDnaute Barbatruc
Re : ise en forme conditionnelle avec formule

Un très grand MERCIiiiiiii à toi, j'ai juste mis 26 àla place de 32 et 20 comme longueur de grade et c'est parfait...

J'attends de voir ce qu'en diront les utilisateurs (qui comme moi en veulent toujours plus...)

Bizz

C@thy
 

C@thy

XLDnaute Barbatruc
Re : ise en forme conditionnelle avec formule

Aïe aïe aïe...
je savais bien que ça allait se compliquer...
ça plaît beaucoup à l'utilisateur, mais... il en veut encore plus (évidemment!)

du coup il va falloir changer le
dest(, 3 + i) = Application.Trim(Left(Code & s(i), 26))


qui pourtant me plaisait bien...

Afin d’améliorer la lisibilité de la cellule, il faut insérer des blancs.
  • Si le 7[SUP]ème[/SUP] caractère de la zone globale de 32 caractères vaut « 1 »
    • Il s’agit d’une zone dite « montant »
    • Insérer un blanc devant les positions : 7, 8, 9, 13, 15, 17
Pos 1 à 6Pos 7Pos 8Pos 9 à 12Pos 13 à 14Pos 15 à 16Pos 17 à 24Pos 25 à 32
20060410021850JD

  • Si le 7[SUP]ème[/SUP] caractère de la zone globale de 32 caractères vaut « 2 »
    • Il s’agit d’une zone dite « libellé »
    • Insérer un blanc devant les positions : 7, 8, 9
Pos 1 à 6Pos 7Pos 8 à 32
2006042TROP-PERCU MA: 4,20


La virgule doit être positionnée pour obtenir un montant à 2 décimales
Tableau de correspondance :
Caractère initialCaractère convertiCaractère initialCaractère converti
é+ 0 è- 0
A+ 1J- 1
B+ 2K- 2
C+ 3L- 3
D+ 4M- 4
E+ 5N- 5
F+ 6O- 6
G+ 7P- 7
H+ 8Q- 8
I+ 9R- 9
}- 0{+ 0


exemple : « 0001943B » devient « +194,32 » Le B signifie + devant et 2 à la fin...
Attention : pour la zone « 0001254P » il faut restituer « -125,47 » : le P signifie - devant et 7 à la fin!...

C'est possible par macro, ça?

sinon je rajoute des colonnes entre chaque et je le fais par formule...

Si c'est trop compliqué, j'ai remarqué un point commun : un espace devant les positions 7,8 et 9, on peut peut-être se limiter à ça et donc ne pas tester si le 7ème car. est 1 ou 2... (ça devient un peu une usine à gaz, non?:rolleyes:)

Merci et bises

C@thy
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Re,

Pour l'insertion des espaces tu peux utiliser cette fonction VBA :

Code:
Function InsertEspace(t As String)
Dim a, i As Integer
Select Case Mid(t, 7, 1)
  Case 1: a = Array(7, 8, 9, 13, 15, 17)
  Case 2: a = Array(7, 8, 9)
  Case Else: InsertEspace = t: Exit Function
End Select
For i = Len(t) To 1 Step -1
  If IsNumeric(Application.Match(i, a, 0)) Then _
    t = Application.Replace(t, i, 0, " ") 'fonction REMPLACER
Next
InsertEspace = t
End Function
Dans la macro tu l'appelles comme ceci :

Code:
dest(, 3 + i) = InsertEspace(Left(code & s(i), 32))
Mais tout ça me paraît bizarre car dans le fichier que tu as joint il y a déjà plein d'espaces...

A+
 

TooFatBoy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

A mon avis, si tu veux que quelqu'un reprenne la main, il faudra envoyer le dernier fichier en date pour être sûr de repartir sur les bonnes bases et non sur un fichie rprécédent. ;)


Deux questions, juste par curiosité :

1- Es-tu sûre qu'il n'y a pas moyen d'exporter les données un peu différemment vers le fichier .txt, histoire d'essayer de simplifier le travail dans Excel ?

2- Au début j'ai cru comprendre que la mise en couleur était juste là pour attirer l'attention de la personne travaillant sur le fichier, mais que tout le boulot était ensuite fait manuellement par cette personne. Mais maintenant que c'est la macro qui fait tout, la mise en couleur est-elle toujours utile (peut-être pour simplifier une éventuelle vérification manuelle) ?



[edit]
Bon ben c'est cool, apparemment l'ami Job75 continu tout de même à t'aider. :)
[/edit]

++
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Merci vous deux qui ne m'abandonnez pas. Ces utilisateurs sont vraiment impossibles.

Oui Gérard, c'est vrai il y a plein d'espaces partout où on ne les souhaite pas, mais comme par hasard il n'y en a pas au milieu des zones de 32 car...et c'est justement là où ils en voudraient... va comprendre, Charles!

C'est vrai j'avais bien pensé à reprendre l'import mais en fait la zone de 32 doit rester complète et non séparée en colonnes.

La macro de job fait du bon boulot... et Gérard aussi!... C'est cool..

oui la couleur jaune c'est pour les repérer du 1er coup, très utile, mais ça n'empêche pas le reste du traitement très utile aussi.

Encore Merci.

Pour le reste, c'est d'une complexité à s'arracher tous les cheveux...
22 cas possibles, rien que ça! Le fichier .txt est un peu pourri au départ.
Il contient les infos mais qu il faut décoder... sans dec!!! Cest un truc de ouf...surtout avec le système des + et des -. Faut être tordu pour inventer un truc pareil... (je savais qu'ils étaient tordus, mais à ce point je n'imaginais pas!...

Bonne soiréche...

C@thy
 

TooFatBoy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Ce n'est pas du joli code comme celui de Job75 mais, si besoin, je te propose ce fichier, basé sur le dernier fichier posté précédemment dans ce fil de discussion.
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Un très très grand merci à tous deux.

Marcel32, je ne peux pas aller chercher ton fichier, on a des firewalls partout...

Gérard, c'est supernickel chrome, comme d'hab... de la belle ouvrage...

Bises

C@thy
 

job75

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Bonjour C@thy, Marcel32,

Je reviens avec une solution plus simple et surtout plus rapide :

Code:
Function InsertEspace(t As String)
Dim a, L As Integer, i As Integer
Select Case Mid(t, 7, 1)
  Case 1: a = Array(7, 8, 9, 13, 15, 17)
  Case 2: a = Array(7, 8, 9)
  Case Else: InsertEspace = t: Exit Function
End Select
L = Len(t)
For i = UBound(a) To 0 Step -1
  If a(i) <= L Then t = Application.Replace(t, a(i), 0, " ") 'fonction REMPLACER
Next
InsertEspace = t
End Function
Seulement les tableaux a doivent être classés par valeurs croissantes.

Bonne journée et A+
 

C@thy

XLDnaute Barbatruc
Re : Mise en forme conditionnelle avec formule

Super Gérard.

De mon côté j'ai avancé sur le sujet : avec une table de correspondance j'arrive à transformer la lettre de fin de bloc de 32 car. en +1 ou -7 par ex., il reste à mettre une virgule avant les 2 derniers chiffres et mettre le + ou le - devant le chiffre...

Je suis en train de bosser sur une petite macro à part qui ferait ça et qu'on lancerait après avoir fait le traitement principal, qui fonctionne très très bien, grâce à toi!... Je pensais le faire par formules mais on a jusqu'à 8 colonnes de données...

Merci à toi, c'est parfait!!

Bises

C@thy
 

Discussions similaires

Réponses
12
Affichages
158

Statistiques des forums

Discussions
311 720
Messages
2 081 925
Membres
101 841
dernier inscrit
ferid87