XL 2010 Format de cellule sous condition en mode création de ligne (VBA)

Arnaud dit Citro

XLDnaute Junior
Bonjour à tous,

Je poursuis la création de mon petit programme et je coince sur un problème :

Dans une de mes feuilles, je crée l'ensemble de la ligne et je souhaite que la dernière cellule de la ligne ait une mise forme particulière (gras, italique et rouge) et que cela se fasse à la création de la ligne.

VB:
'Création dans feuille Alerte_Stock
With Sheets("Alerte_Stock")
    FAlSt = Sheets("Alerte_Stock").Range("A65536").End(xlUp).Row + 1
    Sheets("Alerte_Stock").Cells(FAlSt, 1).FormulaR1C1 = "=BdD_Stock!RC"
    Sheets("Alerte_Stock").Cells(FAlSt, 2).FormulaR1C1 = "=BdD_Stock!RC"
    Sheets("Alerte_Stock").Cells(FAlSt, 3).FormulaR1C1 = "=BdD_Stock!RC[15]"
    Sheets("Alerte_Stock").Cells(FAlSt, 4).FormulaR1C1 = "=SUMIFS(Mvt_Stock!C[-1],Mvt_Stock!C[1],"">=""&R[-3]C[-2],Mvt_Stock!C[1],""<=""&R[-3]C[1],Mvt_Stock!C[-3],RC[-3])"
    Sheets("Alerte_Stock").Cells(FAlSt, 5).FormulaR1C1 = "=BdD_Stock!RC[6]"
    Sheets("Alerte_Stock").Cells(FAlSt, 6).FormulaR1C1 = "=vlookup(RC[-3],BdD_Famille!C[-5]:C[-2],2,false)"
    Sheets("Alerte_Stock").Cells(FAlSt, 7).FormulaR1C1 = "=vlookup(RC[-4],BdD_Famille!C[-6]:C[-3],3,False)"
    Sheets("Alerte_Stock").Cells(FAlSt, 8).FormulaR1C1 = "=Int(RC[-4]-(RC[-4]*RC[-2]/100))"
    Sheets("Alerte_Stock").Cells(FAlSt, 9).FormulaR1C1 = "=Roundup(RC[-1]+(RC[-1]*RC[-2]/100),0)"
    If Sheets("Alerte_Stock").Cells(FAlSt, 9) >= Sheets("Alerte_Stock").Cells(FAlSt, 5) Then
        Sheets("Alerte_Stock").Cells(FAlSt, 9).Color = -16776961
    End If
End With

Naïvement j'ai pensé que ce code ferait l'affaire :
VB:
If Sheets("Alerte_Stock").Cells(FAlSt, 9) >= Sheets("Alerte_Stock").Cells(FAlSt, 5) Then
        Sheets("Alerte_Stock").Cells(FAlSt, 9).Color = -16776961
    End If
mais non un message d'erreur apparaît.

Il faudrait peut-être créer une MFC en VBA mais je ne vois pas comment faire pour l'adapter à la création de la ligne, un petit coup de main serait vraiment le bienvenu.

Bon après-midi à tous

Arnaud
 

Arnaud dit Citro

XLDnaute Junior
Bonjour Paf,

Merci de ta réponse, j'avais effectivement oublié Font.

Mais l'erreur se produit sur la ligne :
VB:
If Sheets("Alerte_Stock").Cells(FAlSt, 9) >= Sheets("Alerte_Stock").Cells(FAlSt, 5) Then
(Erreur d'exécution '13': Incompatibilité de type). J'aurai du le préciser dans mon premier post, désolé.

Arnaud
 

Arnaud dit Citro

XLDnaute Junior
Je réfléchissais à comment contourner le problème : je vais lancer le contrôle des alertes de stock à partir d'un formulaire qui encadrera des dates (le formulaire n'est pas encore créé mais j'ai l'ensemble du code dans la tête et sur des bouts de papier). Ce formulaire ne fera pas que ça, il fera des tris dans une autre feuille et fera des recherches sur les débits entre autre.

