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 :

Problème condition "if x comprise entre y et z"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant Ingenieur Industriel
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant Ingenieur Industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Par défaut Problème condition "if x comprise entre y et z"
    Bonjour à tous,

    Je suis nouveau sur le Forum et dans le monde de VBA

    Petite présentation rapide,
    Je suis étudiant ingénieur ( passage de en 2eme année) en Alternance. Je connais un peu de code en JAVA mais seulement des fonctions simples. La base de la base quoi! J'ai du m'attaquer au VBA pour la modification d'un Userform dans mon entreprise et là juste avant de finir tout mon sub, ça bloque.
    Je peux que vous mettre que le passage où ça bloque car je suis pas autorisé à vous mettre le reste des données...

    Petite explication,
    Je suis chargé de rajouter un champs de recherche global. Tout fonctionne, mon choix de critères avec ma combo box, la texte box pour la valeur cherchée selon le critère sauf que quand j'ajoute un code pour qu'il me fasse un filtre quand il s'agit d'intervalle ( par exemple si j'ai une valeur min 60 en colonne A1 et valeur max 80 en B1, il faut que si la personne ecrit 70 que la ligne s'affiche quand même vu que c'est dans le bon intervalle)

    J'ai essayé plusieurs codes, mais maintenant quand je rentre par exemple en valeur (lookupvalue dans mon code) 17, mon code devrait m'afficher 18 possibilité mais il m'en affiche beaucoup plus qui ne correspondent pas à l'intervale demandé.

    Voici mes différents codes pour cette fonction:

    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
       For Line = 2 To LastLine
                   If Sheets("BF").Cells(Line, 1).Value = "" Then
                   Sheets("Tabelle1").Select
                        If Sheets("Tabelle1").Cells(Line, 4).Value >= lookupvalue And Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then
     
                                Sheets("Tabelle1").Rows(Line).Select
                                Selection.Copy
                                Sheets("BF").Select
                                Sheets("BF").Rows(Line).Select
                                ActiveSheet.Paste
                       Else
                       End If
                   Else
                   End If
                        Next Line
    Sur le premier j'ai aussi éssayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Tabelle1").Cells(Line, 4).Value >= lookupvalue=>Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Sheets("Tabelle1").Cells(Line, 4).Value < lookupvalue<Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then


    2.


    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
    Sheets("Tabelle1").Select
    For Line = 2 To LastLine
    Select Case lookupvalue
           Case Sheets("Tabelle1").Cells(Line, 4).Value To Sheets("Tabelle1").Cells(Line, 5).Value
            If Sheets("Tabelle1").Cells(Line, 4).Value Or Sheets("Tabelle1").Cells(Line, 5).Value <> " " Then
                    Sheets("Tabelle1").Select
                    Sheets("Tabelle1").Rows(Line).Select
                    Selection.Copy
                    Sheets("BF").Select
                    Sheets("BF").Rows(Line).Select
                    ActiveSheet.Paste
            Else
            End If
        End Select
    Next Line

    ha oui je précise quand même que je connais pas vraiment les fonctions de base du vba donc je tente de contourner avec des boucles quand j'ai un obstacle. c'est plus long mais ça marche (à part dans ce cas). Et pour expliquer les copiers collés et tout c'est parce que je passe par un autre tableau pour faire le tri. De plus, il y a un premier tri avant avec les "valeurs vraies" c'est pour ça que je lui dit de passé à la ligne suivante si la ligne dans BF est déjà présente.

    Si vous avez une idée sur le pourquoi ces boucles ne fonctionnent pas je suis preneur

    Bonne journée à vous et merci d'avance

  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
    D'abord quelques conseils :
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                                Sheets("Tabelle1").Rows(Line).Select
                                Selection.Copy
                                Sheets("BF").Select
                                Sheets("BF").Rows(Line).Select
                                ActiveSheet.Paste
    peut s'écrire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                                Sheets("Tabelle1").Rows(Line).Copy Sheets("BF").Rows(Line)
    Et dans une structure "If Then" inutile de mettre un "Else" s'il n'y a rien dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        If Sheets("Tabelle1").Cells(Line, 4).Value >= lookupvalue And Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then
    Ceci ne marche pas car tes deux inégalités sont dans le même sens. Elles ne peuvent donc pas constituer un intervalle.
    A part ça, c'est la seule de tes propositions qui soit syntaxiquement correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Tabelle1").Cells(Line, 4).Value >= lookupvalue=>Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then
    Ceci ne peut pas marché car on ne peut mettre qu'une seule égalité (ou inégalité) dans une condition.
    Et l'opérateur d'équivalence "=>" n'existe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Sheets("Tabelle1").Cells(Line, 4).Value < lookupvalue<Sheets("Tabelle1").Cells(Line, 5).Value >= lookupvalue Then
    Idem ci-dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If Sheets("Tabelle1").Cells(Line, 4).Value Or Sheets("Tabelle1").Cells(Line, 5).Value <> " " Then
    Ceci ne fonctionne que si Cells(Line, 4) contient une valeur logique (VRAI ou FAUX).
    Comme je ne pense pas que ce soit le cas, il faudrait savoir à quoi tu le compares.

    Si le but du test est de savoir si le contenu de Cells(Line, 5) est vide, il ne faut pas mettre d'espace entre tes guillemets.

    Une dernière chose : quand on indique la référence à une cellule se trouvant dans une feuille active (ce qui se produit quand on fait un Select sur cette feuille), inutile de rappeler la désignation de la cellule.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Tabelle1").Select
    For Line = 2 To LastLine
    Select Case lookupvalue
           Case Sheets("Tabelle1").Cells(Line, 4).Value To Sheets("Tabelle1").Cells(Line, 5).Value
    peut être simplifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Tabelle1").Select
    For Line = 2 To LastLine
    Select Case lookupvalue
           Case Cells(Line, 4).Value To Cells(Line, 5).Value

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant Ingenieur Industriel
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Etudiant Ingenieur Industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Par défaut
    Merci beaucoup,

    J'ai compris mes erreurs.

    Et merci pour les astuces, ça simplifie pas mal mon code

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

Discussions similaires

  1. [VB]Enlever 1 jour à une date si heure est comprise entre...
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 20/01/2006, 14h48
  2. [Debutant]Problème Condition et TChart
    Par ghan77 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/01/2006, 12h12
  3. [AS1] Problème condition actionscript
    Par denis finch dans le forum Flash
    Réponses: 20
    Dernier message: 22/12/2005, 00h08
  4. Réponses: 19
    Dernier message: 28/10/2005, 17h29
  5. Problème: condition sur formulaire dans requête
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 23h27

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