IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA Conditions "IF", "OR", "AND"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 14
    Par défaut VBA Conditions "IF", "OR", "AND"
    Bonjour.

    Je ne m'en sors pas!

    Je voudrais creer une nouvelle colonne intitulee «KEY » dans l’onglet « LAPS » - qui se trouvera etre la premiere colonne disponible sur la droite.

    Cette colonne « KEY » sera le resultat des conditions suivantes (pour chaque ligne de la colonne) :

    Si la valeur des cellules de la colonne « TS » est « NOK »
    Alors la resultat de la colonne « KEY » sera « NOK »
    Sinon Si la valeur des cellules de la colonne « TS » est « OK »
    Et Si la valeur des cellules de la colonne « CP » est «WWWXXX » ou « YYYXXX » ou « UUUXXX » ou « ZZZXXX »
    Alors la resultat de la colonne « KEY » sera « MOUT »
    Sinon Si la valeur des cellules de la colonne « TS » est « OK »
    Et Si la valeur des cellules de la colonne « CP » est «AAAXXX » ou « BBBXXX » ou « GGGXXX »
    Alors le resulat de la colonne « KEY » sera le concatenate de la colonne « DS », « DA », les 3 lettres de gauche de la colonne « CP » (par exemple AAA, BBB ou GGG), « DR », « VD »
    Sinon Si la valeur des cellules de la colonne « TS » est « OK »
    Et Si la valeur des cellules de la colonne « CP » est «XXXCCC »
    Alors le resulat de la colonne « KEY » sera le concatenate de la colonne « DS », « DA », les 3 lettres de droite de la colonne « CP » (par exemple CCC), « DR », « VD »
    Sinon Si la valeur des cellules de la colonne « TS » est « OK »
    Et Si la valeur des cellules de la colonne « CP » est «XXXDDD » OU « XXXEEE » OU « XXXFFF »
    Alors le resulat de la colonne « KEY » sera le concatenate de la colonne « DS » modifiee (c’est-a-dire si « DS » = « N », alors le resultat sera « K », sinon « N »), « CA », les 3 lettres de droite de la colonne « CP » (par exemple DDD, EEE ou FFF), « DR », « VD »
    Sinon, le concatenate des cellules non remplies sera « FILL »
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Essaies de le faire par partie

    En K2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(B2="NOK";"NOK";SI(OU(D2="UUUXXX";D2="YYYXXX";D2="WWWXXX";D2="ZZZXXX");"MOUT";SI(OU(D2="AAAXXX";D2="BBBXXX";D2="GGGXXX");C2&E2&GAUCHE(D2;3)&H2&G2;SI(D2="XXXCCC";C2&E2&DROITE(D2;3)&H2&G2;SI(OU(D2="XXXDDD";D2="XXXEEE";D2="XXXFFF");SI(C2="N";"K";"N")&J2&DROITE(D2;3)&H2&G2;"FILL")))))

  3. #3
    Membre averti
    Inscrit en
    Août 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 14
    Par défaut
    Bonjour.

    Apres de tumultueux essais, je n'y arrive pas

  4. #4
    Membre averti
    Inscrit en
    Août 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 14
    Par défaut
    La seule chose qui fonctionne dans le code actuel est le concatenate.

    L'endroit ou je bloque est la suivante (le concatenante fonctionne mais je ne sais pas comment et surtout ou mettre les conditions).
    Faut-il inserer les conditions dans la formule de l'ActiveCell.Value ou creer une formule precedent l'ActiveCell.Value?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveCell.Value = "=" & TS.Offset(1, 0).Address(False, False) & PP & CP.Offset(1, 0).Address(False, False) & _
    PP & DS.Offset(1, 0).Address(False, False) & PP & DA.Offset(1, 0).Address(False, False) & _
    PP & DR.Offset(1, 0).Address(False, False)

    Mon code en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Test()
     
    Dim TS, CP, DS, DA, DR, VD As Range
    Dim RPP, rngPP, PP As String
    Dim LRPP As Long
     
    Sheets("LAPS").Select
    Set TS = Rows(1).Find(what:="TS", LookIn:=xlValues, lookat:=xlWhole)
    Set CP = Rows(1).Find(what:="CP", LookIn:=xlValues, lookat:=xlWhole)
    Set DS = Rows(1).Find(what:="DS", LookIn:=xlValues, lookat:=xlWhole)
    Set DA = Rows(1).Find(what:="DA", LookIn:=xlValues, lookat:=xlWhole)
    Set DR = Rows(1).Find(what:="DR", LookIn:=xlValues, lookat:=xlWhole)
    Set VD = Rows(1).Find(what:="VD", LookIn:=xlValues, lookat:=xlWhole)
    If TS Is Nothing Then MsgBox "TS Column Not Found"
    If CP Is Nothing Then MsgBox "CP Column Not Found"
    If DS Is Nothing Then MsgBox "DS Column Not Found"
    If DA Is Nothing Then MsgBox "DA Column Not Found"
    If DR Is Nothing Then MsgBox "DR Column Not Found"
    If VD Is Nothing Then MsgBox "DV Column Not Found"
    Cells(1, Columns.Count).End(xlToLeft).Select
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = "KEY"
    ActiveCell.Offset(1, 0).Select
    PP = "&"",""&"
    ActiveCell.Value = "=" & TS.Offset(1, 0).Address(False, False) & PP & CP.Offset(1, 0).Address(False, False) & _
    PP & DS.Offset(1, 0).Address(False, False) & PP & DA.Offset(1, 0).Address(False, False) & _
    PP & DR.Offset(1, 0).Address(False, False)
    RPP = Split(ActiveCell.Address, "$")(1)
    rngPP = (":" & RPP)
    LRPP = Cells(Rows.Count, "A").End(xlUp).Row
    Selection.AutoFill Destination:=Range(RPP & ActiveCell.Row & rngPP & LRPP)

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Option Explicit
    Sub Test()
    Dim TS As Range, CP As Range, DS As Range, DA As Range, DR As Range, VD As Range, C As Range, Plage As Range
        With Worksheets("LAPS")
            Set TS = .Rows(1).Find(what:="TS", LookIn:=xlValues, lookat:=xlWhole)
            Set CP = .Rows(1).Find(what:="CP", LookIn:=xlValues, lookat:=xlWhole)
            Set DS = .Rows(1).Find(what:="DS", LookIn:=xlValues, lookat:=xlWhole)
            Set DA = .Rows(1).Find(what:="DA", LookIn:=xlValues, lookat:=xlWhole)
            Set DR = .Rows(1).Find(what:="DR", LookIn:=xlValues, lookat:=xlWhole)
            Set VD = .Rows(1).Find(what:="VD", LookIn:=xlValues, lookat:=xlWhole)
            If TS Is Nothing Then MsgBox "TS Column Not Found"
            If CP Is Nothing Then MsgBox "CP Column Not Found"
            If DS Is Nothing Then MsgBox "DS Column Not Found"
            If DA Is Nothing Then MsgBox "DA Column Not Found"
            If DR Is Nothing Then MsgBox "DR Column Not Found"
            If VD Is Nothing Then MsgBox "DV Column Not Found"
            Set C = .Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
            C.Value = "KEY"
            C.Offset(1, 0).FormulaLocal = "=SI(B2=""NOK"";""NOK"";SI(OU(D2=""UUUXXX"";D2=""YYYXXX"";D2=""WWWXXX"";D2=""ZZZXXX"");""MOUT"";SI(OU(D2=""AAAXXX"";D2=""BBBXXX"";D2=""GGGXXX"");C2&E2&GAUCHE(D2;3)&H2&G2;SI(D2=""XXXCCC"";C2&E2&DROITE(D2;3)&H2&G2;SI(OU(D2=""XXXDDD"";D2=""XXXEEE"";D2=""XXXFFF"");SI(C2=""N"";""K"";""N"")&J2&DROITE(D2;3)&H2&G2;""FILL"")))))"
            Set Plage = C.Offset(1, 0).Resize(.Cells(Rows.Count, "A").End(xlUp).Row - 1, 1)
            C.Offset(1, 0).AutoFill Destination:=Plage
        End With
        Set Plage = Nothing: Set C = Nothing
        Set TS = Nothing: Set CP = Nothing: Set DS = Nothing: Set DA = Nothing: Set DR = Nothing: Set VD = Nothing
    End Sub
    Cordialement.

  6. #6
    Membre averti
    Inscrit en
    Août 2012
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 14
    Par défaut
    Merci gFTZ82.

    Le probleme est que les cellules sont definies dans la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            C.Offset(1, 0).FormulaLocal = "=SI(B2=""NOK"";""NOK"";SI(OU(D2=""UUUXXX"";D2=""YYYXXX"";D2=""WWWXXX"";D2=""ZZZXXX"");""MOUT"";SI(OU(D2=""AAAXXX"";D2=""BBBXXX"";D2=""GGGXXX"");C2&E2&GAUCHE(D2;3)&H2&G2;SI(D2=""XXXCCC"";C2&E2&DROITE(D2;3)&H2&G2;SI(OU(D2=""XXXDDD"";D2=""XXXEEE"";D2=""XXXFFF"");SI(C2=""N"";""K"";""N"")&J2&DROITE(D2;3)&H2&G2;""FILL"")))))"
    alors que les colonnes peuvent etre placees dans n'importe quel ordre dans le fichier.

    Le besoin est de trouver une formule qui trouvera la colonne qui convient et redescendra prendre la donnee dans chaque ligne.

Discussions similaires

  1. [VBA] Conditions
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 14/10/2005, 15h38
  2. [VBA] Condition d'ouverture d'état
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 11h26
  3. [VBA] Condition - opérateurs logiques
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 07/10/2005, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo