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 :

Convertir INDEX EQUIV en macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut Convertir INDEX EQUIV en macro
    Bonjour à tous,

    Pour mon travail j'ai besoin de créer une macro qui remplace une fonction index equiv pour éviter les calculs dès que je modifie une valeur de mon classeur.
    J'ai un historique de 3 critères sur les colonnes B C et E. L'objectif de ma macro est d’afficher en Q37 la valeur de ma colonne C qui correspond à la combinaison Q7/I37 que l'on recherche dans les colonnes B et E.
    Je ne sais pas si je suis très clair. Je joins mon classeur excel de base.

    Merci à vous pour vos retours.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonsoir,

    Si j'ai bien compris, la macro crée les formules puis fige les résultats en les remplaçant par les valeurs obtenues pour éviter les mises à jour systématiques. La mise à jour se fait à la demande en cliquant sur un bouton affecté à la macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Formules()
        Application.ScreenUpdating = False
        [Q37].FormulaArray = "=IFERROR(INDEX(C3,MATCH(1,(C2=R[-30]C)*(C5=RC[-8]),0)),0)"
        [Q37].AutoFill Destination:=Range("Q37:W37"), Type:=xlFillDefault
        Range("Q37:W37").AutoFill Destination:=Range("Q37:W65"), Type:=xlFillDefault
        Range("Q37:W65").Value = Range("Q37:W65").Value
    End Sub
    Cdlt

  3. #3
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut
    Bonjour Arturo,

    Merci pour ton retour.
    La macro semble fonctionner. Par contre pourrais-tu m'expliquer un peu le code car je ne le comprend pas et j'aimerais pouvoir le réutiliser pour d'autres projets.

    En te remerciant d'avance pour ton retour.

    Cordialement,

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour

    La ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Q37].FormulaArray = "=IFERROR(INDEX(C3,MATCH(1,(C2=R[-30]C)*(C5=RC[-8]),0)),0)"
    Equivaut à la formule Excel suivante en Q37 (validée avec CTRL + SHIFT + ENTREE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX($C:$C;EQUIV(1;($B:$B=Q7)*($E:$E=I37);0));0)
    La ligne de code suivante recopie la formule sur la même ligne jusquà W37
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Q37].AutoFill Destination:=Range("Q37:W37"), Type:=xlFillDefault
    La ligne de code suivante recopie la plage Q37:W37 sur toute la plage du tableau, ici Q37:W65
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Q37:W37").AutoFill Destination:=Range("Q37:W65"), Type:=xlFillDefault
    La ligne suivante remplace les résultats obtenus par leurs propres valeurs, pour ne pas conserver les formules et évite les mises à jour à chaque changement de valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Q37:W65").Value = Range("Q37:W65").Value
    Voilà, c'est tout

    Cdlt

  5. #5
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut
    Super merci beaucoup pour toutes ces précisions !

    Bonne journée

  6. #6
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut
    Re-bonjour,

    Je ré ouvre le sujet car je n'arrive pas à faire fonctionner la macro sur un autre onglet. Je pense que le problème vient de la première ligne du code que je n'arrive pas à retranscrire pour un autre cas.
    Pouvez-vous m'expliquer les chiffres à remplir sur cette première ligne et pourquoi vous choisissez ceux-ci (je pense que ça doit être en fonction des numéros de colonnes mais sans saisir exactement à quoi ils correspondent)
    Je vous joins le fichier avec le deuxième onglet que j’aimerais retravailler.

    Merci d'avance,
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Lorsqu'il y a une macro, il faut impérativement enregistrer le fichier en xlsm et non en xlsx.
    Enregistrez votre fichier en Xlsm et redéposez le ici

  8. #8
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut
    Oops désolé pour l'oubli. Ci joint le fichier au bon format.
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Pour comprendre les formules traduites en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Q37].FormulaArray = "=IFERROR(INDEX(C3,MATCH(1,(C2=R[-30]C)*(C5=RC[-8]),0)),0)"
    C=column = colonne
    R=row=ligne

    C2=R[-30]C
    Quand le chiffre qui suit la lettre C ou R est accolé directement à la lettre, cela correspond au n° de la ligne ou de la colonne, ici C2 = 2éme colonne soit colonne B. C'est ce qu'on appelle une référence absolue
    Quand le chiffre qui suit est entre crochets, comme R[-30], cela signifie que l'on va chercher 30 lignes au-dessus (parce qu'il y a le signe -) de la cellule où l'on se trouve, s'il n'y avait pas de signe, ce serait 30 lignes au-dessous.
    idem pour les colonnes C[3], ce qui signifie 3 colonnes après la cellule où l'on se trouve. C'est ce qu'on appelle des références relatives.

    Dans votre fichier, il n'y pas le code, donc je, ne peux pas voir ce que vous avez fait par contre, avec ce que je viens d'expliquer ci-dessus vous devriez être capable de vous en sortir.

  10. #10
    Membre du Club
    Homme Profil pro
    assistant planification et statistiques
    Inscrit en
    Mai 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : assistant planification et statistiques

    Informations forums :
    Inscription : Mai 2019
    Messages : 8
    Par défaut
    J'ai tout compris et j'ai réussi à réadapter le code pour mon deuxième exemple.
    Merci beaucoup pour ces éclaircissements

    Bonne soirée,

    Adrien.

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

Discussions similaires

  1. [XL-2010] Comment transposé une formule INDEX + EQUIV en macro VBA
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2016, 09h12
  2. [XL-2010] Faire une macro avec la matrice INDEX + EQUIV
    Par Sam_P dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/02/2015, 12h34
  3. Réponses: 7
    Dernier message: 11/08/2012, 17h49
  4. Convertir en majuscule sans macro
    Par Carmiel dans le forum Excel
    Réponses: 3
    Dernier message: 11/08/2008, 22h37
  5. Réponses: 17
    Dernier message: 03/01/2008, 13h40

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