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 :

Comparer avec un critère Paramétré dans la fonction IF


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Par défaut Comparer avec un critère Paramétré dans la fonction IF
    Bonjour
    je bute bêtement sur le fonctionnement de la boucle if then else.
    Je m'explique
    Pour alléger mon programme, je voudrais paramétrer la valeur de comparaison de la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If ws1.Cells(i, 17) <> CRIT Then
                    'Remplissage d'un tableau
    Else
    End If
    CRIT est un critère, choisi au début du programme par msgbox, il prend les valeurs string "G" ou "S" que je voudrais paramétrer dans cette boucle

    CRIT peut prendre les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim CRIT as string
    CRIT = "G"
    ou
    et tester sur CRIT sans avoir besoin de créer deux boucles, selon le critère CRIT, vous m'avez compris.
    Mais ça ne semble pas fonctionner.
    C'est sans doute simple comme question mais je ne vois pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim CRIT as string
    If MsgBox("Import des données de G ?", vbYesNo, "Choix du site") = vbYes Then
        CRIT = "G"
       Else
        CRIT = "S"
    End If
     
    For i = PL to DL
    ‘ PL et DL sont les première et dernière ligne
    If ws1.Cells(i, 17) <> CRIT Then
                    'Remplissage d'un tableau
    Else
    End If

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Polygos Voir le message
    je bute bêtement sur le fonctionnement de la boucle if then else.
    L'instruction If n'est pas une boucle mais une assignation.

    If ws1.Cells(i, 17) <> CRIT Then
    'Remplissage d'un tableau
    Else
    End If
    S'il n'y a pas d'action à réaliser quand la condition est fausse, alors le Else est inutile et on peut s'en passer dans l'écriture.

    et tester sur CRIT sans avoir besoin de créer deux boucles, selon le critère CRIT, vous m'avez compris.
    Je n'ai pas trop compris ce que tu demandes mais j'ai l'impression que ce qu'il te faut ce n'est pas un If mais un Select Case.
    A lire : https://docs.microsoft.com/fr-fr/off...case-statement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select Case CRIT
    Case "G"
        ... action pour G ...
    Case "S"
        ... action pour S ...
    End Select
    If MsgBox("Import des données de G ?", vbYesNo, "Choix du site") = vbYes Then
    CRIT = "G"
    Else
    CRIT = "S"
    End If
    Plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CRIT = IIf(MsgBox("Import des données de G ?", vbYesNo, "Choix du site") = vbYes, "G", "S")
    Tu pourrais aussi passer par une InputBox pour taper directement "G" ou "S".

  3. #3
    Membre confirmé Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Par défaut Pas à pas
    Bonsoir Menhir et merci de ta proposition.
    Oui j'ai bien pensé à l'instruction "case" mais comme je le construits pas à pas, je testais au plus simple avec une "boucle if" qui tu as raison n'en est pas une.
    Donc tu me confirmes que la syntaxe est bonne, et que la déclaration des variables de cette instruction if sont de bonne nature en "string" ?
    "Je n'ai pas trop compris ce que tu demandes "; la boucle ne démarre pas, comme si elle était erronée..
    Par contre le code pour la boite de message me plait bien mieux bien sûr; c'est plus propre.
    Je vais faire un pas à pas détaillé pour voir OU ça bloque exactement mais je comprends que mes variables sont bien définies et que mes instructions sont correctes a priori; ok ?
    A bientôt
    Ch

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Polygos Voir le message
    Donc tu me confirmes que la syntaxe est bonne, et que la déclaration des variables de cette instruction if sont de bonne nature en "string" ?
    Quant une variable doit contenir du texte (même un unique caractère), elle est de type String.

    la boucle ne démarre pas, comme si elle était erronée..
    J'espère que dans une précédente partie du code, tu as renseigné les variables PL et DL.

    mes instructions sont correctes a priori; ok ?
    Je suis étonné par l'opérateur <> dans le If à l'intérieur de ta boucle.

  5. #5
    Membre confirmé Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Par défaut Different de
    Bonjour Menhir.
    Tout est checké mais je suis surpris ..de ta surprise !
    <> est pourtant bien LE test "différent de " ?

    Merci de tes lumières !

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Polygos Voir le message
    Tout est checké mais je suis surpris ..de ta surprise !
    <> est pourtant bien LE test "différent de " ?
    Dire que je suis étonné ne veut pas dire que ce soit faux.
    Je ne connais pas exactement ce que ton application est supposée faire.

    Je suis étonné que tu demandes quel type d'éléments sont à traiter et que tu remplisses ton tableau avec ceux ne correspondant pas à ce critère.
    Je ne saisie pas la logique entre la question du MsgBox et le test à l'intérieur de la boucle.

  7. #7
    Membre confirmé Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Par défaut pourquoi trier sur "différent de" ?
    Bonjour Menhir
    En fait trier sur des "différents de" me permet d'atteindre exactement ce que je veux.
    J'ai un traitement different à faire selon qu'un produit appartient à un groupe défini par une collection. Ce critère d'appartenance de mes produits à un groupe peut prendre 4 valeurs de collection possibles, BNGS
    soit B N G pour un groupe de produit que je dois ensuite traiter d'une certaine manière
    soit B N S pour les traiter differemment
    En triant sur non G ou non S, je sélectionne le bon groupe
    si different de G, les produits traités font donc partie de la sélection BNS, (B et N étant commun à tous les articles concernés par un traitement ou l'autre) si différents de S, alors ils font partie de BNG.
    C'est plus clair sur cette utilisation du tri sur la non appartenance à une collection ?
    Merci de ton intérêt

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/07/2006, 15h22
  2. apostrophe comme paramètre dans un fonction
    Par krfa1 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/06/2006, 16h54
  3. Réponses: 3
    Dernier message: 20/03/2006, 17h46
  4. [PL/SQL] Multi paramètre dans une fonction
    Par wiLL_ dans le forum Oracle
    Réponses: 2
    Dernier message: 28/02/2006, 17h31
  5. Réponses: 9
    Dernier message: 13/05/2005, 03h13

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