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 :

Adaptation SI et RECHERCHEV en Macro [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Par défaut Adaptation SI et RECHERCHEV en Macro
    Bonjour à tous,
    je recherche en vain le moyen d'adapter une formule en macro (pour l'affecter sur des objets de type cases a cocher):
    ma formule est ainsi décomposée:

    Mon fichier se nom : Dossier-adduct.xlsm
    la fonction désirée est : =SI(RECHERCHEV
    la valeur recherchée : cellule B5

    la table matrice : [Bdd.xlsx]Feuil1!$A$3:$I$5000
    N° d'index de colonne : 10 (colonne J)

    si la cellule en colonne J est non-vide = cocher la case à cocher

    et le même code pour:
    si la cellule est égale à 1 = cocher la case à cocher


    En vous remerciant par avance pour votre aide ou infos.

    Cdt.

    JL

  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 Elisium,

    La fonction =RECHERCHEV est nommée VLookup en VBA (en anglais quoi).

    Un exemple parmi les 200 000 que tu trouveras sur le net !

    Cordialement,
    Kimy

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ca peut ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Var
    Var = Application.VLookup([B5], Workbooks("Bdd.xlsx").Sheets("Feuil1").Range("A3:I5000"), 10, False)
    If Var <> "" Then checkbox1.Value = True
    Ca dépend si la case à cocher est un contrôle de formulaire ou un contrôle ActiveX, s'il se trouve sur une feuille ou sur un userform.

    si la cellule est égale à 1 = cocher la case à cocher
    Pas compris. Si la cellule est égale à 1, elle n'est pas vide... A moins que ce ne soit pas la même case à cocher.

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Par défaut
    Merci à vous deux pour vos réponse,


    et effectivement pour la cellule = à 1, ce n'est pas la même case a cocher.

    Cdt.

    JL

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Par défaut
    Daniel C,
    J’insère des "contrôle de formulaire" dans une feuille.
    Mais je dois mal m'y prendre dans la procédure car j'ai des erreurs avec le code.
    j'insère une case à cocher qui prend le nom par défaut : Case à cocher1_cliquer
    je vais dans propriétés de l'objet puis, affecter une Macro
    là il ouvre une fenêtre puis je clique sur "Nouvelle" et dans la fenêtre de code ,j'insere le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Caseàcocher1_Cliquer()
    Dim Var
    Var = Application.VLookup([B5], Workbooks("Mediapost.xlsx").Sheets("Feuil1").Range("A3:I5000"), 10, False)
    If Var <> "" Then checkbox1.Value = True
    End Sub
    mais lorsque le fichier source est fermé, il me met une erreur "l'élément portant ce nom est introuvable"
    et lorsqu'il est ouvert en même temps, il bug sur " incompatibilite de type"

    Peut-tu me dire si ma procédure est bonne,
    et te faut-il les fichiers source et cible pour y voir plus clair ?

    Merci

    JL

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Le fichier doit être ouvert.

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Par défaut
    Et l'erreur que j'ai lorsqu'il est ouvert ? "incompatibilité de type" de quoi cela peut provenir?

  8. #8
    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,

    Attetion, ici il y a erreur :
    la table matrice : [Bdd.xlsx]Feuil1!$A$3:$I$5000
    N° d'index de colonne : 10 (colonne J)
    Avec un tableau de la colonne A à la colonne I l'index ne peut pas être 10 (colonne J) mais au max 9 !
    Une piste avec lecture dans le classeur fermé. Attention, il faut adapter le nom des contrôles appelant au niveau du "Select Case Application.Caller" (dans mon exemple, "Bouton 1" et "Bouton 2") ainsi que le nom des cases à cocher (dans mon exemple, "Case à cocher 1" et "Case à cocher 2") . A tes boutons tu affectes la procédure "Test" à tous les deux et "Application.Caller" permet de savoir lequel appelle la proc :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    Sub Test()
     
        Dim Plage As Range
        Dim MonDossier As String
        Dim Classeur As String
        Dim Feuille As String
        Dim ValCherchee
        Dim Valeur
        Dim IndexColonne As Integer
        Dim Exact As Boolean
     
        MonDossier = "D:\Mon Dossier\" 'adapter le chemin
        Classeur = "Bdd.xlsx"
     
        Feuille = "Feuil1"
     
        Set Plage = Range("A3:M5000") 'ici, jusqu'à M pour Index 10 (colonne J)
     
        ValCherchee = Range("B5").Value 'en B5 de la feuille active
     
        IndexColonne = 10 'colonne J
     
        Exact = False 'false pour correspondance exacte
     
        'appel de la fonction
        Valeur = RECHERCHE_VERT(MonDossier, _
                                Classeur, _
                                Feuille, _
                                ValCherchee, _
                                Plage, _
                                IndexColonne, _
                                Exact)
     
        'si pas de correspondance (l'erreur à été gérée dans la fonction) donc, message et fin !
        If Valeur = "Aucune valeur correspondante à '" & ValCherchee & "' !" Then
     
            MsgBox Valeur
            Exit Sub
     
        Else
     
            'adapter le nom du contrôle appelant !!!
            Select Case Application.Caller
     
                Case "Bouton 1"
     
                    'si c'est le bouton 1 et que la valeur retournée est égale à 1, la case est cochée sinon, décochée
                    With ActiveSheet.Shapes("Case à cocher 1").ControlFormat
                        If Valeur = 1 Then .Value = 1 Else .Value = 0
                    End With
     
                Case "Bouton 2"
     
                    'si c'est le bouton 2 et que la valeur retournée est <> "", la case est cochée sinon, décochée
                    With ActiveSheet.Shapes("Case à cocher 2").ControlFormat
                        If Valeur <> "" Then .Value = 1 Else .Value = 0
                    End With
     
            End Select
     
        End If
     
    End Sub
     
    Public Function RECHERCHE_VERT(Chemin As String, _
                                   Classeur As String, _
                                   Feuille As String, _
                                   ValRecherchee As Variant, _
                                   Plage As Range, _
                                   ColonneIndex As Integer, _
                                   ValExacte As Boolean)
     
        Dim Valeur
        Dim Exact As String
     
        Select Case ValExacte: Case False: Exact = "FALSE": Case Else: Exact = "TRUE": End Select
     
        Valeur = ExecuteExcel4Macro("VLOOKUP(""" & ValRecherchee & _
                                             """,'" & Chemin & _
                                             "[" & Classeur & _
                                             "]" & Feuille & _
                                             "'!" & Plage.Address(1, 1, xlR1C1) & _
                                             "," & ColonneIndex & _
                                             "," & Exact & ")")
     
        If IsError(Valeur) Then
     
            RECHERCHE_VERT = "Aucune valeur correspondante à '" & ValRecherchee & "' !"
     
        Else
     
            RECHERCHE_VERT = Valeur
     
        End If
     
    End Function

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2015
    Messages : 9
    Par défaut
    Theze,

    Vraiment Merci pour ton code,
    effectivement la valeur recherchée était en dehors de la table matrice (erreur de débutant)
    mais déjà avec 3 lignes de code j'avais du mal alors là !!!
    je pense avoir bien adapté llà o l fallait modifier mais ce que je ne pige vraiment pas c'est lorsque tu dis:
    il faut adapter le nom des contrôles appelant au niveau du "Select Case Application.Caller" (dans mon exemple, "Bouton 1" et "Bouton 2") ainsi que le nom des cases à cocher (dans mon exemple, "Case à cocher 1" et "Case à cocher 2")
    .

    Voici comment je fais pour créer mes cases a cocher
    DEVELLOPEUR, INSERER, Case a cocher (contrôle de formulaire), et je crée l'objet sur ma feuille. (il porte le nom case a cocher1)
    ensuite je clique droit dessus, et affecter une macro.
    et c'est là que je m'enbrouille.

    Aurais tu la patience de me doner quelques tuyaux pour créer mes boutons et ffecter ton code.

    Merci par avance.

    JL

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

Discussions similaires

  1. RechercheV par macro
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/07/2015, 09h56
  2. Recherchev par macro.
    Par jose.carreira dans le forum Excel
    Réponses: 1
    Dernier message: 20/09/2014, 08h31
  3. [XL-2003] Difficultés attribution besoins (Concatenation et recherchev par macro)
    Par ivanG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2014, 09h32
  4. [XL-2010] RechercheV par macro
    Par illight dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2013, 14h42
  5. RECHERCHEV VBA Macro
    Par neila7 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/01/2008, 21h35

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