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 :

variable à plusieurs valeurs dans une bcle If then ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut variable à plusieurs valeurs dans une bcle If then ?
    bonjour
    voila le probleme
    j'ai le test suivant
    si SP= val alors instruction
    le truc , c'est VAL contient plusieurs valeurs qui peuvetn etre discontinues.

    ex val =( 45,48,58,60,....)
    j'ai essayé
    si SP =(45,48.... marche pas erreur
    si SP=(45 or 48....) marche pas

    si quelqu'un à une idee



    peut un tableau () ...........

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Une idée ?
    Oui, plusieurs... mais la plus simple reste d'utiliser un select case, pardi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim toto As Integer
    toto = 4
    Select Case toto
      Case 1, 5, 12, 27
        MsgBox "oui"
      Case 8, 4
        MsgBox "peut-être"
      Case Else
        MsgBox "non"
      End Select

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut

    rien dire




    je rajoute les valeurs sont issus d'une procedure
    donc pour reprendre
    Case 1, 5, 12, 27
    comment faire pour inclure dans le case (x,y,z,....) les resultats de la procedure

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    pour info quand même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if sp = 44 or sp=11 or sp=4 then
    il faut mettre le or entre les =
    Chaque égale renvoie un booléen et on utilise les or pour les traiter

    regarde celui la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim a as boolean,b as integer,c as integer
    b=3
    c=6
    a=b=c
    msgbox a
    a=2*b=c
    msgbox a

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 502
    Points : 181
    Points
    181
    Par défaut
    bonsoir ucfoutu, krovax

    comme je le dis
    les valeurs etant issues d'une procedure donc le nb de valeurs est variables .
    il faut que je trouve un moyen de les inclure automatiquement dans mon test .
    pour le SELECT CASE , c'est mieux que rien
    il faudrait que je creuse l'idee du tableau
    le test si SP est present dans le tableau et je lance l'instruction

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Dans ce cas si tu as un tableau val et que tu veux tester si sp est une des valeur
    mais dans ce cas sp=val ne peux pas fonctionner va dire a un matheux si 5 égale le vecteur (1,2,3) il va faire de gros yeux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i = 0 to ubound(val )
    if val(i)=sp then 
    flag=true
    exit for
    end if
    next i
     
    'ensuite tu test flag
    if flag then mesgbox "sp est une des valeur de val"

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re...

    Je n'aime pas trop l'idée de parcourir un tableau ==>> lent si éléments nombreux ...

    Rien n'empêche d'utiliser des variables et d'y "fouiller".
    Les variables peuvent résulter d'une concaténation des valeurs (celles que l'on met dans un tableau ...)

    Exemple (et à toi d'adapter car je n'aime pas trop que l'on avance pas à pas en raison du fait que tu ne dis les choses que peu à peu ...).

    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
    Dim valeuroui As String, valeurpeutetre As String, valeurnon As String
    'si tes valeurs sont récupérées quelque part, rien, ne t'empêche, au moment
    ' de la récupération, de les écrire dans des chaînes, en concaténation
    ' et tu aurais (exemple) un résultat ressemblant à ceci
    valeuroui = "#1#5#8#9#"
    valeurpeutetre = "#2#4#"
    valeurnon = "#0#3#6#7#"
    atester = 4 ' bien évidemment, ce sera la valeur à tester et non forcément 4
    If CBool(InStr(valeuroui, "#" & atester & "#")) Then
      MsgBox "oui"
    ElseIf CBool(InStr(valeurpeutetre, "#" & atester & "#")) Then
      MsgBox "peut-être"
    ElseIf CBool(InStr(valeurnon, "#" & atester & "#")) Then
      MsgBox "non"
    End If
    Entre ceci et tout ce que t'ont dit plus haut les uns et les autres, à toi de jouer un peu (le reste n'est qu'organisation de ta pensée en fonction de ce que tu veux faire et des valeurs que tu dis extraire, sans autre précision).
    Travaille bien.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 150
    Points : 100
    Points
    100
    Par défaut
    Salut,

    Moi perso j'aime bien l'idée du tableau. Mais un tableau spécifique : le Dictionnary

    Donc tu vas Tools> References et tu coches Microsoft Scripting Routine

    Et apres ca donne un truc du genre

    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
    Sub MonCas(ByVal MonInt As Integer)
     
    Dim oDico As Scripting.Dictionary
    Set oDico = New Scripting.Dictionary
    oDico.Add PROCEDURE1, "OUI"
    oDico.Add PROCEDURE2, "OUI"
    oDico.Add PROCEDURE3, "NON"
    oDico.Add PROCEDURE4, "OUI"
    oDico.Add PROCEDURE5, "PEUT-ETRE"
     
    If oDico.Exists(MonInt) = False Then
        MsgBox MonInt & " n'existe pas"
    Else
        MsgBox oDico.Item(MonInt)
    End If
    Set oDico = Nothing
     
    End Sub
    Un Petit exemple pour tester en direct
    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
    Sub MonCas1(ByVal MonInt As Integer)
     
    Dim oDico As Scripting.Dictionary
    Set oDico = New Scripting.Dictionary
    oDico.Add 1, "OUI"
    oDico.Add 2, "OUI"
    oDico.Add 3, "NON"
    oDico.Add 4, "OUI"
    oDico.Add 5, "PEUT-ETRE"
     
    If oDico.Exists(MonInt) = False Then
        MsgBox MonInt & " n'existe pas"
    Else
        MsgBox oDico.Item(MonInt)
    End If
    Set oDico = Nothing
    End Sub
    Sub Main()
        Call MonCas1(1)
        Call MonCas1(11)
    End Sub

Discussions similaires

  1. Stocker plusieurs valeurs dans une variable Session
    Par PrinceMaster77 dans le forum Langage
    Réponses: 3
    Dernier message: 05/01/2010, 11h04
  2. Réponses: 5
    Dernier message: 04/06/2008, 10h03
  3. recuperer plusieurs valeurs dans une cellule
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/03/2008, 21h40
  4. plusieurs valeurs dans une seul select
    Par sonja dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/06/2007, 16h30
  5. Réponses: 10
    Dernier message: 03/07/2006, 14h55

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