OVH Cloud OVH Cloud

Mefc sur une partie de plage aléatoire en VBA.

19 réponses
Avatar
Patrick BASTARD
Bonsoir à tou(te)s

Je n'arrive pas à écrire le code qui me permettrait, à partir de la
sélection d'une zone (pas toujours la même, mais même nb de colonnes, nb de
lignes différent), d' appliquer une MEFC sur la première colonne dans cette
zone, appliquer une autre MEFC de la 3° à la 5° colonne dans cette zone.
Pas de soucis pour définir les MEFC, mais plutôt pour appliquer ces MEFC aux
parties désirées de la zone sélectionnée.
(Je ne souhaite pas sélectionner manuellement les différentes parties de ma
zone, afin d'automatiser cette opération au maximum.)

Un p'tit coup d'main me serait bien utile, et mes remerciements anticipés
vous sont d'ores et déjà acquis.


--
Bien amicordialement,
P. Bastard

9 réponses

1 2
Avatar
Patrick BASTARD
Bonjour, *Thierryp* , et *tous Lézotres*

Je pensais que...
Et puis non.
:-(

Voici ce que je souhaite automatiser en VBA :
Quand la plage variable sélectionnée est par exemple A910:S985 (ou les
lignes 910 à 985), appliquer sur la zone H910:I985 cette mise en forme :

1° condition : la formule est :
=ET(H910<=PETITE.VALEUR(H$910:H$985;5);H910<>"")
Fond rouge
2° condition : la formule est : =ET(H910<MOYENNE(H$910:H$985);H910<>"")
Fond orange

L'enregistreur, bête et méchant, me met les références que je saisis, (H910,
H$910, H$985) et non le début et la fin de la zone, et je ne suis pas
parvenu à adapter.

Une idée ?

D'avance, Merciii.

--
Bien amicordialement,
P. Bastard


Bonjour Patrick,

Une ébauche de solution ci-dessous :

Sub PlageSelection()
Set plg = Selection
With plg
Plg_Adresse = .Address
Plg_Première = .Item(1).Address
Plg_Dernière = .Item(plg.Count).Address
Nbre_Lignes = .Item(plg.Count).Row - .Item(1).Row
End With
Range(Range(Plg_Première), Range(Plg_Première).Offset(Nbre_Lignes,
0).Address).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual,
Formula1:="10"
Selection.FormatConditions(1).Interior.ColorIndex = 8
End Sub

Tu sélectionnes une zone, ce bout de proc sélectionnes la 1ère colonne
et applique un format conditionnel.

Je devines que tu n'auras pas de mal à adapter..... :-))))))))

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

Bonsoir à tou(te)s

Je n'arrive pas à écrire le code qui me permettrait, à partir de la
sélection d'une zone (pas toujours la même, mais même nb de
colonnes, nb de lignes différent), d' appliquer une MEFC sur la
première colonne dans cette zone, appliquer une autre MEFC de la 3°
à la 5° colonne dans cette zone. Pas de soucis pour définir les
MEFC, mais plutôt pour appliquer ces MEFC aux parties désirées de la
zone sélectionnée. (Je ne souhaite pas sélectionner manuellement les
différentes parties de ma zone, afin d'automatiser cette opération
au maximum.) Un p'tit coup d'main me serait bien utile, et mes
remerciements
anticipés vous sont d'ores et déjà acquis.




Avatar
Patrick BASTARD
Pour info, voici le code "brut de décoffrage" que me donne l'enregistreur :

Range("D910:D985").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"Ù10>=GRANDE.VALEUR($D$910:$D$985;10)"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 43

