Flux rss
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Excel - macro (mise en forme conditionnelle)

chewi, le jeudi 31 août 2006 à 22:43:11 
 Signaler ce message aux modérateurs

Bonjour au forum,

Voilà mon mon problème:

J'ai créé une macro qui transfère des données d'une feuille à une autre à des endroits variant suivant la valeur d'une cellule. ( 4 possibilités : AV,RV,RP et AP )

Je mets ensuite en format conditionnel (verte ou rouge) une des cellules transférées (moyenne de 3 autres).

Dans les cas RV et RP, aucun problème.
Mais dans les cas AV et AP, il m'affiche le message d'erreur suivant pour les lignes commençant par .FormatConditions.Add (If "AV" ou If "AP" suivant le cas) :

Run-time error '1004':
Application-defined or object-defined error


(Pour info, hier, jour de la création de la macro, tout allait bien)

Quelqu'un peut-il m'éclairer sur ce qui ne va pas?
Sachant que je suis assez novice en VBA.

D'avance merci.

Voici la macro:

Sub DataExportFr()

Dim Colonne As Byte
Dim trouve

With Sheets("Feuil1")

If UCase(Left(.Range("I2"), 2)) = "AV" Then
Colonne = Feuil2.Range("IV14").End(xlToLeft).Column + 1
If Colonne < 4 Then Colonne = 4
.Range("J2:J4").Copy Feuil2.Cells(14, Colonne)
.Range("E2").Copy Feuil2.Cells(8, Colonne)
.Range("F2").Copy Feuil2.Cells(9, Colonne)
.Range("G2").Copy Feuil2.Cells(10, Colonne)
.Range("H2").Copy Feuil2.Cells(12, Colonne)
.Range("B2").Copy Feuil2.Cells(13, Colonne)
.Range("J5").Copy Feuil2.Cells(17, Colonne)

With Feuil2.Cells(17, Colonne)
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="16", Formula2:="22"

.FormatConditions(1).Font.ColorIndex = 3

.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
Formula1:="16", Formula2:="22"

.FormatConditions(2).Font.ColorIndex = 10
End With

ElseIf UCase(Left(.Range("I2"), 2)) = "RV" Then
Colonne = Feuil2.Range("IV43").End(xlToLeft).Column + 1
If Colonne < 12 Then Colonne = 12
.Range("J2:J4").Copy Feuil2.Cells(43, Colonne)
.Range("E2").Copy Feuil2.Cells(39, Colonne)
.Range("H2").Copy Feuil2.Cells(40, Colonne)
.Range("B2").Copy Feuil2.Cells(41, Colonne)
.Range("J5").Copy Feuil2.Cells(46, Colonne)

With Feuil2.Cells(46, Colonne)
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="16", Formula2:="22"
.FormatConditions(1).Font.ColorIndex = 3

.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
Formula1:="16", Formula2:="22"
.FormatConditions(2).Font.ColorIndex = 10
End With

ElseIf UCase(Left(.Range("I2"), 2)) = "RP" Then
Colonne = Feuil2.Range("IV43").End(xlToLeft).Column + 1
If Colonne < 12 Then Colonne = 12
.Range("J2:J4").Copy Feuil2.Cells(43, Colonne)
Feuil2.Cells(43, Colonne).Font.ColorIndex = 5
Feuil2.Cells(44, Colonne).Font.ColorIndex = 5
Feuil2.Cells(45, Colonne).Font.ColorIndex = 5

.Range("E2").Copy Feuil2.Cells(39, Colonne)
.Range("H2").Copy Feuil2.Cells(40, Colonne)
.Range("B2").Copy Feuil2.Cells(41, Colonne)

Feuil2.Cells(39, Colonne).Font.ColorIndex = 5
Feuil2.Cells(40, Colonne).Font.ColorIndex = 5
Feuil2.Cells(41, Colonne).Font.ColorIndex = 5

.Range("J5").Copy Feuil2.Cells(46, Colonne)

With Feuil2.Cells(46, Colonne)
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="16", Formula2:="23"
.FormatConditions(1).Font.ColorIndex = 3

.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
Formula1:="16", Formula2:="23"
.FormatConditions(2).Font.ColorIndex = 10
End With

ElseIf UCase(Left(.Range("I2"), 2)) = "AP" Then
Set trouve = Feuil2.Range("D8:IV8").Find(.Range("E2"), LookIn:=xlValues)
If trouve Is Nothing Then
MsgBox ("Cette valeur n'existe pas!")
Exit Sub
End If
.Range("J2:J4").Copy Feuil2.Cells(21, trouve.Column)
.Range("J5").Copy Feuil2.Cells(24, trouve.Column)

With Feuil2.Cells(24, trouve.Column)
.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="16", Formula2:="23"

.FormatConditions(1).Font.ColorIndex = 3
.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
Formula1:="16", Formula2:="23"

