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 :

Recherche index equiv automatisée


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Par défaut Recherche index equiv automatisée
    Bonsoir,

    je recherche la possibilité d'automatiser la formule index/équiv avec l'aide d'une boite de dialogue. Cette formule devra prendre en compte toutes les lignes du fichier ciblé.

    exemple: Pour la recherche dans la feuille 2 je veux savoir si ma valeur qui se trouve à la case B2 se retrouve exactement en colonne B. Si oui alors affichage de la valeur correspondante de la 2ème colonne.

    La formule donne =INDEX(Feuil2!A:E;EQUIV(Feuil1!B2;Feuil2!B:B;0);2).

    j'aimerais créer une boite de dialogue qui s'affiche et de la forme:

    - quelle est la feuille à indexer?
    - quelle est la valeur à rechercher?
    - quelle est la colonne à rechercher dans le fichier index?
    - quelle est le numéro de la colonne à afficher?

    Quelqu'un peut-il m'aider? Je n'arrive pas à mettre en forme mon idée.

    Merci aux personnes voulant bien m'aiguiller.

  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 Regales29 Voir le message
    La formule donne =INDEX(Feuil2!A:E;EQUIV(Feuil1!B2;Feuil2!B:B;0);2).
    Il serait plus simple de partir sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(Feuil1!B2;Feuil2!B:E;2;FAUX)
    Pour ce qui est de fabriquer une formule en VBA, tu peux la former comme une chaine String et la placer dans la cellule voulue à l'aide de la propriété Formula ou d'une de ses petites soeurs (étant donné que tu travail avec un Excel francophone en référence A1, je te conseille FormulaLocal).
    https://msdn.microsoft.com/fr-fr/lib.../ff838851.aspx

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Bonjour
    Proposition d'un débutant :
    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
    Sub Recxhrche()
    Dim Y As String
    Dim X As String
    Dim Plage As Range
    Dim Cel As Range
    X = Application.InputBox("quelle est la feuille à indexer", "Valeur", Type:=2)
    Sheets(X).Activate
    Y = Application.InputBox("quelle est la valeur à chercher", "Valeur", Type:=2)
    Set Plage = Range("A1:L500") ' à adapter
    For Each Cel In Plage
    If Cel.Value = Y Then
    PA = Cel.Address
    MsgBox ("Cette valeur se trouve dans la feuille " & X & PA)
    End If
    Next Cel
    End Sub
    Bonne continuation

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Par défaut Recherche suite
    Bonsoir Menhir et BENNASR. Merci pour vos réponses et le temps consacré à un novice.

    Précisions sur la demande que j'avais formulé.

    La formule index / equiv est pour moi équivalente à la rechercheV même si je préfère la première car plus couramment utilisé (par moi).

    La vision de BENNASR est proche de mon idée de départ, mais je dois apporter quelques précisions:

    le résultat devra se faire dans une feuille au choix et dans une colonne libre également au choix. Les résultats permettront dans la feuille choisie de faire apparaître les colonnes voulues pour les données communes (comparaison de données).
    ci-dessous des extraits pour illustrer mes propos.
    Feuil1 = feuille recevant les résultats
    Feuil2 = feuille supportant la recherche
    formule le détail pour exemple des valeurs pour l'affichage.
    Feuil1
    Nom : feuil1.png
Affichages : 566
Taille : 28,7 Ko

    Feuil2
    Nom : feuil2.png
Affichages : 569
Taille : 59,3 Ko

    Formule dans feuil1 colonne "G"
    Nom : formule.png