Range("E910:E985").Select
Range("E985").Activate
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ET(E985<=PETITE.VALEUR($E$910:$E$985;5);E985<>"""")"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ET(E985<MOYENNE(E$910:E$985);E985<>"""")"
Selection.FormatConditions(2).Interior.ColorIndex = 44

Range("H910:H985").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ET(H910<=PETITE.VALEUR(H$910:H$985;5);H910<>"""")"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ET(H910<MOYENNE(H$910:H$985);H910<>"""")"
Selection.FormatConditions(2).Interior.ColorIndex = 44

Range("J910:J985").Select
Range("J985").Activate
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=J985>=GRANDE.VALEUR(J$910:J$985;5)"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 3
Range("K910:K985").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=K910>=GRANDE.VALEUR($K$910:$K$985;10)"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 3
Selection.FormatConditions.Add Type:=xlExpression,
Formula1:="=K910>0.07"
Selection.FormatConditions(2).Interior.ColorIndex = 44

Range("M910:S985").Select
Range("M985").Activate
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=M985>=GRANDE.VALEUR(M$910:M$985;5)"
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 2
End With
Selection.FormatConditions(1).Interior.ColorIndex = 3
End Sub


--
Bien amicordialement,
P. Bastard
Avatar
Thierryp
Bonjour,

Désolé, je ne vois ton post que maintenant... Je pense qu' à partir du
bout de code que j'ai posté, tu peux sélectionner la plage qui
t'intéresse par un offset. A partir de là, en bouclant sur chaque
cellule, tu dois pouvoir lui appliquer ton format...mais là, j'ai comme
qui dirait des petits soucis de syntaxe :-((( Je dois avoir atteint mon
seuil d'incompétence !
Relance un post tout beau tout neuf sur le sujet, y a plein de tout bons
sur le forum !!

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

Bonjour, *Thierryp* , et *tous Lézotres*

Je pensais que...
Et puis non.
:-(

Voici ce que je souhaite automatiser en VBA :
Quand la plage variable sélectionnée est par exemple A910:S985 (ou les
lignes 910 à 985), appliquer sur la zone H910:I985 cette mise en forme :

1° condition : la formule est :
=ET(H910<=PETITE.VALEUR(H$910:H$985;5);H910<>"")
Fond rouge
2° condition : la formule est : =ET(H910<MOYENNE(H$910:H$985);H910<>"")
Fond orange

L'enregistreur, bête et méchant, me met les références que je saisis, (H910,
H$910, H$985) et non le début et la fin de la zone, et je ne suis pas
parvenu à adapter.

Une idée ?

D'avance, Merciii.



Avatar
Patrick BASTARD
Bosoir, *Thierryp*

Merci d'avoir répondu.


Désolé, je ne vois ton post que maintenant...
Vraiment aucune raison ;-)


mais là, j'aicomme qui dirait des petits soucis de syntaxe
Nous sommes alors au moins deux ;-)


Relance un post tout beau tout neuf sur le sujet,
Je vais attendre un p'tit peu, pour ne pas encombrer le forum.


y a plein de tout bons sur le forum !!
Non ?



--
Bien amicordialement,
P. Bastard

Avatar
Thierryp
Bonjour Patrick,

Si tu peux tester ceci, je pense que ça doit le faire :

Sub PlageSelection()
Set plg = Selection
With plg
' Plg_Adresse = .Address
Plg_Première = .Item(1).Row
Plg_Dernière = .Item(plg.Count).Row
' Nbre_Lignes = .Item(plg.Count).Row - .Item(1).Row
End With
Set Plage_A_Traiter = Range(Range("H" & Plg_Première), Range("I" &
Plg_Dernière))
Plage_A_Traiter.FormatConditions.Delete
For Each c In Plage_A_Traiter
' 1ère condition :
MEFC = "=ET(" & c.Address & "<=" & "PETITE.VALEUR(" _
& "H$" & Plage_A_Traiter.Item(1).Row & ":H$" & _
Plage_A_Traiter.Item(Plage_A_Traiter.Count).Row & ";5);" _
& c.Address & "<>" & Chr(34) & Chr(34) & ")"
c.FormatConditions.Add Type:=xlExpression, Formula1:=MEFC
c.FormatConditions(1).Interior.ColorIndex = 3
' 2ème condition :
MEFC = "=ET(" & c.Address & "<" & "MOYENNE(" _
& "H$" & Plage_A_Traiter.Item(1).Row & ":H$" & _
Plage_A_Traiter.Item(Plage_A_Traiter.Count).Row & ";5);" _
& c.Address & "<>" & Chr(34) & Chr(34) & ")"
c.FormatConditions.Add Type:=xlExpression, Formula1:=MEFC
c.FormatConditions(2).Interior.ColorIndex = 45
Next c
End Sub

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

Bosoir, *Thierryp*

Merci d'avoir répondu.


Désolé, je ne vois ton post que maintenant...
Vraiment aucune raison ;-)


mais là, j'aicomme qui dirait des petits soucis de syntaxe
Nous sommes alors au moins deux ;-)


Relance un post tout beau tout neuf sur le sujet,
Je vais attendre un p'tit peu, pour ne pas encombrer le forum.


y a plein de tout bons sur le forum !!
Non ?






Avatar
Patrick BASTARD
Bonjour, *Thierryp*

J'ai travaillé une partie de l'après-midi sur ta proposition, et ne suis pas
encore arrivé à grand chose.
La sélection de la zone à traiter me convient parfaitement.
La syntaxe de la MEFC me déroute encore un peu, avec toutes ces
concaténations, mais je pense qu'avec un peu d'application je devrais m'en
sortir.
Après tout, quand je pense au temps que j'ai passé, naguère, à apprendre les
tables de multiplications...

Encore merci pour ton aide,

--
Bien amicordialement,
P. Bastard

Sub PlageSelection()
Set plg = Selection
With plg
' Plg_Adresse = .Address
Plg_Première = .Item(1).Row
Plg_Dernière = .Item(plg.Count).Row
' Nbre_Lignes = .Item(plg.Count).Row - .Item(1).Row
End With
Set Plage_A_Traiter = Range(Range("H" & Plg_Première), Range("I" &
Plg_Dernière))
Plage_A_Traiter.FormatConditions.Delete
For Each c In Plage_A_Traiter
' 1ère condition :
MEFC = "=ET(" & c.Address & "<=" & "PETITE.VALEUR(" _
& "H$" & Plage_A_Traiter.Item(1).Row & ":H$" & _
Plage_A_Traiter.Item(Plage_A_Traiter.Count).Row & ";5);" _
& c.Address & "<>" & Chr(34) & Chr(34) & ")"
c.FormatConditions.Add Type:=xlExpression, Formula1:=MEFC
c.FormatConditions(1).Interior.ColorIndex = 3
' 2ème condition :
MEFC = "=ET(" & c.Address & "<" & "MOYENNE(" _
& "H$" & Plage_A_Traiter.Item(1).Row & ":H$" & _
Plage_A_Traiter.Item(Plage_A_Traiter.Count).Row & ";5);" _
& c.Address & "<>" & Chr(34) & Chr(34) & ")"
c.FormatConditions.Add Type:=xlExpression, Formula1:=MEFC
c.FormatConditions(2).Interior.ColorIndex = 45
Next c
End Sub



Avatar
ThierryP
Re, Patrick,

Selon mes tests, ça écrit bien ta formule dans les MEFC. Je n'avais pas
le temps de créer un tableau de valeurs, donc j'ai utilisé deux MEFC
plus simples, qui ont fonctionnées.
Pour les concaténations, if faut juste se souvenir que, pour écrire une
condition A1<> "", il faut utiliser ...& "A1<>" & chr(34) & chr(34),
sinon VBA et moi on ne s'y retrouvent plus :-)))))))

Bonjour, *Thierryp*

J'ai travaillé une partie de l'après-midi sur ta proposition, et ne suis pas
encore arrivé à grand chose.
La sélection de la zone à traiter me convient parfaitement.
La syntaxe de la MEFC me déroute encore un peu, avec toutes ces
concaténations, mais je pense qu'avec un peu d'application je devrais m'en
sortir.
Après tout, quand je pense au temps que j'ai passé, naguère, à apprendre les
tables de multiplications...

Encore merci pour ton aide,



--


@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet - G. Courteline

Avatar
Patrick BASTARD
Bonjour, *ThierryP*

Merci encore. Ca avance.
Lentement, mais sûrement.
;-)
--
Bien amicordialement,
P. Bastard

Re, Patrick,

Selon mes tests, ça écrit bien ta formule dans les MEFC. Je n'avais
pas le temps de créer un tableau de valeurs, donc j'ai utilisé deux
MEFC plus simples, qui ont fonctionnées.
Pour les concaténations, if faut juste se souvenir que, pour écrire
une condition A1<> "", il faut utiliser ...& "A1<>" & chr(34) &
chr(34), sinon VBA et moi on ne s'y retrouvent plus :-)))))))

Bonjour, *Thierryp*

J'ai travaillé une partie de l'après-midi sur ta proposition, et ne
suis pas encore arrivé à grand chose.
La sélection de la zone à traiter me convient parfaitement.
La syntaxe de la MEFC me déroute encore un peu, avec toutes ces
concaténations, mais je pense qu'avec un peu d'application je
devrais m'en sortir.
Après tout, quand je pense au temps que j'ai passé, naguère, à
apprendre les tables de multiplications...

Encore merci pour ton aide,




Avatar
ThierryP
De rien :-)))

Bonjour, *ThierryP*

Merci encore. Ca avance.
Lentement, mais sûrement.
;-)


--


@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet - G. Courteline

1 2