Mise en forme conditionnelle avec formule

  • Initiateur de la discussion Initiateur de la discussion C@thy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...🙄), il m'en faut encore un peu plus😱,
à 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

Dernière édition:
Re : Mise en forme conditionnelle avec formule

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...
Dans le fichier que j'ai posté, normalement ça insère la virgule au bon endroit et le +, ou le -, au début de la valeur.
Et ça laisse les zéros pour avoir toujours la même longueur de chaîne de 41 caractères suite à la mise en forme : insertion d'espaces, du signe (+ ou -) et de la virgule.


Bref, bonne chance pour la suite.
@+
 
Re : Mise en forme conditionnelle avec formule

Ben non, Marcel en fait on l'appelle Jacky habituellement... 😉

(il me semble bien avoir déjà demandé par deux fois s'il était possible de changer de pseudo, mais je n'ai pas eu de réponse de la part de l'admin)
 
Dernière édition:
Re : Mise en forme conditionnelle avec formule

Hihi vous êtes de joyeux lurons tous les deux.

Marcel ou Jacky, je ne peux pas ouvrir ton fichier, peux-tu le mettre en pièce jointe?

Donc, je reprends, Gérard tu as fait un super boulot, j'adore ton replace. Marcel ou Jacky, tu as sans doute fait du bon boulot aussi, mais je ne peux pas le vérifier.

Merci à vous deux.

C@thy
 
Re : Mise en forme conditionnelle avec formule

Ca marche très bien, Marcel-Jacky🙂
j'ai combiné avec les espaces de job75 alias Gérard (ou l'inverse!) :
dest(, 3 + i) = s(i)
dest(, 3 + i) = InsertEspace(dest(, 3 + i))

Le résultat est là...

Un grand MERCI à vous deux pour cette... usine à gaz🙂... qui fonctionne.

Youpiiiiiiiii!

C'est super, merci beaucoup.

Bises à vous deux et bonne soirée

C@thy
 
Re : Mise en forme conditionnelle avec formule

Bonjour C@thy, hello Jacky,

Je reviens sur ce fil malgré l'usine à gaz pour t'éviter de faire des bêtises 🙄

Si tu utilises le code de Marcel32 il ne faut pas utiliser mon code car le sien insère des espaces.

Par ailleurs ce code est peut-être plus "limpide" :

Code:
Function Traitement(t As String)
Dim a, L As Integer, i As Integer
t = Trim(t) 'supprime les espaces à gauche et à droite
Select Case Mid(t, 7, 1)
  Case 1
    a = Array(7, 8, 9, 13, 15, 17)
    t = Nombre(t) 'traitement du nombre
  Case 2: a = Array(7, 8) 'et non pas 7, 8, 9...
  Case Else: Traitement = t: Exit Function
End Select
'---insertion d'espaces---
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
Traitement = t
End Function

Function Nombre(t As String)
Dim n As Variant, c As Byte
n = Val(Right(t, 8)) / 10
c = Asc(Right(t, 1))
Select Case c
 Case 233, 123: n = Format(n, "+0.0") & 0 'é ou {
 Case 232, 125: n = Format(n, "-0.0") & 0 'è ou }
 Case 65 To 73: n = Format(n, "+0.0") & Chr(c - 16) 'A à I
 Case 74 To 82: n = Format(n, "-0.0") & Chr(c - 25) 'J à R
 Case Else: Nombre = t: Exit Function
End Select
Nombre = Left(t, Len(t) - 8) & n
End Function
Deux remarques :

- le traitement des nombres n'a lieu que pour le cas "1"

- pour le cas "2" l'insertion d'espaces n'a lieu que pour 7, 8 et non pas pour 7, 8, 9.

Fichier (3).

A+
 

Pièces jointes

Re : Mise en forme conditionnelle avec formule

Je viens de voir que j'avais fait un copier/coller et oublié de modifier une valeur dans mon bout de code...

Du coup les résultats sont erronés pour les lettres allant de J à R, pour lesquelles il fallait en fait mettre :
Valeur = "-" & Left(Valeur, 7) & Chr(Asc(Rcode) - 29)
 
Re : Mise en forme conditionnelle avec formule

Oui, c'est bien 25 et non 29 comme je l'ai écrit dans mon post précédent, mais surtout ce n'est pas 16 comme écrit dans le code. 😉

Ou, de façon plus simple pour être sûr de ne pas se tromper de A à R :
Valeur = "-" & Left(Valeur, 7) & Chr(48 + (Asc(Rcode) - 1) Mod 9)
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
108
Réponses
25
Affichages
632
Réponses
6
Affichages
164
Retour