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 Sub

Cordialement.

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).Value

et

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 ?

17essai-ctvb.xlsm (62.66 Ko)
12essai-ctvb.xlsm (62.66 Ko)

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 Sub

Quelques 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.
(NB- Inutile de préempter 300 lignes que tu laisses vide pour la plupart... Je les ai supprimées pour réduire l'extension de la plage utilisée à ce qu'elle est effectivement, et si tu l'étends, elle s'étendra, et on la prendra automatiquement en compte...)
  • 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.

Rechercher des sujets similaires à "mfc vba condition feuille"