Utilisation de style comme condition dans un test logique
Bonjour à tous ,
Pour un projet j'ai besoin de connaitre si un produit (il y en a 900) peut être réaliser par les machines (A, B, C, D), il y en a 15. J'ai déjà appliqué un style si la machine A est disponible la colonne passe en vert. Je souhaiterai donc qu'un style vert soit appliqué sur la référence du produit si toutes les machines requises pour la fabrication du produit sont disponibles. Je pensais à une mise en forme conditionnelle avec comme formule: =SI(A1:A15="style vert").
Merci à tous pour votre aide
Bonjour,
Alors là, je pense que déposer un fichier s'impose...
Je doute qu'il soit possible de faire une MFC en fonction d'une couleur.
Il faufrait une MFC de type :
=NB.SI(colonne_dispo_a_coté_colonne_machine;"dispo")=nbval(colonne_machine)Cdlt,
Bonjour, je vous joins le fichier.
J'ai compris qu'il fallait que je passe par une macro, j'arrive à faire pour une cellule donnée mais pas pour une ligne complète ni la plage entière.
Pour clarifier ce que je voudrais faire, si toute les cellules contenant des 1 sont vertes pour un article alors la cellule de l'article doit apparaître en vert. Si une seule cellule est jaune sur la ligne alors la cellule de l'article doit apparaître en jaune.
Le code vba que j'ai commencé, il fonctionne pour une cellule donnée:
Sub VerifMachine()
If Cells.Range("AF18").Interior.ColorIndex = 6 Then
Range("E18").Interior.ColorIndex = 46
Else
Range("E18").Interior.ColorIndex = 10
End If
End Sub
Je ne maîtrise pas le vba, j'ai commencé cette semaine mais en raisonnement algo ça donnerait:
i variable des numéros de ligne
j variable des numéros de colonnes
For cell in range i (2;34)
For cell in range j(I;AJ)
If cell.Range(ji).Interior.ColorIndex=6
Range("Ei").Interior.ColorIndex = 46
Else
Range("Ei").Interior.ColorIndex = 10
End If
On parcourt toute la ligne puis on passe à la ligne suivante en gros.
Update
J'ai avancé le code. Je pense que ma méthode pour parcourir les cellules est juste. Ce code colore bien la colonne article mais ne tient pas compte si il y a une cellule jaune sur la ligne. Interrogation je ne comprends pas pourquoi il n'en tient pas compte.
Sub VerifMachine()
Dim ligne As Integer
Dim colonne As Integer
For ligne = 3 To 923
For colonne = 40 To 56
If Cells(ligne, colonne).Interior.ColorIndex = 6 Then
Cells(ligne, 21).Interior.ColorIndex = 46
Else
Cells(ligne, 21).Interior.ColorIndex = 10
End If
Next colonne
Next ligne
End Sub
Bonjour,
Honnêtement, je ne comprends pas la manoeuvre pour l'instant... Pourquoi certaines cellules sont jaunes ?
Le truc, c'est que vous avez une MFC bleue. Si vous l'effaciez et mettiez une MFC verte quand il y a un 1 et une MFC jaune quand il y a un X (enfin une autre valeur), ce serait mieux.
Ensuite, vous pourriez avoir une MFC assez simple pour colorier la référence...
Sinon, vous devriez passer par une fonction :
function SOMME_SI_COLOR(Plage, IndColor) as long
for each cell in plage.cells
if cell.interior.colorindex = IndColor then SOMME_SI_COLOR = SOMME_SI_COLOR + 1
next cell
end functionPuis l'appliquer à chaque ligne :
Sub test()
with activesheet.range("I2:AI34")
for i = 1 to .rows.count
if application.sum(.rows(i)) = SOMME_SI_COLOR(.rows(i), 10) then
activesheet.cells(.rows(i).row, "E").interior.colorindex = 10
end if
next i
end with
end subCe n'est pas testé.
De toute façon, la MFC est à privlégier...
Cdlt,
Dans votre code, il colorie à chaque cellule. La cellule en colonne 21 garde la couleur obtenue suite au test sur la dernière cellule. Donc si vous avez une condition vérifiée à chaque fois en dernière colonne, ça donne l'impression que la condition a été vérifiée sur toutes les colonnes de la ligne.
Edit : Enfin, c'est à vérifier quand même. Les tests sur les couleurs peuvent être délicats. Les MFC peuvent fausser les résultats, il faudrait que j'essaie.
Bonjour la couleur dans les colonnes machine est appliquée manuellement en fonction de si la machine est disponible ou non.
J'ai réussi à écrire un code qui marche. Merci pour votre aide
Sub VerifMachine()
Range("U3:U923").Interior.ColorIndex = 2 'initialise la colonne article en fond blanc
Dim ligne As Integer
Dim colonne As Integer
For ligne = 3 To 923 'dépend de la taille du tableau
For colonne = 40 To 55 'dépend de la taille du tableau
If Cells(ligne, colonne).Interior.ColorIndex = 6 Then 'cherche une cellule jaune sur la ligne
Cells(ligne, 21).Interior.ColorIndex = 46 'colore la cellule article en orange
ligne = ligne + 1 'passe à la ligne suivante dès qu'une cellule jaune est trouvée
colonne = 40 'repart de la première colonne machine
Else
Cells(ligne, 21).Interior.ColorIndex = 10 'colore la cellule article en vert
End If
Next colonne
Next ligne
End Sub
PS: Il faut changer les numéros en fonction de la taille du tableau
Super si vous avez une solution, c'est très bien. Mais pourquoi mettre des 1. Pourquoi ne pas mettre D et I ou Dispo et Indispo ? Par MFC, on obtiendrait du vert et du jaune et par MFC on obtiendrait le résultat que vous souhaitez...
Enfin, je n'insiste pas mais ça me semble une meilleure solution (se priver de VBA quand c'est possible et bénéfique).
Cdlt,