Je rencontre une difficulté sur une macro et je sollicite votre aide à ce sujet.
J'ai la macro suivante :
Public flag As Boolean
Sub PRC_Mail()
flag = True
Dim i As Integer
For i = Range("A40").End(xlUp).Row To 15 Step -1 If Not Application.Intersect(Range("I16:I23")) Is Nothing Then
Range("I14:I24").Select
Selection.Font.ColorIndex = 34
Selection.Interior.ColorIndex = 34
End IfIf IsEmpty(Cells(i, 1).Value) And i <> 15 And i <> 25 And i <> 29 And i <> 32 And i <> 38 Then Rows(i).Delete
Next i
Application.ActivePrinter = "Amyuni PDF Converter sur LPT1:"
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, _
ActivePrinter:="Amyuni PDF Converter sur LPT1:", Collate:=True
flag = False
End Sub
La partie en jaune ne fonctionne pas.
Je souhaite que les cellules I14:I24 changent de couleur si les cellules I16:I23 sont vides. (Ce qui correspond à ma macro ci-dessus).
Je souhaite ajouter un autre argument identique qui est de changer la couleur d'autres cellules mais avec une couleur différentes. (Si les cellules J34:J37 sont vides alors les cellules J33:J37 sont de couleurs orange et avec un police orange).
La partie en jaune ci-dessous :
If Not Application.Intersect(Range("I16:I23")) Is Nothing Then
Range("I14:I24").Select
Selection.Font.ColorIndex = 34
Selection.Interior.ColorIndex = 34
End If
la methode "intersect" requiert au moins 2 arguments, là tu n'en a qu'un seul(une seule plage de cellule), mais je ne comprend pas bien ce que tu veux controler. Mets peut être ton fichier en pièce jointe, sans donnée confidentielle, avec résultat attendu.
Pour test, avec un 2ème argument comme dit Pierrot93 ; bonjour) ca fonctionne
Sub test()
If Not Intersect(ActiveCell, Range("A1:C1")) Is Nothing Then
With Range("A2")
.Font.ColorIndex = 34
.Interior.ColorIndex = 34
End With
End If
End Sub
Public flag As Boolean
Sub PRC_Mail()
flag = True
Dim i, j As Integer
Sheets("Propale").Range("I23").Select
j = 23
While Sheets("Propale").Range("I" & j).Value = "" And j >= 14
Range("I" & j).Select
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
j = j - 1
Wend
For i = Range("A40").End(xlUp).Row To 15 Step -1
If IsEmpty(Cells(i, 1).Value) And i <> 15 And i <> 25 And i <> 29 And i <> 32 And i <> 38 Then Rows(i).Delete
Next i
Application.ActivePrinter = "Amyuni PDF Converter sur LPT1:"
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, _
ActivePrinter:="Amyuni PDF Converter sur LPT1:", Collate:=True
flag = False
End Sub
En revanche, je veux ajouter à ce code une autre condition qui est de colorer d'autres cellules d'une autre couleur.
Si les cellules J34:J37 sont vides alors les cellules J33:J37 sont en orange et la police en orange également (Impression de voir une cellule sur fond orange sans contenu).
J'espère être clair dans mes explications.
Je ne peux malheureusement pas mettre le fichier en ligne car trop lourd.
Public flag As Boolean
Sub PRC_Mail()
flag = True
Dim i, j As Integer
Sheets("Propale").Range("I23").Select
j = 23
While Sheets("Propale").Range("I" & j).Value = "" And j >= 14
Range("I" & j).Select
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
j = j - 1
Wend
For i = Range("A40").End(xlUp).Row To 15 Step -1
If IsEmpty(Cells(i, 1).Value) And i <> 15 And i <> 25 And i <> 29 And i <> 32 And i <> 38 Then Rows(i).Delete
Next i
Application.ActivePrinter = "Amyuni PDF Converter sur LPT1:"
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, _
ActivePrinter:="Amyuni PDF Converter sur LPT1:", Collate:=True
flag = False
End Sub
Je ne peux pas utiliser le format conditionnel car le contenu de la 1ere cellule à masquer doit être visible et ne doit être modifiée qu'à l'éxécution de la macro.
En fait mon code ci-dessus fonctionne pour la 1ere condition que j'y ai indiqué mais je ne parviens pas en ajouter une 2e puis une 3e.
La condition devra être la suivante :
Condition 1) Si le contenu des cellules I16 à I23 sont vides alors les cellules de I14 à I23 doivent devenir bleu avec une police bleue.
Condition 2) Si le contenu des cellules J27 et J28 sont vides alors les cellules de J26 à J28 doivent devenir Verte avec police verte;
Condition 3) Si le contenu des cellules J34 à J37 sont vides alors les cellules de J33 à J37 doivent devenir orange avec police orange.
Je ne peux pas utiliser de forme conditionnelle car le contenu des cellules I16, J26 et J33 doivent rester visible avant l'éxécution de la macro.
Mon code ci-dessous fonctionne pour la condition 1 mais je ne parviens pas à ajouter les 2 autres. j'ai un message d'erreur à chaque fois.
Code:
Dim i, j As Integer
Sheets("Propale").Range("I23").Select
j = 23
While Sheets("Propale").Range("I" & j).Value = "" And j >= 14
Range("I" & j).Select
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
j = j - 1
Wend
Désolé de vous ennuyer avec ça.
J'espère que ma question est claire car je ne suis pas complètement expert en macro pourtant la conditions n'a pas l'air si difficile comme ça ! pourant....
J'ai trouvé une solution qui ne fonctionne qu'à moitié :
Code:
Dim j, k, l As Integer
Sheets("Propale").Range("J37").Select
l = 37
While Sheets("Propale").Range("J" & l).Value = "" And l >= 33
Range("J" & l).Select
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 40
l = l - 1
Wend
Sheets("Propale").Range("J28").Select
k = 28
While Sheets("Propale").Range("J" & k).Value = "" And k >= 26
Range("J" & k).Select
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 35
k = k - 1
Wend
Sheets("Propale").Range("I23").Select
j = 23
While Sheets("Propale").Range("I" & j).Value = "" And j >= 14
Range("I" & j).Select
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 34
j = j - 1
Wend
Les cellules J26 et J33 ne changent pas de couleur de fond et de police.
J'ai essayé de changer les cellules en prenant plus haut ou plus bas mais c'est pareil.
Pourant ça fonctionne bien pour la cellule I14 (dernière partie du code).
Je n'arrive pas à trouver l'erreur.
Est-ce que quelqu'un s'y connait dans ce genre de méthode ?