Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Formule INDEX EQUIV - la convertir en MACRO

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nougatine95

XLDnaute Occasionnel
Bonsoir amis Experts,

Est-il possible de convertir une formule (INDEX/EQUIV) en MACRO?

Ma formule:
SI($E1="";"";SI(ET($E1<>"";NB.SI('page1'!$E$1:$E$1000;$E1)>0);INDEX('page1'!F$1:F$1000;EQUIV($E1;'page1'!$E$1:$E$1000;0));"?"))

Un p'tit fichier? ou celà vous suffit-il.

Tous mes remerciements pour votre aide.
 
Re : Formule INDEX EQUIV - la convertir en MACRO

Bonsoir,

pour convertir en macro il suffit d'utiliser l'enregistreur de macro (Outils/macro/nouvelle macro) pour récupérer le code VBA.

Par contre tu ne dis pas ce que tu veux en faire : alimenter une cellule ou récupérer le résultat dans une variable?


GIBI
 
Re : Formule INDEX EQUIV - la convertir en MACRO

Bonsoir,

pour ta formule, comme je ne sais pas si tu dois étirer vers la droite, ou la gauche, donc, si :

Code:
INDEX(Feuil1!F$1:F$1000

fait bien référence à la colonne F, ou si celle-ci peut changer, en fonction de la cellule active...... (y'a pas de $ devant le F......)

Donc, ta formule, en VBA, pourrait donner quelque chose comme cela :

Code:
Sub Nougatine()
    lig = ActiveCell.Row
    If IsEmpty(Cells(lig, 5)) Then
        ActiveCell.Value = ""
    ElseIf Application.CountIf(Range("E1:E1000"), Range("E1")) > 0 Then
            ActiveCell.Value = Application.Index(Range("F1:F1000"), _
                Application.Match(Cells(lig, 5).Value, Range("E1:E1000"), 0))
    Else
        ActiveCell.Value = "?"
    End If
End Sub

Si cela ne fonctionne pas, tu peux alors envoyer un fichier exemple.....

Bonne soirée
 
Re : Formule INDEX EQUIV - la convertir en MACRO

pour convertir en macro il suffit d'utiliser l'enregistreur de macro (Outils/macro/nouvelle macro) pour récupérer le code VBA.

En tant que débutante en Macro, j'ai fait Outils/Macro/nouv Macro et là....
code oui je sais où aller mais ensuite j'écris quoi? sniff j'suis loin du niveau.
Dommage je ne puisse pas y copier ma formule 😀

Voir fichier simplifié joint que j'ai simplifié en quelques lignes.

Merci.
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Bonsoir Nougatine95, Gibi, BHBH,

La procédure ci-dessous permet de faire les recherches de toutes les cellules en colonne E et met les résultats en F et G.

Code:
Sub Test()
Dim cell As Range, c As Range
For Each cell In Range("E2:E" & Range("E1000").End(xlUp).Row)
    If cell.Value = "" Then
    cell.Offset(0, 1) = ""
    Else
    With Worksheets("page1").Range("E2:E" & Range("E2000").End(xlUp).Row)
    Set c = .Find(cell.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
        cell.Offset(0, 1) = c.Offset(0, 1)
        cell.Offset(0, 2) = c.Offset(0, 2)
        End If
    End With
    End If
Next cell
End Sub

Cf fichier joint.

@+

Gael
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Bonjour, Nougatine....

Ci-joint, un petit fichier, avec une fonction personnalisée.....

Uniquement valable sur ton fichier exemple, mais facilement adaptable....

Le code :

Code:
Function trouv(Cel As Range, C As Range)
Dim DerLig As Long
With Sheets("page1")
    If IsEmpty(Cel) Then
        trouv = ""
    Else
        DerLig = .[E65000].End(xlUp).Row
        If Application.CountIf(.Range("E1:E" & DerLig), Cel) > 0 Then
            lig = Cel.Row
            col = IIf(C.Column = 6, 6, 7)
            trouv = Application.Index(.Range(.Cells(1, col), .Cells(DerLig, col)), _
                Application.Match(Cel.Value, .Range("E1:E" & DerLig), 0))
        Else
            trouv = "?"
        End If
    End If
End With
End Function

le fichier :
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Bonjour les Experts et Merci GIBI, bhbh, Gael,

Désolée de vous importuner une nouvelle fois.
😕 Je reviens sur la pointe des pieds, au risque de passer pour une attardée 🙁

Donc, voilà... plutôt que de partir dans des explications 😕... ici,
je préfère joindre fichier sur lequel j'ai expliqué rapidement et le plus clairement possible mon pb.

Merci pour ce que vous pourrez faire.

Sachez toutefois qu'en 1 semaine j'ai pu, grâce à votre aide, améliorer des fichiers lourds (consultés par plusieurs personnes), fichiers souvent altérés par de mauvaises manip.
Vos leçons portent leurs fruits, puisque j'ai pu reproduire et adapter mes nouvelles connaissances sur d'autres fichiers.

Encore merci.🙂
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Bonjour Nougatine95, bonjour à tous,

Un essai dans le fichier joint avec une adaptation de la macro de mon post précédent.

La macro recherche est lancée soit par la saisie d'une valeur dans le Textbox, soit par un clic sur le bouton "Afficher tout". Le remplissage des cellules en colonnes F et G est donc automatique.

@+

Gael
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Merci Gael,

J'ai adapté sur 20 000 lignes, c'est OK

Nous saisissons environ 200 à 300 données par jour, le remplissage automatique des colonnes doit être instantané à chaque saisie (comme avec formule),
donc...
---> Est-il possible de faire idem, sans cliquer sur "Affiche tout" après chaque saisie en col E?
Suis exigente hein!😱
 
Re : Formule INDEX EQUIV - la convertir en MACRO

Re,

Ci-joint fichier modifié.

Pour éviter de recalculer toute la colonne, j'ai ajouté une procédure évènementielle qui ne fait la recherche que sur la cellule ajoutée ou modifiée en colonne E. C'est donc très rapide et ne pénalise pas la saisie.

@+

Gael
 

Pièces jointes

Re : Formule INDEX EQUIV - la convertir en MACRO

Merveilleux Gael!
... heu... merveilleux le résultat 🙂

-essaie concluant pour les éléments connus
-si je tape par exemple ADH qui est inconnu dans la liste ou si j'efface 1 saisie de col E

celà me renvoie sur la ligne:
Range(cell.Offset(0, 1), cell.Offset(0, 2)) = "?"

si pas possible d'arranger celà, je supprimerai le cas où si rien ne correspond, il y n'aurai pas de "?", la cellule restera vierge.
 
Re : Formule INDEX EQUIV - la convertir en MACRO

Re,

Petite erreur de ma part, il faut mettre "Target" à la place de "Cell", dans la procédure "Private Sub Worksheet_Change(ByVal Target As Range)":


Code:
Range(Target.Offset(0, 1), Target.Offset(0, 2)) = "?"

Je m'absente quelques jours, s'il y a quelques soucis, je pense que d'autres XLDiens interviendront efficacement, je reviens Mercredi.

Je suis très content du "Merveilleux Gael!" 😉

@+

Gael
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
197
Réponses
5
Affichages
279
Réponses
6
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…