Macro mise en forme conditionnelle, l'arrêter à la bonne colonne

Résolu/Fermé
tommydu145 - Modifié par tommydu145 le 18/02/2014 à 14:37
 tommydu145 - 19 févr. 2014 à 07:47
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

Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
18 févr. 2014 à 14:39
Vous voulez vraiment passer par une macro alors qu'Excel le fait "nativement" ?
0
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
0
Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
18 févr. 2014 à 14:53
Ce qui prend du temps à Excel, c'est d'évaluer des règles complexes ou des règles nombreuses (imbriquer sept SI() l'un dans l'autre et tirer la formule sur des milliers de cellules)

Perso, je définirais une MFC sur la zone A1:K10000000 avec un test sur la cellule appropriée (dernière option de la MFC). C'est vert si ok et rouge si nok ? C'est ça ?
0
Oui c'est ça, mais une question subsiste, le fichier est mis à jour tous les jours, est-ce que ça va écraser ceux de la veille ?
0
Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
18 févr. 2014 à 15:15
Comment est faite la maj ?

- c'est un nouveau fichier qui est créé et qui écrase le précédent ?
OU
- le fichier existant est ouvert et le contenu des cellules est remplacé ?
0
Le fichier existant est mis à jour et le contenu est remplacé.
0
Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
18 févr. 2014 à 15:25
Donc ça va conserver la MFC dans le fichier, puisqu'il est juste "mis à jour".
0
romain7254 Messages postés 1020 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 10 janvier 2018 296
18 févr. 2014 à 14:42
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 ?
0
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..
0
romain7254 Messages postés 1020 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 10 janvier 2018 296
18 févr. 2014 à 15:06
Testez ce que j'ai posté plus bas, et dite moi si c'est ce que vous recherchez, normalement oui ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romain7254 Messages postés 1020 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 10 janvier 2018 296
Modifié par romain7254 le 18/02/2014 à 15:02
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.
0
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 ?
0
romain7254 Messages postés 1020 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 10 janvier 2018 296
18 févr. 2014 à 15:59
Je travaille dessus et te donne une réponse dès que possible.
0
romain7254 Messages postés 1020 Date d'inscription mardi 23 décembre 2008 Statut Membre Dernière intervention 10 janvier 2018 296
Modifié par romain7254 le 18/02/2014 à 18:51
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.
0
Merci d'avoir continuer à chercher, je la garde sous la main au cas où.
0