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 :

If clause a multi critères [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2007
    Messages : 17
    Par défaut If clause a multi critères
    Bonjour,

    Je cherche le moyen d'extraire de données d'un tableau sous conditions.
    Il faut réunir trois conditions présente dans le tableau mais dans différentes colonne. Si cela est vrai il me faut extraire certaine données de cette ligne puis il doit poursuivre sa recherche afin de me sortir toutes les données accumulant les trois critères.
    Je n'arrive pas a transposer cela en VBA. Serait-il possible de me mettre en ligne une ébauche du genre
    Si critère 1 = vrai et critère 2 = vrai et critère 3 = vrai alors
    copie ligne active colonne x vers feuille xy ligne t colonne u
    copie ligne active colonne x+1 vers feuille xy ligne t colonne u+1
    de manière a ce qu'un tableau se crée avec les nouvelles données extraite.
    J'espère juste avoir été assez clair dans ma demande.
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    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
    Sub critere()
      Dim a As String, b As String, c As Single
      a = "Test": b = "Toto": c = 100
      If a = "Test" And b = "Toto" And c > 50 Then
          ' Code 1
          MsgBox "Je copie"
        Else
          ' Code 2
          MsgBox "Je ne copie pas"
      End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    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
     
    dim val1 as string
    dim val2 as string
     
    If test1 then
           If test2 then
                  If test3 then
                        val1 = Range( x & ActiveCell.Row).Value
                        val2 = Range( x +1 & ActiveCell.Row).Value
                        Sheets("xy").Select
                        Range( u & t).Value = val1
                        Range(u+1 & t).Value = val2
                  End If
           End If
    End If

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par JoeJoeH Voir le message
    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
     
    dim val1 as string
    dim val2 as string
     
    If test1 then
           If test2 then
                  If test3 then
                        val1 = Range( x & ActiveCell.Row).Value
                        val2 = Range( x +1 & ActiveCell.Row).Value
                        Sheets("xy").Select
                        Range( u & t).Value = val1
                        Range(u+1 & t).Value = val2
                  End If
           End If
    End If
    Pour copier des cellules d'une feuille vers des cellules d'une autre feuille, cela peut se faire directement sans passage par une variable ni par un select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("xy").Range("A10") = Sheets("R").Range("A1")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Par défaut
    Ah, c'est juste une habitude de notre prof de développement qui nous disait que c'était préférable de passer par des variables.

  6. #6
    Membre éclairé Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Par défaut
    Citation Envoyé par JoeJoeH Voir le message
    Ah, c'est juste une habitude de notre prof de développement qui nous disait que c'était préférable de passer par des variables.
    Pour autant que je sache, c'est vrai lorsqu'on utilise plusieurs fois la valeur contenue dans le Range, ici pour un copier/coller il vaut mieux utiliser le code de corona.
    Et puis les Select ont tendance à ralentir l'exécution du code.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2007
    Messages : 17
    Par défaut
    Merci pour les ébauches, je vais mettre tout cela en pratique et vous tiens au courant si cela fonctionne comme je le désire.
    Entre temps j'ai teste une formule du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If range("A1").value = "critère1" and range("A2").value = "critère2" then
    range("A10").value = "vraie"
    else
    range("A10").value = "faux"
    End if
    script que j'ai mis dans un "commandbutton" pour tester le "and"
    Cela fonctionne reste à tester sur combien de "and" cela fonctionne.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Citation Envoyé par philou7168 Voir le message
    Merci pour les ébauches, je vais mettre tout cela en pratique et vous tiens au courant si cela fonctionne comme je le désire.
    Entre temps j'ai teste une formule du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If range("A1").value = "critère1" and range("A2").value = "critère2" then
    range("A10").value = "vraie"
    else
    range("A10").value = "faux"
    End if
    script que j'ai mis dans un "commandbutton" pour tester le "and"
    Cela fonctionne reste à tester sur combien de "and" cela fonctionne.
    Quand tu utilises "Vrai" et "Faux". C'est une chaîne de caractères ou une valeur logique que tu souhaites écrire ?
    Parce-que si c'est une valeur logique, le code pourrait être celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If range("A1").value = "critère1" and range("A2").value = "critère2" then
    range("A10").value = True
    else
    range("A10").value = False
    End if
    Ce qui te permet alors d'utiliser la valeur de cette cellule avec un test logique.
    Avec une formule Excel
    Ou en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("A10") Then MsgBox "Ok" Else MsgBox "Pas ok"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ah, c'est juste une habitude de notre prof de développement qui nous disait que c'était préférable de passer par des variables.
    C'est tout à fait vrai. Dans mon exemple j'ai mis des constantes mais évidemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(nomA).cells(r,c) = Sheets(nomB).Range(Adress)
    C'est aussi des variables.
    Le but de mon intervention était de signaler qu'il est inutile de passer par une variable intermédiaire et surtout de ne pas utiliser le Select qui est parfaitement inutile et surtout qui ralentit la procédure.
    Evidemment aussi, il est préférable de définir par une variable objet la ou les feuilles utilisées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With ThisWorkbook
     Dim shtA As Worksheet: Set shtA = .Worksheets("xy")
     Dim shtB As Worksheet: Set shtB = .Worksheets("R")
    End With
    Dim r As Single, c As Single
    Dim adr As String: adr = "A1"
    r = 10: c = 1:
    shtA.Cells(r, c) = shtB.Range(adr)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  2. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33
  3. Requete multi-critères
    Par anutka dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/09/2005, 13h30
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

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