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 :

RechercheV dans VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut RechercheV dans VBA
    Bonjour,

    Je voudrais avoir la syntaxe de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RECHERCHEV(ALEA();$F$10:$H$14;3)
    en VBA donc j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(ligne.colonne) = WorksheetFunction.VLookup(ALEA(), .Range("F10:H14"), 3, False)

    J'ai tant cherché mais rien ne marche. Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour NadraMGE,

    C'est pas trop mal pourtant !
    Par contre la formule "ALEA()" te retourne un nombre aléatoire entre 0 et 1.
    En VBA, tu n'as pas de fonction toute faite de la sorte.

    Ainsi, il me semble que tu doives passer par une fonction personnalisée.
    Voici pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'nb_chiffr représente de nombre de chiffre que la variable aléatoire doit contenir (en d'autres termes = le nombre de chiffres après la virgule)
    'La fonction ALEA() contient X chiffres après la virgule. Il suffit d'identifier ce X et de la placer en paramètre dans la fonction.
    Function aleatoire(nb_chiffr As Integer)
     
        Dim Val_max As Double
     
        Val_max = 10 ^ nb_chiffr - 1
     
        Randomize
     
        'Nombre aléatoire entre 0 et 1 avec nb_chiffr après la virgule :
        aleatoire = (Int(Rnd * (Val_max + 1))) / 10 ^ nb_chiffr
     
    End Function
    Ce qui ferait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Feuil1")
        .Cells(ligne, colonne) = WorksheetFunction.VLookup(aleatoire(10), .Range("F10:H14"), 3, False)
    End With
    ... en remplacant "ligne" et "colonne" par ce que tu souhaites !

    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut Erreur 1004
    Bonjour Kimy_Ire,

    Merci pour ta réponse.
    J'ai essayé cette solution mais en exécutant le code ça me met erreur 1004 sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(ligne, colonne) = WorksheetFunction.VLookup(aleatoire(10), .Range("F10:H14"), 3, False)
    Je ne comprend toujours pas pourquoi la fonction WorksheetFunction.VLookup ne marche pas

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour NadraMGE,

    Vlookup renvoie toujours une erreur s'il ne trouve pas de correspondance.
    En cherchant sur un aléa c'est donc normale l'erreur, je dirais même que pas d'erreur serait étonnant

    Test avec une valeur que tu es certain de trouver et tu verras que le Vlook up marche (enfin j'espère ^^)

  5. #5
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ajouterai à la réponse d'Antony que la formule que tu cherches à reproduire est une recherche avec valeur proche et que pour qu'elle fonctionne, les données de la première colonne de la liste doivent être triées par ordre croissant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RECHERCHEV(ALEA();$F$10:$H$14;3)
    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

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut
    Bonjour,

    Voilà mon code:
    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
    Sub Remplissage()
    '
    ' RemplissageTableau Macro
    '
     
    '
        Dim Demande, NbVoitureLouees, NbJoursTot, NbVoitureDispo As Integer
        Dim ligne, colonne As Integer
     
     
        With ThisWorkbook.Sheets("Feuil1")
     
        ' Initialisation de Nombre de jours souhaités
        NbJoursTot = 30
        ' Pour chaque jour
        ligne = 19
        While NbJoursTot > 0
            NbVoitureDispo = .Cells(ligne, 3).Value
            Demande = .Cells(ligne, 3).Value
            If NbVoitureDispo > Demande Then
                NbVoitureLouees = Demande
                Else
                    NbVoitureLouees = NbVoitureDispo
            End If
            colonne = NbVoitureLouees + 4
            While colonne > 4
                .Cells(ligne, colonne) = WorksheetFunction.VLookup(aleatoire(10), .Range("F10:H14"), 3, False)
            Wend
            colonne = NbVoitureLouees + 5
            While colonne < 10
                .Cells(ligne, colonne) = 0
                colonne = colonne + 1
            Wend
            MsgBox ligne
            .Cells(ligne, 4) = NbVoitureLouees
            ligne = ligne + 1
            NbJoursTot = NbJoursTot - 1
        Wend
        End With
    End Sub
     
    'nb_chiffr représente de nombre de chiffre que la variable aléatoire doit contenir (en d'autres termes = le nombre de chiffres après la virgule)
    'La fonction ALEA() contient X chiffres après la virgule. Il suffit d'identifier ce X et de la placer en paramètre dans la fonction.
    Function aleatoire(nb_chiffr As Integer)
     
        Dim Val_max As Double
     
        Val_max = 10 ^ nb_chiffr - 1
     
        Randomize
     
        'Nombre aléatoire entre 0 et 1 avec nb_chiffr après la virgule :
        aleatoire = (Int(Rnd * (Val_max + 1))) / 10 ^ nb_chiffr
     
    End Function
    et voila le tableau ou je cherche les valeurs:
    0,0 0,1 0
    0,1 0,25 1
    0,25 0,45 2
    0,45 0,75 3
    0,75 1,0 4

    C'est pour l'organisation de location de voiture.

    J'ai tout essayé mais j'ai vraiment besoin de RechercheV(ALEA(),...)
    Merci pour votre aide

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

Discussions similaires

  1. Insérer la fonction RechercheV dans VBA
    Par thaveau dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/10/2013, 17h34
  2. Traitement d'erreur dans VBA
    Par charleshbo dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/02/2006, 14h03
  3. Utilisation d'un résultat de requete dans VBA
    Par marie10 dans le forum Access
    Réponses: 3
    Dernier message: 30/01/2006, 10h29
  4. appel module dans vba
    Par scully2501 dans le forum Access
    Réponses: 3
    Dernier message: 14/09/2005, 16h37
  5. Réponses: 3
    Dernier message: 22/10/2004, 12h04

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