.FormatConditions(2).Font.ColorIndex = 10
End With

End If
Application.DisplayAlerts = False
Sheets("Feuil1").Select
Cells.ClearContents
Application.DisplayAlerts = True
Range("J5").Select
ActiveCell.FormulaR1C1 = "=AVERAGE(R[-3]C:R[-1]C)"
Sheets("Feuil2").Select

End With

End Sub

Configuration: Excel 2000

1

Armojax, le vendredi 1 septembre 2006 à 09:51:06
  • +2

Hello chewi,

Je pense que tu ne peux pas indéfiniment ajouter des Format.Conditions à une cellule, vu que leur nombre est limité à 3.
Donc avant, fais un : Cellule.FormatConditions.Delete

Répondre à Armojax

2

Chewi, le vendredi 1 septembre 2006 à 10:23:45
  • +1

Salut Armojax et les autres.

Tout d'abord, merci pour ta réponse.

Cependant,... (si je ne me trompe pas)

Si tu regarde bien dans la macro, je ne mets que deux conditions par cellules qui restent les mêmes de cellule en cellule.
Vert si compris entre 16 et 23 et rouge si non compris.

Le message d'erreur s'applique aux lignes qui sont soulignées.

Si tu vois autre chose, n'hésite pas!

Merci quand même.

@+

Répondre à Chewi

3

Armojax, le vendredi 1 septembre 2006 à 10:53:49

OK, tu n'en mets que deux... à chaque exécution. Et tu en enlèves quand ?

Répondre à Armojax

4

Chewi, le vendredi 1 septembre 2006 à 11:34:17

Re

Je vais essayer de mieux m'expliquer.

Dans ma macro, à chaque exécution, l'emplacement d'une des cellules transférées subit deux mises en forme conditionnelles mais ensuite, cette cellule étant complétée, elle n'est plus jamais modifiée, je n'y touche plus. ( Tu peux voir : "Column + 1" )
Donc dans chaque cellule, il n'y a que deux mises en forme conditionnelles (qui en plus, sont toujours les mêmes).

Les mises en formes conditionnelles sont limitées à 3 par cellule !
Je viens d'essayer dans un classeur plus de 20 formats conditionnels répartis sur une quinzaine de cellules et aucun problème!

Le problème ne vient donc pas, à mon humble avis, du nombre de répétitions du format.
Je ne pense donc pas être obligé d'en enlever.

Maintenant, s'il s'agit réellement du problème, je veux bien enlever tout format conditionnel à chaque exécution et n'en mettre qu'un seul sur toute la plage de cellule concernée.
Mais encore une fois, je ne crois pas que ça vienne de là.

En attendant de tes nouvelles.
Si d'autres pouvaient m'aiguiller sur mon problème, j'en serait le plus heureux car je ne trouve vraiment pas la clé du problème.

Bien à vous.
Et merci d'avance!

Répondre à Chewi

5

Armojax, le vendredi 1 septembre 2006 à 13:35:20

Re,

Il se peut que je sois à côté de la plaque, et je ne sais pas dans quelles conditions tu utilises tes formats.
Je reprécise : pour chaque cellule, Excel autorise 3 formats conditionnels. A la tentative de création d'un 4ème pour la même cellule, on a précisément le message qui t'enquiquine.
Ayant créé des formats au cours d'une exécution, ils restent définis dans le classeur. Donc si au cours d'une exécution suivante tu réinterviens sur une cellule qui a déjà des formats créés par une exécution précédente, ça tilte. Autrement dit, si FormatConditions.Count = 3, il faut en supprimer avant d'en rajouter...
Encore une fois, ce n'est peut-être pas ça ton problème, mais je préfère lever les ambiguïtés d'interprétation.

Répondre à Armojax

6

Chewi, le vendredi 1 septembre 2006 à 14:09:14

Re Armojax.

C'est précisément là le problème, je viens de le trouver aussi et vu ton dernier post, c'est exactement ça!

En fait ma macro n'est pas sensée revenir sur une cellule qui a déjà été remplie mais le problème (qui finalement n'en est pas un) est que lorsque je fais des essais, j'efface le contenu des cellules et donc pas la mise en forme conditionnelle que j'oublie!
Donc la macro est bonne mais pas la manipulation que je fais de mon fichier.

Il vaudrait donc mieux que lors de ma mise en forme conditionnelle dans la macro, je vérifie d'abord si une conditionnelle est déjà présente et si oui, l'effacer avant d'appliquer la nouvelle (qui est la même).

Si tu savais m'aider sur la ligne de code à entrer pour dire en bon visual:

With Feuil2.Cells(17, Colonne)

If .FormatCondition = True Then
.Format.Conditions.Clear
End If


.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
Formula1:="16", Formula2:="22"
.FormatConditions(1).Font.ColorIndex = 3
End With

