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 de type dynamique dans une condition [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Par défaut Variable de type dynamique dans une condition
    Bonsoir à tous,

    Je rencontre un problème car j'ai besoin de constituer une variable dynamique en créant une variable message et de placer cette dernière dans une conditionnelle.

    Voici mon code :

    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
    32
    33
    34
    35
    36
    37
    38
     
    Dim X(1 To 4)
    n = 1
    C = 1
    derlg = Feuil2.Range("A65536").End(xlUp).Row
    For Uv = 1 To 4 Step 1
    Tbvard = Me.Controls("combobox" & Uv).Value
    If Tbvard = "TOUS" Then
    Cpt = Cpt + 1
    End If
    Next Uv
     
    For vi = 2 To derlg Step 1
    Message = ""
      X(1) = "Feuil2.Range" & "(" & """K""" & " " & "&" & "  " & vi & ")" & ".Value"
      X(2) = "Feuil2.Range" & "(" & """D""" & " " & "&" & "  " & vi & ")" & ".Value"
      X(3) = "Feuil2.Range" & "(" & """B""" & " " & "&" & "  " & vi & ")" & ".Value"
      X(4) = "Feuil2.Range" & "(" & """G""" & " " & "&" & "  " & vi & ")" & ".Value"
    For U = 1 To 4 Step 1
    Tbvar = Me.Controls("combobox" & U).Value
      If Tbvar <> "TOUS" Then
        testo = X(U)
        Mess = testo & " " & "=" & " " & "Userform7.ComBobox" & U & ".Value"
         If C < Cpt Then
         Message = Message & Mess & "  " & "And" & " "
         Else
         Message = Message & " " & Mess
         End If
       C = C + 1
      End If
     Next U
    If Message Then
    ' déroulement du code
    ' déroulement du code
    ' déroulement du code
    ' déroulement du code
    end if
    next
    Mon problème est que Message c'écrit sous forme "feuil2.range("B2").value = Userform7.Combobox1.value and feuil2.range("C2").value = Userform7.Combobox2.value" et du coup ça ne marche pas !
    Comment utiliser ma variable Message pour vérifier cette condition ?

    pour obtenir l'équivalent de ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  feuil2.range("B2").value = Userform7.Combobox1.value and feuil2.range("C2").value = Userform7. Combobox2.value then
    Soit sans les ""

    Merci par avance pour vos aides.

    Bien cordialement

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Par défaut
    J'ai essayé d'utiliser replace mais cela ne marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message=replace(message,"""","")

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    [Edit] Explique ce que tu veux faire exactement.
    Même si à mon avis ça ne sert à rien, tu peux réduire ta ligne comme ça pour info
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Feuil2.Range(""K""" & vi & ").Value"
    [/Edit]

    Je n'ai pas trop compris mais (et c'est salle comme solution) essaie de mettre message entre crochet lors du test

    Le fait de mettre entre crochet équivaut à utiliser eval(), l'évaluateur de code

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Par défaut
    Bonsoir Qwazerty,

    Merci pour cette réponse.
    J'ai 4 combobox dans un userform, ces 4 combobox contiennent une liste propre.
    La premiere c'est le type de document.
    La deuxieme c'est l'expéditeur
    La troisieme c'est le mois
    La quatrième c'est l'année
    chaque combobox à aussi le mot "TOUS"

    une fois la sélection faite dans ces combobox l'utilisateur fait une recherche dans une feuille base et j'affiche les récurrences trouvées dans une listeview.

    Le but est donc de ne prendre en compte que les combobox qui ont une donnée différente de "TOUS", soit écrire le code vba de la condition à vérifier et faire la recherche en fonction de celles-ci, pour éviter de faire
    4 conditionnelles différentes avec le code de remplissage de la listview !

    j'ai essayé

    mais cela ne fonctionne pas, j'obtiens pareil, erreur d’exécution 13 incompatibilité de type

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Essai comme ça

    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
    32
    33
    34
    35
    36
    37
    38
    39
    Sub test2()
        Const ListRange = Array("K", "D", "B", "G")
        Dim Resultat As Boolean 'Par défaut il est initialisé à False
        Dim iList As Byte
        Dim Vi As Long
     
        'On initialise Resultat à True
        Resultat = True
     
        'On boucle sur les ligne du tableau
        For Vi = 2 To feuil2.Cells(feuil2.Rows.Count, "A").End(xlUp).Row
            'On boucle sur les combobox
            For iList = 1 To 4
                'On regarde si le combobox contient autre chose que "TOUS"
                If Me.Controls("combobox" & iList) <> "TOUS" Then
                    'Si c'est le cas on compare sa valeur avec la cellule qui lui est associée
                    'A la 1ère boucle qui passe ici, Resultat vaut True
                    'True est "transparent" lors d'un And
                    'Quelquesoit le second terme du And c'est lui qui décidera de la valeur de Resultat
                    'True And True = True
                    'True And False = False
                    'On voit bien que tant que le contenu de Resultat est True, il n'influence pas le And
                    'Par contre dès que Resultat passe à False, il sera impossible qu'il repasse à True
                    'False And True  = False
                    'False And False = False
                    'On pourra donc quitter la boucle dès que Resultat passera à False
                    Resultat = Resultat And (feuil2.Cells(Vi, ListRange(iList)).Value = Userform7.Controls("ComBobox" & iList).Value)
                    If Not Resultat Then Exit For
                End If
            Next
            'On teste le Resultat
            If Resultat Then
                ' déroulement du code
                ' déroulement du code
                ' déroulement du code
                ' déroulement du code
            End If
        Next
    End Sub
    Mais si le but c'est de faire un tri, je ne suis pas sûr de la direction que prend ton code.

    Tu devrais Expliquer plus en détail et peut-être mettre un fichier de travail (sans données confidentielles mais avec des données structurées comme il faut pour pouvoir faire des essais).

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 390
    Par défaut
    Un grand merci je test demain car je ne suis plus chez moi, je re poste dès demain matin

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Portée de variable de type Array dans une class
    Par oceanbigone dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2013, 02h02
  2. Variable de type string dans une méthode
    Par bubblebe dans le forum Débuter
    Réponses: 6
    Dernier message: 16/08/2011, 20h34
  3. [SSIS] variable de type object dans une requete
    Par Huston dans le forum SSIS
    Réponses: 1
    Dernier message: 09/06/2010, 19h13
  4. [MySQL] insertion d'un variable de type chaine dans une base
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/03/2009, 15h20
  5. variable de type string dans une requete sql
    Par hammag dans le forum JDBC
    Réponses: 9
    Dernier message: 15/06/2008, 01h32

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