Macro mise en forme conditionnelle, l'arrêter à la bonne colonne [Résolu/Fermé]

Signaler
-
 tommydu145 -
Bonjour,

J'ai récupéré et modifié une petite macro qui vient me faire de la mfc, cependant quand il trouve la valeur dans la cellule, il me selectionne toute la ligne excel, or je voudrais qu'il me sélectionne seulement les colonnes du tableau, ici il s'arrête à K et ne changera normalement pas.

Si quelqu'un sait tourner la ligne comme il faut je suis preneur. (en gras deux de mes essais)

Merci d'avance

Sub formatConditionnelle()
Application.ScreenUpdating = False

For Each c In [A2:K1000000] 'plage a testée
c.Select
Dim l As Long
l = ActiveCell.[Row]
If ActiveCell.Value = "Nok" Then
Rows("" & l & ":" & l & "").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End If

Next

Application.ScreenUpdating = True
Range("A2").Select

End Sub

Sub formatConditionnelle()
Application.ScreenUpdating = False

For Each c In [A2:K1000000] 'plage a testée
c.Select
Dim l As Long
l = ActiveCell.[Row]
If ActiveCell.Value = "Nok" Then
Rows("" & l & ":" K" & l & "").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End If

Next

Application.ScreenUpdating = True
Range("A2").Select

End Sub


6 réponses

Messages postés
11908
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 234
Vous voulez vraiment passer par une macro alors qu'Excel le fait "nativement" ?
Ben je pensais que ce serait mieux vu que c'est pour une mise à jour de fichier et que j'ai presque 1 000 000 de lignes, mais si vaut mieux passer par une mfc classique je vous fait confiance
arf... je vais essayer la méthode de Romain du coup, mais merci de t'être penché dessus
Messages postés
11908
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 234
Ben non, justement c'est tout bon: tu ne devras pas remettre les règles de MFC à chaque fois.
Et si le contenu des cellules changes, les OK deviendront vertes et les NOK, rouges.

Le problème aurait existé si le fichier avait été écrasé, car l'écrasement supprime toutes les règles de MFC (en fait, ce sont deux fichiers différents: l'un remplace l'autre et excel ne fusionne rien du tout).
J'essaie ça de suite alors, j'avais compris l'inverse, merci d'avoir précisé.

Je te tiens au courant,

EDIT: ça fonctionne parfaitement !! Merci de ton aide
Messages postés
11908
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 234
Clos le sujet et préviens Romain alors, qu'il ne se casse pas la tête pour rien ^^
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Je viens de lire. Ok.
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Bonjour,

Avant de vous répondre, j'aimerai être sûr d'une chose.
Cette macro sélectionne toute la ligne. OK

Vous voulez qu'elle sélectionne la colonne à la place ? Toute la colonne ?
Bonjour Romain,

Non en fait, c'est qu'une histoire de mise en forme.

J'ai mon tableau qui va de A à K et avec la macro quand il me colorie la ligne il colorie de A à Z(bien plus que Z mais c'est pour l'exemple). Hors j'aimerais qu'il ne colorie vraiment que de A à K, j'essaie de faire une capture.

EDIT: Les sites d'upload sont bloqués dans mon entreprise..
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Testez ce que j'ai posté plus bas, et dite moi si c'est ce que vous recherchez, normalement oui ^^
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Essayez avec ce code (je n'ai pris que le début pour l'exemple) :

Dim rng As Range, c As Range

Application.ScreenUpdating = False

Set rng = Range("a2:k1000000") 'Attention à cette range, si votre page ne vas pas jusqu'à 1000000 de cellules, il y aura une erreur.

For Each c In rng.Cells

c.Select

If ActiveCell.Value = "Nok" Then
ActiveCell.Rows.Resize(, 11).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End If

Next

Application.ScreenUpdating = True
Range("A2").Select


Pour l'explication, la ligne suivante sélectionne la cellule active et les 11 cellules suivantes sur la ligne (donc jusqu'à K):
ActiveCell.Rows.Resize(, 11).Select

Cordialement, Romain.
Je viens d'essayer ton code, et j'ai deux soucis.

Le premier est que le code balaie mes cellules donc quand il est sur Kx et lit "Nok", il selectionne à partir de K et fait 11 colonnes à droite, j'ai essayé de mettre un - devant mais ça ne fonctionne pas.

Deuxième souci, mon fichier a son nombre de ligne qui varie, c'est de l'ordre de 500 lignes mais du coup, le début ne me permet pas de l'exploiter.

Aurais-tu une autre solution par hasard ?
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Je travaille dessus et te donne une réponse dès que possible.
Messages postés
1017
Date d'inscription
mardi 23 décembre 2008
Statut
Membre
Dernière intervention
10 janvier 2018
261
Bien que le problème soit peut être résolu, la macro fonctionne maintenant :

Dim rng As Range, c As Range

Application.ScreenUpdating = False

Set rng = Range("a2:k100000") 'Attention à cette range, si votre page ne va pas jusqu'à 1000000 de cellules, il y aura une erreur.

For Each c In rng.Cells

c.Select

If ActiveCell.Value = "Nok" Then
Range("A" & ActiveCell.Row & ":K" & ActiveCell.Row).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
End If

Next

Application.ScreenUpdating = True
Range("A2").Select


Cordialement, Romain.
Merci d'avoir continuer à chercher, je la garde sous la main au cas où.