Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai deux questions, toutes les deux se rapportant à la mise en couleur du fond de certaines cellules.
1.) Dans le fichier "File 1", je souhaiterais que soit appliquée la couleur de fond suivante dans les cellules de la colonne A en fonction des valeurs correspondantes des cellules de la colonne C :
Exemple pour la ligne 7 :
* Si A7 >= C7 --> couleur de fond vert fluo
* Si A7 < (0,95 x C7) --> couleur de fond rouge
* Si (0,95 x C7)<=A7<C7 --> couleur de fond orange
Les celllules qui ne peuvent pas être comparées (pas de nombres) sont ignorées.
Les résultats qui doivent être obtenus figurent en colonne G.
2.) Dans le fichier "File 2", je souhaiterais que soit appliquée la couleur de fond vert fluo aux cellules de la colonne A de la "Feuil1" qui existent en colonne G de la "Feuil2"
Dans la continuité du fichier "File 2", je souhaiterais maintenant que des cellules puissent être colorées selon la couleur présente dans une autre feuille de calcul (un autre onglet).
Ainsi, dans le fichier FILE 3 ci-joint, si une valeur de la colonne M de la "Sheet1" se retrouve dans la colonne A ou C ou E ou G ou I de la "Sheet 2", alors la ligne complète de la "Sheet 1" en prendra la couleur.
L'exemple est fait dans le fichier pour le nombre 050 (qui ne devrait pas être considéré de 50 par le système).
Je mets le bout de code utilisé mais qui ne marche qu'au sein de la même feuille de calcul :
____________________
Sub test()
Dim c1 As Range, c2 As Range
For Each c1 In Range("M8:M4595")
For Each c2 In Range("A4:A44")
If c1.Value = c2.Value Then c1.Interior.ColorIndex = c2.Interior.ColorIndex: Exit For
Next c2
Next c1
End Sub
si une valeur de la colonne M de la "Sheet1" se retrouve dans la colonne A ou C ou E ou G ou I de la "Sheet 2", alors la ligne complète de la "Sheet 1" en prendra la couleur
C'est tout bête, dans ta macro, tu ne précises pas le nom de(s) onglet(s) donc par défaut il prend celui de l'onglet sélectionné au début de l'éxécution de la macro.
Pour y remedier :
Code:
Sub test()
Dim c1 As Range, c2 As Range
For Each c1 In [COLOR="Blue"]Sheets("Sheet1").[/COLOR]Range("M8:M4595")
For Each c2 In [COLOR="Blue"]Sheets("Sheet2").[/COLOR]Range("A4:A44")
If c1.Value = c2.Value Then c1.Interior.ColorIndex = c2.Interior.ColorIndex: Exit For
Next c2
Next c1
End Sub
Pour info., tu as oublié de mettre ta pièce jointe file3!
Mais si le code ci-dessus fonctionne sur ton fichier, tu en seras dispensé 😉
C'est juste, simplement j'avais oublié la syntaxe.
J'ai un autre souci : les données à comparer dans la feuille 2 se trouvent uniquement dans les colonnes A, C, E, G et I. Donc, il s'agit de ne prendre en compte que ces colonnes pour la comparaison.
Je souhaiterais par ailleurs que la mise en forme se fasse automatiquement et pas via un bouton (pas indispensable, mais mieux).
Enfin, je souhaiterais que toute la ligne jusqu'à la cellule de la colonne M soit colorée, et non pas seulement la cellule de la colonne M.
A vrai dire, je n'ai pas compris ce que tu voulais, ni à quoi tu souhaitais arrivé!
Je me suis donc juste borné à trouver et corriger ton erreur.
Malgré ton nouveau post et la pièce jointe, je ne comprend pas mieux!
Tellement il y a de cellules à tester, ta macro tourne des heures!
J'ai raccourci son temps d'éxécution en diminuant le nombre de cellules tester, mais ça rame toujours!
Macro modifié et mise en page pour plus de clarté :
Code:
Sub test()
Dim c1, c2, c3, c4, c5, c6 As Range
With Sheets("Sheet2")
For Each c1 In Sheets("Sheet1").Range("M8:M" & [A65536].End(xlUp).Row)
For Each c2 In .Range("A4:A" & .[A65536].End(xlUp).Row)
For Each c3 In .Range("C4:C" & .[C65536].End(xlUp).Row)
For Each c4 In .Range("E4:E" & .[E65536].End(xlUp).Row)
For Each c5 In .Range("G4:G" & .[G65536].End(xlUp).Row)
For Each c6 In .Range("I4:I" & .[i65536].End(xlUp).Row)
If c1.Value = c2.Value Then c1.Interior.ColorIndex = c2.Interior.ColorIndex: Exit For
If c1.Value = c3.Value Then c1.Interior.ColorIndex = c3.Interior.ColorIndex: Exit For
If c1.Value = c4.Value Then c1.Interior.ColorIndex = c4.Interior.ColorIndex: Exit For
If c1.Value = c5.Value Then c1.Interior.ColorIndex = c5.Interior.ColorIndex: Exit For
If c1.Value = c6.Value Then c1.Interior.ColorIndex = c6.Interior.ColorIndex: Exit For
Next c6
Next c5
Next c4
Next c3
Next c2
Next c1
End With
End Sub
Pour colorier une cellule :
Code:
Range("A1").Interior.ColorIndex = 6
Pour colorier plusieurs cellules :
-> avec l'enregistreur de macro :
Code:
Range("A1:M1").Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
-> la même chose en plus concis :
Code:
Range("A1:M1").Interior.ColorIndex = 6
(résultat identique)
Evidement, il s'agit là de données fixe, tu peux mettres des données "flottantes" (c'est la bonne expression???), en remplacant :
Code:
Range("A1")
par
Code:
Range("A" & i)
ainsi, i étant une variable, elle pourra prendre tour à tour toutes les valeurs que tu souhaites. i représentant le numéro de la ligne.
Cells( numéro de la ligne, numéro de la colonne)
-> 1 correspondant à la première colonne : A
-> i étant la fameuse variable correspondant au numéro de la ligne
J'ai essayé d'être le plus clair et le plus détaillé possible, pour que tu puisse utiliser ceci dans ta macro, car je n'ai toujours pas compris où tu veux en venir, ce que tu veux faire, ni comment!
Restant à ta disposition si besoin de plus d'informations
SVPPPPPPPP aidez moi je vous en pris depuis hier je me bat pour resoudre mon probléme de formule mais rien a faire ... aidez moi via msn je vous en pris ... c'est super important croyez moi ... ne me demander pas de creer une nouvelle discussion car quand j'essaye voila ce que l'ont me dit :
rougegorge, vous n'avez pas la permission d'accéder à cette page. Ceci peut être dû à plusieurs raisons :
1. Vous n'avez pas la permission d'accéder à la page que vous essayez d'afficher. Êtes-vous en train d'essayer de modifier le message de quelqu'un d'autre ou d'accéder à des options d'administration ? Vérifiez que vous êtes autorisé à effectuer cette action dans les règles du forum.
2. Si vous essayez d'envoyer un message, l'administrateur a peut-être désactivé votre compte, ou celui-ci est en attente d'activation si vous venez de le créer, ou de réactivation si vous avez changé votre email, ou encore peut-être de validation par un modérateur.
pour les interesser demander moi mon msn je vous le donne en privée je vous en pris
Bonjour et bienvenu sur le forum à Rougegorge, Dimitriss,
Salut Jean-Pierre,
Rougegorge, j'ai lu tous tes posts. On peut dire que tu fais une entrée remarqué, fracassante et au détriment de toutes les règles qui régissent le forum!
Tu n'arrives pas à ouvrir un nouveau fil, pourtant tu arrives à écrire un post dans le fil de plusieurs internautes?!?
C'est pourtant quasiment pareil!
Au lieu de cliquer sur "citer" ou "répondre", tu cliques sur "nouvelle discussion"!
Pour information, on est tous bénévoles : "questionneurs", "répondeurs".
Donc lit bien les règles du forum pour ne pas risquer de froisser les gens qui pourraient te répondre 😉
RDV sur ton fil (=ta discussion).
Bonne fin de semaine.
PS. : JU555, désolé d'avoir pollué ton fil avec cela! Toi qui voulait que ton fil soit remarqué, pour être sûr d'avoir une réponse, c'est chose faite!
3 "up" gratos 🙂 + 1 avec ce post LOL
Tout d'abord, merci de continuer à m'aider, Excel-lent ; c'est super sympa.
En réalité, voici ce que je souhaiterais pouvoir faire :
Dans le fichier téléchargé en dernier :
- Sheet 2 : les colonnes A, C, E, G et I contiennent les couleurs de fond qui doivent être appliquées aux cellules figurant dans la colonne M de la Sheet 1, le cas échéant.
--> Sheet 1 : * M8 à M14 non colorées vu que n'apparaissent pas en Sheet 2
* M15 à M30 colorées en orange vu que colorées en orange en
Sheet 2
Comme mentionné dans ma précédente intervention, je souhaiterais, de plus que toute la ligne soit mise en couleur et pas seulement la cellule.
Pour l'exemple ci-dessus avec la couleur orange, je souhaiterais que toute la ligne soit colorée (donc de A15 à M15), et pas seulement la cellule M15.
C'est normal que tu ne t'en sorte pas! Il y a un piège invisible à l'œil nu.
Tes chiffres de la feuille "Sheet1", colonne M sont au format texte!
Tes chiffres de la feuille "Sheet2", colonne A, C, E, G, I sont au format nombre!
Donc forcément, ta macro, quelle soit juste ou fausse, ne trouveras aucune similitude entre les deux onglets!
Voici ci-joint ton fichier modifié :
-> j'ai traduit tous tes chiffres de la feuille "Sheet1" en nombre. Pour garder la même apparence qu'avant, je les ai mis au format "spécial" : "000" Ainsi visuellement, c'est toujours comme avant mais cette fois ci, c'est bien des nombres.
-> j'ai refais la macro
-> je l'ai fais tourner, elle fonctionne bien. Seul inconvénient, comme dit précédemment, vu la quantité de test à faire, elle rame. Testé sur ton fichier File 3, elle met environ 14 secondes.
-> une fois testé, j'ai alléger ton fichier car il ne rentrait pas ici, même zippé! Je te rassure, j'ai juste supprimé qq lignes de la fameuse colonne M "sheet1".
Pas d'inquiétude, quand tu les rempliras à nouveau, la macro fonctionnera toujours.
Sub Préparation()
' Macro enregistré par Excel-lent
[COLOR="Blue"]Dim Couleur As Integer
Dim LigneSheet1 As Long[/COLOR]
[COLOR="Blue"]LigneSheet1 = Sheets("sheet1").[M65536].End(xlUp).Row[/COLOR]
For k = 1 To 9 Step 2
For i = 4 To Sheets("Sheet2").Cells(65536, k).End(xlUp).Row
For j = 8 To [COLOR="Blue"]Sheets("sheet1")[/COLOR].[M65536].End(xlUp).Row
If Sheets("sheet2").Cells(i, k) = [COLOR="Blue"]Sheets("sheet1")[/COLOR].Cells(j, 13) Then
[COLOR="Blue"]Sheets("sheet1")[/COLOR].Range("A" & j & ":M" & j).Interior.ColorIndex = Sheets("sheet2").Cells(i, k).Interior.ColorIndex
End If
Next j
Next i
Next k
End Sub
Voici ci-dessous le même code en "un peu plus court", c'est le maxi de ce que je peux faire, mais il y a beaucoup mieux, j'en suis persuadé :
Code:
Sub Préparation()
' Macro enregistré par Excel-lent
[COLOR="Blue"]With Sheets("Sheet1")[/COLOR]
For k = 1 To 9 Step 2
For i = 4 To Sheets("Sheet2").Cells(65536, k).End(xlUp).Row
For j = 8 To .[M65536].End(xlUp).Row
If Sheets("Sheet2").Cells(i, k) = .Cells(j, 13) Then
.Range("A" & j & ":M" & j).Interior.ColorIndex = Sheets("Sheet2").Cells(i, k).Interior.ColorIndex
End If
Next j
Next i
Next k
[COLOR="Blue"]End With[/COLOR]
End Sub
En bleu les différences :
-> les variables "Couleur", "LigneSheet1" et tout ce qui allait avec... c'est des reste de mon brouillon - j'avais oublié de donner un coup de balai dans tous les coins! Données non utilisées et inutiles).
-> l'utilisation du With sheets("Sheet1") + End With a permis de supprimer trois fois : "Sheets("Sheet1") dans le code!
PS. : malheureusement, je ne pense pas que cela raccourcisse le temps d'exécution de la macro!
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD