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 :

Double condition IF [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut Double condition IF
    Bonjour,

    J'ai créé une UserForm. Une partie de celle-ci demande à l'utilisateur de choisir entre 2 types de toit (listbox single) et une série d'isolants (listbox multi)
    Ses choix sont affichés ensuite dans une feuille.("Données")

    J'ai une liste sur la feuille "Toit" qui reprends les isolants disponnibles pour les 2 types de toit ainsi que certaines caractéristiques.

    Je voudais que pour le type de toit choisis par l'utilisateur ET pour chaque isolant chosis, ma macro inscrive la caratiristique explicitée par la Ieme colonne "Toit" dans la colonne K de ("Données")

    J'ai essayé avec un double If dont voici la code. cependant il m'indique une erreur que je ne saisis pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 To 33
    For j = 0 To 25
    Dim row As Long
     
        If LstBoxToit.Value = Range("Toit!Bi").Value And _
        LstBoxToitIso.Value(j) = Range("Toit!Ci").Value Then
     
        Range("Données!K1").Offset(row, 0).Value = Range("Toit!Ii").Value
    row = row + 1
    End If
    Next i
    Next j


    Auriez-vous une idée pour ajuste le code ou alors un conseil pour procéder autrement?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If LstBoxToit.Value = Range("Toit!B" & i).Value And _
        LstBoxToitIso.Value(j) = Range("Toit!C" & i).Value Then

  3. #3
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Salut,
    De plus tu déclares ta variable row
    mais tu n'indiques pas combien elle vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim row as Long
    row =????
    Peux -être serait-il préférable de déclarer ta variable à l'extérieur des boucles for

    inverse : par

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    et en plus évite le mot row à mon avis. "Ligne" suffira tout à fait

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Merci,
    cependant j'ai maintenant droit au message d'erreur suivant fluorant les 5 et 6 ème lignes:
    Run-time error '13'
    type mismatch

    Que suggérez-vous?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Ligne As Long
    Ligne = 0
    For i = 1 To 33
    For j = 0 To 25
     
        If LstBoxToit.Value = Range("Toit!B" & i).Value And _
        LstBoxToitIso.Value(j) = Range("Toit!C" & i).Value Then
     
        Range("Données!K1").Offset(Ligne, 0).Value = Range("Toit!I" & i).Value
    Ligne = Ligne + 1
    End If
    Next j
    Next i

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Slt,
    je ne suis pas un expert et j'ai beaucoup à apprendre mais je n'ai jamais vu ceci dans un code pour une listbox : ce qui me gêne c'est le (j).
    Peux-t-on écrire cette syntaxe ou l'erreur serais là?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    J'ai modifié le code de facon a ne plus avoir d'erreur cependant rien ne s'affiche à l'exécution de la macro.

    Il serait peut etre bon de remetre plus dans le contexte. je vous met donc les codes aférents au toit.
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    'Création de la liste Toit
    'Définition de la variable liste avec 2 lignes et une colonne
     
        Dim ListToit(1, 0) As String
        ListToit(0, 0) = "Incliné"
        ListToit(1, 0) = "Plat"
    'Attache la liste toit créée à la ListBoxToit du UserForm
     
        LstBoxToit.List = ListToit
     
     
    'Import des données pour la liste des isolants diponnibles depuis la 
    'feulle 2
     
    Dim isolantsdispo As String
    LstBoxToitIso.RowSource = "IsolantsDispo"
     
     
    'Affiche le type de toit sélectionné
    For i = 0 To 1
        If LstBoxToit.Selected(i) Then
            Range("données!C3").Value = LstBoxToit.List(i)
        End If
    Next i
     
     
     
    'Affiche la liste des isolants choisis par le client dans la jième colonne
    Dim row As Long
    row = 0
    For k = 0 To 17
    If LstBoxToitIso.Selected(k) Then
    Range("données!j1").Offset(row, 0).Value = LstBoxToitIso.List(k)
    row = row + 1
    End If
    Next k
     
     
    'Croisement des données sélectionnées avec la liste de possiblités pour le toit.
     
    'En cas de correspondance, afficher dans la colonne (données!k) la 
    'valeur du coéfficient
    'correspondant a l'isolant situé en colonne (toit!I)
     
    Dim l, m As Integer
    Ligne = 0
    For l = 1 To 33
    For m = 0 To 25
     
        If Range("données!C3").Value = Range("Toit!B" & l).Value And _
        Range("données!J1").Offset(m, 0).Value = Range("Toit!C" & l).Value Then
     
        Range("données!K1").Offset(m, 0).Value = Range("Toit!I" & l).Value
     
    End If
    Next m
    Next l
    REM : les codes viennent de différentes sub dans la macro


    C'est bien la dernière partie qui pose problème. J'ai pensé que peut-être qu'une boucle do...loop while pourait marcher mais je ne sais pas comment la construire avec les 2 variables (type de toit et isolants).

    En gros je ne sais pas quoi faire et suis ouvert à toute idée.

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

Discussions similaires

  1. Double condition: question
    Par El-Diablo- dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/04/2007, 20h24
  2. ouverture d'un formulaire sur une double condition
    Par mat75019 dans le forum Access
    Réponses: 6
    Dernier message: 27/10/2006, 16h13
  3. Double condition sur une date
    Par Olivier95 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 26/06/2006, 13h34
  4. Double condition !!
    Par calimero642 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 13h49
  5. Réponses: 8
    Dernier message: 02/05/2006, 16h07

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