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 :

Code vba, utilisation de la fonction "If"


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
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 13
    Par défaut Code vba, utilisation de la fonction "If"
    Bonjour à tous mon problème est le suivant: je souhaite effectuer une condition dans ma vba avec une message box, à savoir:
    Si la valeur entrer est contenue dans ma colonne D alors Msg box: le numéro est déjà attribuer.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Sheets("historique commandes").Columns("D:D").Find(What:=numerodecommande.Value) Is Nothing Then
        MsgBox "Le numéro de commande est déja utilisé."
        numerodecommande.Value = ""
     
    End If
    Cepandant la message ne s'affiche pas, je pense que cela vient du "Is nothing then" dans ma condition qui n'est pas approprié.
    Quelqu'un pourrait-il m'aider ?
    Merci d'avance de vos réponses

  2. #2

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Je pense que c'est plutôt l'inverse que tu cherches à faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If NOT Sheets("historique commandes").Columns("D:D").Find(What:=numerodecommande.Value) Is Nothing Then
        MsgBox "Le numéro de commande est déja utilisé."
        numerodecommande.Value = ""
     
    End If
    Si le Find retourne Nothing, c'est qu'il n'a pas trouvé de concordance.
    Le Not inverse la condition pour dire qu'il l'a trouvée.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Ou encore avec CountIf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Test()
     
        If Application.CountIf(Sheets("historique commandes").Columns("D:D"), numerodecommande.Value) > 0 Then
     
            MsgBox "Le numéro de commande est déja utilisé."
            numerodecommande.Value = ""
     
        End If
     
    End Sub

  5. #5
    Invité
    Invité(e)
    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
    16
    17
    18
    19
    Sub Test()
    With Sheets("historique commandes")
        If CBool(SerchXls(.Columns("D:D"), .Range("D1"), numerodecommande.Value, True, False)) Then
            MsgBox "Le numéro de commande est déja utilisé."
             numerodecommande.Value = ""
        End If
    End With
    End Sub
     
     
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, EnBoucle As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
    If EntierCell = False Then Entier = xlPart Else Entier = xlWhole
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=Entier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row And EnBoucle = False Then SerchXls = 0
    End Function
    Code Theze : Sélectionner tout - Visualiser dans une fenêtre à part
    If CBool(Application.CountIf(Sheets("historique commandes").Columns("D:D"), numerodecommande.Value) )Then

  6. #6
    Membre confirmé
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Par défaut
    Il peu y avoir des choses qui ne fonctionnent pas,

    mais si on ne sait pas pourquoi elles ne fonctionnent pas,

    c'est plutôt perturbant.

    Comprendre pourquoi on peut boucler (même si la boucle n'est pas du gout de tous pour cette problématique) sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fin = Worksheets("txcouvglo").Range("A1:AD200000")
    Mais pas sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fin = Worksheets("txcouvglo").Range("A1:AD200000").SpecialCells(xlCellTypeConstants).Select
    Alors que la seul différence est la selection de cellule vide ou non.

Discussions similaires

  1. [XL-2002] Code VBA pour remplacer la fonction RECHERCHEV
    Par NoodleDS dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/07/2013, 09h58
  2. [XL-2003] Reecriture de code VBA utilisant 1D-Array en 2D array
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/03/2011, 12h58
  3. Réponses: 2
    Dernier message: 14/01/2010, 19h32

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