Excel - macro (mise en forme conditionnelle) [Résolu]

Excel - macro (mise en forme conditionnelle) Excel macro mise en forme conditionnelle [Résolu] (Résolu) » Forum - Excel Macro Excel et Mise en forme conditionnelle » Forum - VB / VBA Excel 2010 - mise en forme conditionnelle - cellule en italique [Résolu] (Résolu) » Forum - Excel Excel 2007 - mise en forme conditionnelle [Résolu] (Résolu) » Forum - Excel Excel 2010 mise en forme conditionnelle par apport à une liste (Résolu) » Forum - Excel

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

Forum

Excel - macro (mise en forme conditionnelle) Excel macro mise en forme conditionnelle [Résolu] (Résolu) » Forum - Excel Macro Excel et Mise en forme conditionnelle » Forum - VB / VBA Excel 2010 - mise en forme conditionnelle - cellule en italique [Résolu] (Résolu) » Forum - Excel Excel 2007 - mise en forme conditionnelle [Résolu] (Résolu) » Forum - Excel Excel 2010 mise en forme conditionnelle par apport à une liste (Résolu) » Forum - Excel

Web: www.shapebootstrap.net

10 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.

Merci Armojax 5

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 26327 internautes ce mois-ci

Reply
réponses:
  • auteur

    j'ai un probléme en excel .j'enseigne plusieurs modules dans une entreprise qui a 1000 travailleurs et je veux que le nom ne se répéte pas parcontre dans mon bilan annuel je veux garder les modules sur mon tableau pour chaque employé .comment faire.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.

@+

Reply
réponses:
  • Armojax

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

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Merci quand même!

et MeaCulpa! , "honte sur moi"

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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.).

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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!

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

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!!!!

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed