Bonjour,
J'ai créé une macro de mise en forme conditionnelle d'un tableau de relevés de prix pour que, notamment, la quantité achetée d'un article soit affichée dans un format correspondant au type de quantité mise à la vente. Par exemple, si l'article est vendu à l'unité, le format sera # ##0 ; s'il est vendu au kg, le format sera # ##0,000 kg ; s'il est vendu au litre, le format sera # ##0,000 l ; etc.
Je ne suis pas un professionnel et j'ai créé cette macro à l'aide la commande "Enregistrer une macro". A chaque mise en forme conditionnelle d'un nombre, cette commande a ajouté une ligne "ExecuteExcel4Macro". Mais lorsque je lance la macro, elle s'arrête à la première ligne "ExecuteExcel4Macro" [dont je ne comprends d'ailleurs ni le fonctionnement ni l'utilité ici ;-)].
Le message d'erreur est le suivant :
Nota : La commande "Enregistrer une macro" ne crée pas de ligne "ExecuteExcel4Macro" pour d'autres mises en forme que celle des formats de nombres ; il n'y en a pas, par exemple pour la création de traits de séparation en fonction de la date, de l'acheteur (payeur) ou du tiers (magasin) ...
Voici le code de ma macro :
Sub MiseEnForme()
'
' Mise en forme conditionnelle du tableau :
' - Application des formats appropriés en fonction du type de quantité mise à la vente
' - Insertion d'une bordure entre chaque date et chaque tiers
'
Application.ScreenUpdating = False
Dim Plage As Range
'Redéfinit les champs nommés
'Identifie la dernière ligne du tableau de la feuille active
ActiveSheet.Range("N1").Select
Selection.End(xlDown).Offset(0, -1).Select
Selection.End(xlUp).Select
L = ActiveCell.Row
'Définit le tableau des données dans la feuille sélectionnée
With ActiveSheet
Set Plage = Range("A1:M" & L)
ActiveWorkbook.Names("Tableau").RefersTo = Plage
End With
'Définit la colonne des quantités
With ActiveSheet
Set Plage = Range("G1:G" & L)
ActiveWorkbook.Names("Quantités").RefersTo = Plage
End With
'Définit la colonne des prix
With ActiveSheet
Set Plage = Range("H1:H" & L)
ActiveWorkbook.Names("Prix").RefersTo = Plage
End With
'Définit la colonne des vérifications
With ActiveSheet
Set Plage = Range("M1:M" & L)
ActiveWorkbook.Names("Vérifications").RefersTo = Plage
End With
'Crée les règles de mise en forme conditionnelle du tableau
'Annule les précédentes règles
Range("Tableau").Select
Cells.FormatConditions.Delete
'Règle 1 : Applique le format nombre standard aux cellules contenant des quantités de type "unité" dans la colonne G
Range("Quantités").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F1=""unité"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
ExecuteExcel4Macro "(2,1,""# ##0"")"
Selection.FormatConditions(1).StopIfTrue = False
'Règle 2 : Applique le format nombre 0,000 kg aux cellules contenant des quantités de type "kg" dans la colonne G
Range("Quantités").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F1=""kg"""
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
ExecuteExcel4Macro "(2,1,""# ##0,000"" kg"""")"
Selection.FormatConditions(1).StopIfTrue = False
...
'Règle 9 : Trace un trait de séparation entre les dates, les payeurs et les tiers sur toute la largeur du tableau
Range("Tableau").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=OU($A1<>$A1;$B2<>$B1;$D2<>$D2)"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Borders(xlBottom)
.LineStyle = xlContinuous
.TintAndShade = 0
.Weight = xlThin
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Savez-vous pourquoi la macro bloque sur ces lignes "ExecuteExcel4Macro" ? Merci d'avance pour vos lumières !
Partager