Affichages : 495
Taille : 2,0 Ko

    Possibilité de vous fournir un fichier exemple sur demande.

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Bonjour
    Si cette formule te fera l'affaire tu n'as que démarrer l’enregistreur Automatique et tu aura ton code VBA sur plateau
    Bonne Continuation

  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 Regales29 Voir le message
    La formule index / equiv est pour moi équivalente à la rechercheV
    Sauf qu'elle est plus simple donc plus facile à construire dans un code.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, au vu des nombreux problèmes rencontrés chez mes clients avec RECHERCHEV, je préfère de loin INDEX/EQUIV. C'est plus générique et moins limitatif.

    Avec INDEX/EQUIV, la colonne clé n'est pas obligatoirement la première, l'ordre des colonnes n'a pas d'importance et l'ajout ou la suppression de colonnes dans la table ne posent pas de problèmes.

    En VBA, avec l'utilisation des plages nommées faisant référence à des tables de données, INDEX/EQUIV ne demande aucune modification de code en cas de déplacement, d'ajout ou de retrait de colonnes alors que RECHERCHEV, probablement utilisé avec une constante en troisième argument, demandera une modification du code.

    Il n'y a que des avantages à travailler avec INDEX/EQUIV et à abandonner RECHERCHEV, selon moi.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour Pierre ,

    je plussoie ta remarque concernant Index Equiv avec l'utilisation des plages nommées

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Par défaut Recherche suite
    Bonsoir à tous,

    j'ai suivi les conseils éclairés de BENNASR mais n'arrive malheureusement pas à finaliser l'intégration de l'enregistreur auto dans la première version de BENNASR qui correspond à ce que je recherche.

    L'idée des messages box sont bien, mais je veux rechercher les valeurs dans une feuille et les rapatrier dans la feuille de destination du moment qu'il y a concordance.

    l'enregistrement auto donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        ActiveCell.FormulaR1C1 = _
            "=INDEX(Feuil2!C[-8]:C[-3],MATCH(Feuil1!RC[-8],Feuil2!C[-8],0),1)"
        Range("I2").Select
        Selection.AutoFill Destination:=Range("I2:I1978")
        Range("I2:I1978").Select
    End Sub
    les cases et colonnes doivent pouvoir être choisies à loisir.

    Merci pour l'aide apportée.

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Bonjour
    si tu cherche à remplir dans ta fiche stock les quantités demandées pour chaque article tu peux faire comme ça :
    NB : J'ai ajouté SIERREUR pour éviter ce #N/A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MiseAjour()
    With Worksheets("feuil1")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
    If 1 = 1 Then
        Range("G2").Select
        ActiveCell.FormulaR1C1 = "=IFERROR(INDEX(Feuil2!C1:C6,MATCH(Feuil1!RC1,Feuil2!C1,0),3),"""")"
        Range("G2").Select
        Selection.AutoFill Destination:=Range("G2:G" & derlig), Type:=xlFillDefault
        End If
    End With
    End Sub
    Si c'est pas ce que tu cherches n'hésiter pas à donner plus d’éclaircissement sachant que je suis aussi débutant et sur ce site que j'ai appris un peu de bricolage VBA
    BONNE CONTINUATION

  11. #11
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Re
    J'ai testé ta formule et j'ai insérer une ligne supplémentaire dans la feuille 2 destinée à enregistrer les commandes et j'ai constaté que ta formule ne fait pas la somme des quantités demandées mais juste la première commande pour chaque article. Peut être y a une erreur dans la formule ou une erreur de ma part
    Aussi j'ai lu sur ce super site que travailler avec les tableaux c'est plus rapide c'est pourquoi je propose ce code qui fait la somme des quantités demandées et l'insère dans la feuille 1 (Stock) ainsi que la date maximum pour chaque article

    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
    Sub test()
    Dim Tablo
    Dim i As Long
    Dim derlig As Long
    With Sheets("feuil1")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("G2:H" & derlig).Select
     Selection.ClearContents 'initialiser la colonne G & H
    Tablo = Sheets("Feuil2").Range("A2", "F" & Sheets("Feuil2").Range("F" & Rows.Count).End(xlUp).Row)
    For j = 2 To derlig
    Qte = 0
    datcde = 1 / 1 / 2017
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        If .Cells(j, 1) = Tablo(i, 1) Then
            Qte = Qte + Tablo(i, 3)
            If datcde < Tablo(i, 6) Then datcde = Tablo(i, 6)
        End If
    Next i
    .Cells(j, 7) = Qte
    If datcde <> 1 / 1 / 2017 Then .Cells(j, 8) = datcde
    Next j
    End With
    End Sub

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Par défaut Recherche suite
    Bonjour BENNASR,

    merci pour ton aide précieuse.

    Ta 1ère version correspondait plus à ce que je recherche, du moins dans l'idée avec les questions avec box.

    précision: je cherche à afficher dans une feuille choisie (1 ou 2 et quelques soit le nombre de lignes ou colonnes du tableau) les valeurs qui ne figurent pas sur la feuille destination mais dans la feuille de recherche.

    exemple:

    lorsque la référence qui est ici ma clé (car point commun) se retrouve dans les 2 feuilles je veux remonter dans la feuille de destination choisie la valeur de n'importe quelle colonne de la feuille de recherche. dans mon exemple je remonte les Qtés et les dates mais j'aurais pu aussi bien demander les valeurs en colonne responsable ou date de demande, voire référence si recherche des références manquantes.
    feuille 1
    Nom : ex feuille1.png
Affichages : 561
Taille : 38,0 Ko

    Feuille 2
    Nom : ex feuille2.png
Affichages : 553
Taille : 37,7 Ko

    je ne cherche pas à faire les sommes, je m'arrangerai pour supprimer les doublons auparavant.

    Les colonnes et cases recherchées ne sont pas toujours identiques (dépend du fichier à exploiter) d'où mon idée 1ère des box.

    Merci

  13. #13
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Bonjour et bon début de semaine à tous
    Permettez moi de discuter la conception de ton fichier :
    tu as toujours deux feuilles : feuil 1 pour le stock et feuille 2 pour enregistrer les commandes
    Je propose tout simplement un userform avec un combobox pour les numéros d'article et un listbox pour les quantités en stocks et deuxième listbox pour les commandes en cours :
    en enregistrant un nouveau commande tu clique sur un bouton nommé par exemple VOIR LA DISPONIBILITÉ tu fais le choix de ton numéro d'article et tu aura dans un listbox tous les données de stock concernant cette article (qté / lieu de stockage / fournisseur / délai de livraison ) et en même temps et dans un deuxième listbox tu aura les commandes en cours avec : qté demandée / client / délai de livraison ...
    Si c'est le but de ton travail essayer de le faire et si tu affronteras des difficultés merci de joindre un petit fichier avec des données fictives je ferais mon mieux pour t'aider
    BONNE CONTINUATION

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Par défaut Recherche suite
    Bonsoir BENNASR,

    merci pour tes réponses. Je vais essayer de faire les combo box comme tu me le suggères.

    Je reviendrai en cas de soucis vers toi pour des conseils.

    Merci et bonne soirée.

Discussions similaires

  1. [XL-2010] Afficher le second résultat d'une recherche Index+EQUIV (doublons)
    Par Trank1ll dans le forum Excel
    Réponses: 0
    Dernier message: 29/07/2014, 21h23
  2. [XL-2010] Fonctions INDEX EQUIV DECALER RECHERCHE ?
    Par LiseUEMPT dans le forum Excel
    Réponses: 3
    Dernier message: 25/06/2014, 22h31
  3. [XL-2007] RECHERCHE - INDEX - EQUIV
    Par lego35 dans le forum Excel
    Réponses: 2
    Dernier message: 28/02/2014, 11h26
  4. Réponses: 4
    Dernier message: 05/03/2013, 10h33
  5. [XL-2010] recherche avec index/equiv
    Par Bloubee dans le forum Excel
    Réponses: 1
    Dernier message: 28/01/2013, 09h10

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