MFC sous VBA selon une condition sur une autre feuille
Bonjour à tous,
Je suis débutant sur VBA, je voudrais colorier les cellules d'une feuille nommée"plan de parc" en fonction d'informations extraites d'une autre feuille nommée "loadlist".
Dans la feuille plan de parc vous avez des numéros de conteneurs. Ex :TCNU5205202
Et dans la feuille "loadlist" vous avez la liste des conteneurs (colonne E) et le port de destination de ces conteneurs (colonne B)
Mon but est de créer un bouton, qui va colorier la feuille "plan de parc" en fonction de la destination du conteneurs - extraite de la loadlist".
Voici le code que j'ai créer : Aucune couleur n'apparait, j'en ai *******.
Private Sub CommandButton1_Click()
Dim FL1 As Worksheet, Cell As Range, Plage As Range
Dim Var1 As Variant, numero_tc_a_examiner As Variant, port_destiantion_du_tc As Variant
Set FL1 = Worksheets("parc")
With FL1
'Détermination de la plage de cellules à lire
'Peut s'écrire en utilisant l'objet range de la plage
'For Each Cell In .Range("A1:Z300")
'ou en utilisant l'objet Plage (range) de la plage
Set Plage = .Range("A1:Z300")
For Each Cell In Plage
'Valeur de la cellule lue
Var1 = Cell.Value
For i = 1 To 300
numero_tc_a_examiner = Worksheets("loadlist").Range("E" & i).Value
port_destiantion_du_tc = Worksheets("loadlist").Range("B" & i).Value
If Var1 Like numero_tc_a_examiner Then
If port_destination_du_tc Like "DDE" Then
Cell.Interior.COLOR = RGB(153, 0, 153)
End If
End If
Next
Next
Si vous pouvez m'aider. Merci beaucoup d'avance.
Laurent
Bonjour,
A essayer :
Private Sub CommandButton1_Click()
Dim Cel As Range, Var1, num_tc, port_tc, i%, clr&
With Worksheets("loadlist")
num_tc = .Range("E1:E300")
port_tc = .Range("B1:B300")
End With
clr = RGB(153, 0, 153)
For Each Cel In Worksheets("parc").Range("A1:Z300")
Var1 = "*" & Cel.Value & "*"
For i = 1 To 300
If num_tc(i, 1) Like Var1 Then
If port_tc(i, 1) Like "*DDE*" Then Cel.Interior.Color = clr
End If
Next i
Next Cel
End SubCordialement.
Merci MFerrand,
On avance, on avance.
J'ai copier/coller votre code.
deux problèmes persistent :
1/ coloriage des cellules vides, ce que je voudrais éviter si possible.
2/ Certaines cellules (les conteneurs pleins) de la feuille plan de parc contiennent deux informations :
Le numéro du conteneur et le poids. Par exemple : MWCU5205202 12T230
Et avec le code actuel, il ne détecte pas ces conteneurs comme faisant parti de la destination DDE
Je ne sais pas si je suis très clair.
Merci en tout cas pour votre première réponse.
Laurent
mais en fait c'est logique qu'il remplissent les cellules vides car la plage va jusqu’à 300 et la loadlist n'a que 93 lignes.
j'ai mit 300 ligne pour pouvoir transposer le programme a des plans de par plus grands. Car cela varie de semaine en semaine
Quelqu'un pourrait-il m'aider ?
Bonjour,
Juste au cas où, est ce normal que tu ais le nom de ta variable qui change ?
port_destiantion_du_tc = Worksheets("loadlist").Range("B" & i).Valueet
If port_destination_du_tc Like "DDE" Then?
D'un côté destination et de l'autre destiantion ?
Bonsoir,
Tu fournis un code, j'arrange le code, à partir des éléments qui y sont contenus et qui sont interprétables...
Le reste, par définition j'ignore ! La boule de cristal...
edit :
j'ai mit 300 ligne pour pouvoir transposer le programme a des plans de par plus grands. Car cela varie de semaine en semaine
Effectivement, ce n'est pas une bonne méthode !
Le mieux c'est peut être de vous transmettre le fichier en question ?
Je ne sais pas si j'ai bien tout compris, mais :
Private Sub CommandButton1_Click()
Dim Cel As Range, Var1, num_tc, port_tc, i%, clr&
With Worksheets("loadlist")
num_tc = .Range("E2:E" & .Range("E1").End(xlDown).Row)
port_tc = .Range("B1:B" & .Range("B1").End(xlDown).Row)
End With
clr = RGB(153, 0, 153)
With Worksheets("parc")
.UsedRange.Interior.ColorIndex = xlColorIndexNone
For Each Cel In .Range("A1:Z" & .Range("A1").SpecialCells(xlCellTypeLastCell).Row)
If Cel <> "" And Not IsNumeric(Cel) Then
Var1 = Cel.Value
For i = 1 To UBound(num_tc)
If Var1 Like num_tc(i, 1) & "*" Then
If port_tc(i, 1) Like "*DDE*" Then Cel.Interior.COLOR = clr
End If
Next i
End If
Next Cel
End With
End SubQuelques petits aménagements :
- On s'ajuste à la fin de la liste pour tes listes sur loadlist.
- On enlève les couleurs avant d'en remettre !
- On ajuste aussi la recherche sur la zone utilisée.
- On teste que cellule ne soit pas vide (et ne contienne pas de valeur numérique pour intervenir.
- J'ai rétablit le test dans le bon sens (il était fait à l'envers mais je ne m'en doutais pas !
)
Et regarde si le résultat correspond...
Cordialement.