Répondre à Chewi

7

Chewi, le vendredi 1 septembre 2006 à 14:14:04
  • +1

Merci quand même!

et MeaCulpa! , "honte sur moi"

Répondre à Chewi

8

Armojax, le vendredi 1 septembre 2006 à 18:53:59

Tu peux mettre, p.ex. :

If .FormatConditions.Count <> 0 Then
  .FormatConditions.Delete
End If

Tu peux aussi écrire tout simplement :
.FormatConditions.Delete
sans rien tester, car la commande ne plante pas, même si aucun format n'existe (donc pas besoin de On error... etc.).

Répondre à Armojax

9

 Momo, le dimanche 16 mars 2008 à 20:46:44

Salut les as d'excel !!!


Je travaille avec une équipe de 6 personnes pendent 7 jours de la semaines et sur trois shifts répartis comme suit: 3 de 8h à 15h; 2 de 15h à 22h et 1 de 18h à 1h du matin. Comment faire pour automatiser le planing hebdomadaire sur une période de 5 semaines par exemple. il existe aussi certaines conditions: par exemple celui qui travaille de 18hà 1h ne doit pas faire 8h-15h le lendemain. Le week end seuls 2 personnes travaillent la journée et les autres se reposent.

Merci de m'aider!!!!

Répondre à Momo
Macro de mise en forme conditionnelle (Résolu) Bonjour, j'aimerais créer une macro de mise en forme conditionnelle sous excel j'ai un tableau de 13 colonnes je voudrais que le conetenu de chaque ligne qui a un "0" dans la colonne J soit en blanc sur blanc (que ca apparraisse pas en fait lol) et... www.commentcamarche.net/forum/affich-7281212-macro-de-mise-en-forme-conditionnelle
[Excel 2000] mise en forme conditionnelle Bjr à tous!! J'utilise Excel 2000. Mon souci est une mise en forme conditionnelle par rapport à la colonne A. Je m'explique: dans la cellule A1 quand je rentre la valeur "D", toute la ligne 1 de mon tableau doit s'écrire en rouge jusqu'à la dernière... www.commentcamarche.net/forum/affich-1695330-excel-2000-mise-en-forme-conditionnelle
Mise en forme conditionnelle sous excel 2007 (Résolu) Bonjour, Je ne trouve pas le moyen de faire une mise en forme conditionnelle pour que dans une colonne (A1 et A50), les cellules dont les valeurs sont comprises entre: 0,1 et 9,9 apparaissent en fond rouge 10 et 19,9 apparaissent en fond jaune 20 et... www.commentcamarche.net/forum/affich-3254877-mise-en-forme-conditionnelle-sous-excel-2007
Excel - Mises en forme conditionnelles illimitéesMises en Forme Conditionnelles Illimitées Sommaire: Introduction Principe Code Fichier joint Introduction La Mise en Forme Conditionelle (ou MFC) permet d'appliquer, à une cellule ou à plusieurs cellules sélectionnées, différents... www.commentcamarche.net/faq/sujet-16784-excel-mises-en-forme-conditionnelles-illimitees
Formules Excel de baseVoici quelques formules de bases qui sont faciles à réaliser et qui peuvent donner un peu de vie à une feuille Excel ! Pour cette astuce, on supposera que l’on veut que le résultat s’affiche dans la cellule B10 et on se servira principalement des... www.commentcamarche.net/faq/sujet-8450-formules-excel-de-base
Excel : Mise en forme conditionnelle (Résolu)Bonjour, Comme on le sait, la mise en forme conditionnelle ne peut être réalise que sur au maximum 3 conditions. Pour mon application ,il aurait été super de pouvoir ajouter au moins encore 2 conditions. Quelqu'un aurait-il une proposition? Sans... www.commentcamarche.net/forum/affich-6269241-excel-mise-en-forme-conditionnelle
[Excel] Mise en forme conditionnelle spécifiqBonjour ! Je souhaite effectuer une mise en forme conditionnelle sur plusieurs lignes afin que le résultat positif de ma condition me colorie toute la ligne. En étant plus clair, ca donne ca :... www.commentcamarche.net/forum/affich-4599678-excel-mise-en-forme-conditionnelle-specifiq
[OpenOffice] Calc / Mise en forme conditionne (Résolu)Bonjour J'arrive à effectuer une mise en forme conditionnelle sur une cellule (ou une ligne) mais seulement à condition que la cellule contienne un seul mot. Par exemple, si je veux colorer d'un fond rouge une cellule contenant le mot Essais, c'est OK... www.commentcamarche.net/forum/affich-1280993-openoffice-calc-mise-en-forme-conditionne
Télécharger MOREFUNC (Macro complémentaire EXCEL)Morefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres... www.commentcamarche.net/telecharger/telecharger-34056283-morefunc-macro-complementaire-excel