VBA: filtre critere rempli. cellule sur ligne

Fermé
ERIC - 3 janv. 2011 à 18:38
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 9 janv. 2011 à 14:39
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

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
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
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
Quelqu'un pourrait-il m'aider? Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 4/01/2011 à 21:04
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
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
5 janv. 2011 à 10:53
Apparemment ça ne pose aucun problème, juste.. le repérage est déclencher comment ?
Un bouton ? une sélection ?
0
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2011 à 14:09
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2011 à 20:17
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
ERIC71PL Messages postés 2 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 7 janvier 2011
7 janv. 2011 à 21:25
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2011 à 21:29
Pour un dossier provisoire c'est plus simple sur https://www.cjoint.com/
0
Salut Lermite,

voici le lien contenant le fichier ;)

https://www.cjoint.com/?0bivGqSJRu7

Merci
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 janv. 2011 à 00:32
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
http://www.cijoint.fr/cjlink.php?file=cj201101/cijCV1Hc8q.xlsx

Et voilà :)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 9/01/2011 à 14:39
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