Serait il possible de créer une macro qui contrôlerait l'ensemble des cellules de la colonne I avec leurs pendants de la colonne E, si I est >= à E alors le format de la cellule sera rouge, gras et italique? je pourrais intégrer cette macro dans le code du formulaire.
 

Arnaud dit Citro

XLDnaute Junior
Bonjour à tous,

J'ai essayé de créer un code correspondant à ce que je souhaitais, mais je n'y arrive pas, je retourne le problème dans tous les sens et ça coince presque à chaque ligne (non quand même pas, seulement à partie de la ligne 17, mdr).

VB:
Sub Alerte_Stock()

Const ColBas = 9

Dim ColE As Long
Dim ColI As Long
Dim iCell As Range
Dim eCell As Range
Dim CompEI
Dim CompEI1
Dim ASheet


Set ASheet = Sheets("Alerte_Stock")


ColI = ASheet.Range("i5:i" & ASheet.Range("i" & Rows.Count).End(xlUp).Row).Value
ColE = ASheet.Range("e5:e" & ASheet.Range("e" & Rows.Count).End(xlUp).Row).Value
Set CompEI = ASheet.Range(ASheet.Cells(5, ColBas), ASheet.Cells(ColI, ColBas))
Set CompEI1 = ASheet.Range(ASheet.Cells(5, ColBas), ASheet.Cells(ColE, ColBas))

With CompEI
    .FormatConditions.Delete
    For Each iCell In CompEI.Cells
        If iCell.Value >= CompEI1 Then
            With iCell.Font
                .Color = -16776961
            End With
        End If
    Next
End With
        

End Sub

Quelqu'un aurait il une idée pour me sortir de cette panade?

Bonne fin de journée à tous

Arnaud
 

Arnaud dit Citro

XLDnaute Junior
Je pense que je ne suis pas loin (déjà, il n'y a plus d'erreur!) mais cela ne fonctionne que pour les nouvelles lignes, et ça ne prend pas en compte la condition, de plus si les anciennes ont été modifiées cela ne les modifie pas.

J'ai épuré le fichier pour pouvoir le joindre.

VB:
Sub Alerte_Stock()

Dim ligne As Long, colonne As Long
Dim Derlig As Long
Dim j, k
Dim essai


Sheets("Alerte_Stock").Cells.FormatConditions.Delete

colonne = 9



ligne = Sheets("Alerte_Stock").Cells(Rows.Count, colonne).End(xlUp).Row
essai = Sheets("Alerte_Stock").Range("i5:i" & Rows.Count).End(xlUp).Value

Sheets("Alerte_Stock").Range("i5:i" & Rows.Count).Font.ThemeColor = xlThemeColorLight1


    If ligne < 3 Then Exit Sub
    Derlig = Sheets("Alerte_Stock").Cells(Rows.Count, 9).End(xlUp).Row
  
    Range(Sheets("Alerte_Stock").Cells(ligne, 5).Value & "3:" & Sheets("Alerte_Stock").Cells(ligne, 9).Value & Derlig).Select
    Range(Sheets("Alerte_Stock").Cells(ligne, 5).Value & "3:" & Sheets("Alerte_Stock").Cells(ligne, 9).Value & Derlig).Activate
  
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=IF(" & Sheets("Alerte_Stock").Cells(ligne, 9).Value & ">=" & Sheets("Alerte_Stock").Cells(ligne, 5).Value & ")"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
  
    On Error Resume Next
  
    For Each essai In Sheets("Alerte_Stock").Range("i65536")
  
        If Selection.FormatConditions(1) = True Then
            Sheets("Alerte_Stock").Cells(ligne, colonne).Font.Color = -16776961
          
        Else
            Sheets("Alerte_Stock").Cells(ligne, colonne).Font.ThemeColor = xlThemeColorLight1
        End If
  
    Next
  


With Sheets("Alerte_Stock")
    .Range("A1").Select
End With

End Sub

Arnaud
 

Pièces jointes

  • Test B.xlsm
    57.9 KB · Affichages: 3

Discussions similaires

Réponses
14
Affichages
637

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley