Se connecter / S'enregistrer
Votre question

VBA - Excel macro mise en forme conditionnelle

Tags :
  • Microsoft Excel
  • Programmation
Dernière réponse : dans Programmation
1 Septembre 2006 10:31:29

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, le jour de la création de la macro, tout allait bien)

Quelqu'un peut-il m'éclairer sur ce qui ne va pas?

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

    J'espère être assez clair.
    N'hésitez pas, toute idée est bonne à prendre.
    Merci
  • Autres pages sur : vba excel macro mise forme conditionnelle

    1 Septembre 2006 14:38:44

    Re tout le monde,

    Voilà, j'ai trouvé ce qui n'allait pas, tout est de ma faute, lorsque je fais des essais pour voir si ma macro fonctionne correctement, après 3-4 essais, j'efface le contenu. Seulement, en effacant le contenu je n'efface pas les 2 mises en forme conditionnelles établies lors des précédents essais. Je me retrouve alors avec 4 conditions, ce qui est de trop.
    Donc en fait la macro est bonne mais pas la manipulation que je fais de mon fichier.

    Désolé pour ceux qui se sont torturé la tête (comme moi par exemple).

    @+

    Chewi
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS