Modif de code pour MFC

isa44

XLDnaute Occasionnel
Bonjour à tous , je voudrais modifier le code suivant pour qu'il s'applique seulement aux lignes contenant des valeurs mais sans MFC

Merci à vous pour votre aide

Code:
Sub form2()
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

[COLOR="blue"]'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
' S'il a des formats conditionnel dans la plage ne pas exécuter la MFC suivante
' s'il y a des valeurs sur une ligne de la plage sans MFC : exécuter l'écriture des MFC
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""[/COLOR]

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
 

jmps

Nous a quitté
Repose en paix
Re : Modif de code pour MFC

Bonjour Isa,

Pas facile sans un bout de fichier mais j'ai ajouté une instruction qui devrait convenir si j'ai bien compris ta question.
Elle est encadrée par de :

Code:
Sub form2()
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

'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
' S'il a des formats conditionnel dans la plage ne pas exécuter la MFC suivante
' s'il y a des valeurs sur une ligne de la plage sans MFC : exécuter l'écriture des MFC
'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""[/COLOR]

If plage Is Nothing Then Exit Sub    'si tout est vide...
   
' :::::::::::::::::::::::::::::::::::::::::::::::::::
' Si on trouve des MFC dans la plage on sort        :
If plage.FormatConditions.Count <> 0 Then Exit Sub ':
' :::::::::::::::::::::::::::::::::::::::::::::::::::
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
 

James007

XLDnaute Barbatruc
Re : Modif de code pour MFC

Bonjour Isa,

Pour pouvoir traiter toutes les possibilités de MFC, il faut en passer par les trois liées aux cellules et les trois liées aux formules ... soit un test qui porte sur les six ... au total

A +
:)
 

jmps

Nous a quitté
Repose en paix
Re : Modif de code pour MFC

Bonjour,

J'ai un peu de mal à comprendre l'objectif.
Tu traites d'abord tes lignes 3 à 100 une par une dans la boucle For Next pour la taille.
A chaque tour de boucle tu affectes la ligne à la variable "plage".
Jusque là d'accord.
Mais après tu ne traites que la ligne 100 puisque c'est la dernière affectation à "plage" en fin de boucle.
Forcément ça ne marche pas puisque la ligne 100 est vide.
Du coup Exit Sub direct.

Ta demande est un peu confuse.
Essaye d'être plus claire.
 

isa44

XLDnaute Occasionnel
Re : Modif de code pour MFC

Bonjour , je pense qu'il faudrait se concentrer sur les MFC.
Et exécuter les MFC pour les cellules de A à P si elles contiennent au moins 1 donnée.
Cela pourrait ressembler à ça :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

With "plage" ' Quand il y a une saisie dans une cellule appliquer les format suivant pour la ligne
' la "plage" comprends les lignes de 3 à 100


'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
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa