Exécuter macro sous 2 conditions

ascal44

XLDnaute Occasionnel
Bonsoir le forum ,

je voudrais exécuter la macro suivante sous 2 conditions :

-S'il y a déja des formats conditionnel dans la plage A3:p100 ne pas lancer la macro pour ces lignes

- S'il y a des des valeurs sur les lignes en AàP sans formats conditionnel lancer la macro

Merci pour votre aide

Code:
Sub form()
Dim lig As Integer, plage As Range

    Application.ScreenUpdating = False

Application.Calculation = xlManual ' accélère l'exécution
Application.DisplayAlerts = False




For lig = 3 To 100
  With Range(Cells(lig, "A"), Cells(lig, "P"))
    'si la ligne n'est pas vide on l'unit à plage
    If Application.CountA(.Cells) Then _
      Set plage = Union(IIf(plage Is Nothing, .Cells, plage), .Cells)
  End With
  
  Range(Cells(lig, "M"), Cells(lig, "P")).Select 'fusionne MNOP
  Selection.Merge
 

Selection.EntireRow.AutoFit ' hauteur ligne automatique
Selection.EntireRow.RowHeight = Selection.EntireRow.RowHeight + 10 ' + 10 pixel
If Selection.EntireRow.RowHeight < 25 Then Selection.EntireRow.RowHeight = 25 ' hauteur de ligne 25 mini


 
Next

'efface la MFC et les bordures
With Range("A3:P100")
  .FormatConditions.Delete
  .Borders.LineStyle = xlNone
End With

If plage Is Nothing Then Exit Sub    'si tout est vide...
    
With plage
  
  'crée les bordures
  .Borders.LineStyle = xlContinuous
  '.Interior.ColorIndex = 43
  .HorizontalAlignment = xlLeft 'alignement texte
  .VerticalAlignment = xlCenter
  .Locked = False 'protection cellule
  .FormulaHidden = False
  
  'MFC 1ère condition
  .FormatConditions.Add Type:=xlExpression, Formula1:="=CELLULE(""row"")=LIGNE()"
  With .FormatConditions(1)
    .Font.Bold = True
    .Font.Italic = False
    .Font.ColorIndex = 3
    .Interior.ColorIndex = 6
  End With
  
  'MFC 2ème condition
  .FormatConditions.Add Type:=xlExpression, Formula1:="=MOD(LIGNE();2)=0"
  .FormatConditions(2).Interior.ColorIndex = 34

   'MFC 3ème condition
  .FormatConditions.Add Type:=xlExpression, Formula1:="=MOD(LIGNE();1)=0"
  .FormatConditions(3).Interior.ColorIndex = 36
  
 End With
    

     
    Application.Calculation = xlAutomatic
Application.DisplayAlerts = True

End Sub
 

ascal44

XLDnaute Occasionnel
Re : Exécuter macro sous 2 conditions

Bonsoir Pierrot93,

Le code ne fait pas exécuter la macro :les formats conditionnels ne se forment pas sur les lignes remplies avec de nouvelle valeurs.

J'ai mis cela :
Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Range("A3:p100").FormatConditions.Count > 0 And _
Application.CountA(Rows("1:16")) > 0 Then form
End Sub
 

ascal44

XLDnaute Occasionnel
Re : Exécuter macro sous 2 conditions

Oui , je comprend pourquoi ça ne lance pas :dans la plage A3:p100 il y à des MFC et des valeurs.
Dans la macro il ne faudrait pas appliquer ce code :
'efface la MFC et les bordures
With Range("A3:p100")
.FormatConditions.Delete
.Borders.LineStyle = xlNone
End With

Et ne traiter dans la plage que si il n'y à pas de MFC sur les lignes qui contiennent des valeurs
 

Pièces jointes

  • Classeur1format.zip
    15.1 KB · Affichages: 26

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 812
Membres
104 671
dernier inscrit
Guilbry