VBA: filtre critere rempli. cellule sur ligne

ERIC -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour à Tous et bonne année,

Je débute en VBA et j'ai déjà résolu un certain nombre de cas mais là j'avoue que je suis vraiment bloqué sur celui ci, donc je me lance sur le forum:

colonne C : Numéro de livraison
colonne D : Service code (2 chiffres ou deux lettres, correspondant à la livraison)
colonne E : Type de livraison (DOC, TAX, CF, GOV)
colonne P : Commentaire

1er critère: le numéro de livraison (Col C) doit commencer par 2R

Maintenant je souhaiterais
- Si pour chaque livraison (Col. C filtrée 2R) le type de livraison (Col.D) est égal à 75, 77, 79, CP, CR et le type de livraison est différent de GOV (donc égal à DOC, TAX ou CF) alors la cellule de référence (Col P) en face du numéro de livraison correspondant se remplit du commentaire : "MAUVAIS TYPE DE LIVRAISON" sinon rien ne se passe.

Je présume qu'il faut utiliser entre autre if then else, for each next...

Mais je ne suis pas capable de rédiger la syntaxe.

Si en plus vous savez me mettre dan le code les lignes d'erreur (celles avec un mauvais code de livraison) en ROUGE et BOLD, ça serait vraiment le Pérou!

Je vous remercie de votre aide.

16 réponses

  1. Paf
     
    Bonsoir,

    Désolé je n'ai pas la solution en VBA; mais par une formule, c'est sans doute plus simple:

    dans la colonne P dans la ligne du premier N° de livraison (adapter C5 et D5 en conséquence):
    =SI(ET(OU(D5=75;D5=77;D5=79;D5="CP";D5="CR");E5<>"GOV");"MAUVAIS TYPE DE LIVRAISON";"")


    a "tirer" vers le bas.

    En espérant que ça peut répondre au problème.

    Bonne soirée
    0
  2. ERIC
     
    Merci beaucoup pour ta réponse PAF.

    En fait, il me faut ce code en VBA car il fait partie d'une longue série de codes me permettant d'automatiser l'exécution d'un rapport à l'aide d'un formulaire et de boutons codés.

    Concernant le cas ELSE, il faut que le contenu de la cellule reste celui de départ (et non pas vide " " si la cellule ne l'était pas).

    Quelqu'un pourrait il m'aidait pour le VBA?

    Merci d'avance.
    0
  3. ERIC
     
    ERRATUM
    Maintenant je souhaiterais
    - Si pour chaque livraison (Col. C filtrée 2R) le SERVICE CODE (Col.D) est égal à 75, 77, 79, CP, CR et le type de livraison est différent de GOV (donc égal à DOC, TAX ou CF) alors la cellule de référence (Col P) en face du numéro de livraison correspondant se remplit du commentaire : "MAUVAIS TYPE DE LIVRAISON" sinon rien ne se passe.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Bien que ton exposer soit bien rédiger ce n'est pas façile de comprendre ce que tu veux faire.
    Pourait-tu créer un classeur exemple avec quelque données et sur une autre feuille mettre le résultat souhaiter.
    Ou s'il n'y a pas de données confidentielles mettre ton classeur.
    Sur CiJoint.fr
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  6. ERIC
     
    Merci pour l'intérêt que tu portes à ma demande Lermite222 ;)

    Voici le lien

    http://www.cijoint.fr/cjlink.php?file=cj201101/cijhPTIJ58.xlsx

    Je ré explique simplement car je me suis trompé sur un critère:

    colonne A : Numéro de livraison
    colonne B : Service code (2 chiffres ou deux lettres, correspondant à la livraison)
    colonne J : Commentaire

    - Si une livraison (Col.a) commence par 1Z et son service code (Col.B) est égal à 75, 77, 79, CP, CR alors la cellule de référence (Col J) en face du numéro de livraison correspondant se remplit du commentaire : "WRONG SHIPMENT TYPE" (et en option la ligne se met en BOLD et RED) sinon rien ne se passe.

    Dans le sheet1 les données à traiter, dans le sheet2 le resultat à atteindre.

    Merci d'utiliser entre autre if then else et for each next

    Merci de votre aide.
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Apparemment ça ne pose aucun problème, juste.. le repérage est déclencher comment ?
    Un bouton ? une sélection ?
    0
  8. ERIC
     
    Un bouton dans un formulaire, mais comme j'ai 10 fois plus de code pour le même bouton ici je n'ai besoin que du code en tant que sub. Je l'intégrerai ensuite dans le reste de code.

       Sub WrongShipmentType ()   
    
    code
    
    End sub   


    Merci.
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Comme ça ?
    Sub MarquerCOP()
    Dim Lig As Long, AR
    Dim i As Integer, B As Boolean
        AR = Array("75", "77", "79", "CP", "CR")
        With Sheets("Sheet1")
            For Lig = 2 To Range("A100000").End(xlUp).Row
                If Left(Cells(Lig, 1).Value, 2) = "1Z" Then
                    For i = 0 To 4
                        If Cells(Lig, 2) = AR(i) Then B = True: Exit For
                    Next
                    If B Then
                        Range("J" & Lig) = "Wrong Shipment Type"
                        Range("J" & Lig).Font.ColorIndex = 3
                        Range(Cells(Lig, 1), Cells(Lig, 3)).Font.ColorIndex = 3
                        B = False
                    End If
                
                End If
            Next
        End With
    End Sub

    A+
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.

    1°) Simplifier les modif que tu à fait par
        If B Then
            Range("O" & Lig) = "Wrong Shipment Type"
            Rows(Lig).Font.ColorIndex = 3
            Rows(Lig).Font.Bold = True
            B = False
        End If
    

    2°) Je comprend pas ce que tu veux, prochaine fois tâche de mettre un exemple qui reflète la réalité.
    Remet un classeur exemple comme la première fois mais avec les bons emplacements.
    0
  11. ERIC71PL Messages postés 2 Statut Membre
     
    Ok pas de soucis Lermite :)

    J'ai préparé le fichier mais je ne sais pas où l'héberger, ci-joint.fr semble hors service, aurais tu une autre solution?
    0
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Pas moyen d'ouvrir le fichier su Cjoint.
    Et tu doit le sauver en Xlsm (avec macro)
    Remet le sur le même site que l'autre.
    0
  13. ERIC71PL
     
    http://www.cijoint.fr/cjlink.php?file=cj201101/cijCV1Hc8q.xlsx

    Et voilà :)
    0
  14. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    J'ai enfin pu avoir le classeur.
    Et ça m'étonne que tu puisse pas modifier la macro en fonction de ce que tu veux maintenant !!
    Enfin... bon,
    Je vois que tu n'a plus la colonne avec les "Nombres" alors supprimer ce test.
    Les emplacements sont différents, modifier les emplacements.
    Sub MarquerCOP() 
    Dim Lig As Long 
        With Sheets("Sheet1") 
            For Lig = 2 To Range("A100000").End(xlUp).Row 
                If Left(Cells(Lig, "C").Value, 2) = "1Z" and Cells(Lig, "E") = "COP" Then 
                    Range("O" & Lig) = "Wrong Shipment Type" 
                    Rows(Lig).Font.ColorIndex = 3 
                    Rows(Lig).Font.Bold = True 
                End If 
            Next 
        End With 
    End Sub 

    J'ai mis les lettres des colonnes, tu comprendras mieux.
    J'ai pas tester étant donner que tu t'évertues à mettre un classeur XlsX
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0