XL 2013 Code VBA formule extensible

chezswan

XLDnaute Occasionnel
Bonjour à tous,

Je n'arrive pas à trouver un code VBA satisfaisant qui permettrait d'ajouter et d'étendre la formule qui ressemblerait à : =SIERREUR(INDEX($F$2:$H$5;EQUIV($A2;$G$2:$G$5;0);1);"") dans les 2 dernières colonnes (en jaune).
Le nombre de ligne du tableau peut aussi varier.

Je vous remercie par avance de votre éclairage.

Bonne journée à tous.
 

Pièces jointes

  • Classeur1.xlsx
    9.7 KB · Affichages: 6

Simply

XLDnaute Occasionnel
Bonjour,

VB:
Option Explicit

Sub TestFormula()
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("C2:C" & LastRow).Formula = "=IFERROR(INDEX(F$2:H$" & LastRow & ",MATCH(A2,G$2:G$" & LastRow & ",0),1),"""")"
    Range("D2:D" & LastRow).Formula = "=IFERROR(INDEX(F$2:H$" & LastRow & ",MATCH(A2,G$2:G$" & LastRow & ",0),3),"""")"
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chezswan, Simply,
On peut trouver la bonne colonne où rechercher avec :
VB:
=SIERREUR(INDEX($F:$H;EQUIV($A2;$G:$G;0);EQUIV(C$1;$F$1:$ZZ$1;0));"")
Cette formule est indépendante du nombre de colonnes ( limité ici à 671 avec le ZZ1 ) et du nombre de lignes.
 

Pièces jointes

  • Classeur1 (11).xlsx
    9.4 KB · Affichages: 2

chezswan

XLDnaute Occasionnel
Bonjour,

Je reviens sur ce même fil, car je n'arrive pas à adapter le code lorsque les 2 tableaux se trouvent sur des feuilles différentes. C'est surement évident, en tous cas pour vous, mais j'avoue que ça m'échappe complètement.

Je vous remercie par avance. Bonne journée à tous.

Swan
 

Pièces jointes

  • Classeur1 (11).xlsm
    15.9 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Un essai en PJ, c'est la même chose que précédemment. Il faut faire attention aux noms de colonnes, et aussi à la position des "$" qui figent les lignes et colonnes.
VB:
=SIERREUR(INDEX(Feuil2!$A:$ZA;EQUIV($A2;Feuil2!$B:$B;0);EQUIV(C$1;Feuil2!$A$1:$AZ$1;0));"")
 

Pièces jointes

  • Classeur1 (11).xlsm
    14.5 KB · Affichages: 3

chezswan

XLDnaute Occasionnel
Bonjour,
Un essai en PJ, c'est la même chose que précédemment. Il faut faire attention aux noms de colonnes, et aussi à la position des "$" qui figent les lignes et colonnes.
VB:
=SIERREUR(INDEX(Feuil2!$A:$ZA;EQUIV($A2;Feuil2!$B:$B;0);EQUIV(C$1;Feuil2!$A$1:$AZ$1;0));"")
Bonjour Sylvanu,

Merci beaucoup, une fois de plus. J'avais un peu pensé la même chose mais je n'ai surement pas utilisé la/les bonne(s) syntaxe(s).
Je vais reprendre mon tableau et réessayer.

Bonne journée
 

chezswan

XLDnaute Occasionnel
Bonjour,

Je reviens sur mon précédent message. Il se peut que je n'ai pas compris la réponse de sylvanu.
En fait, je ne sais pas adapter le code VBA de Simply lorsque les tableaux se trouvent dans des feuilles distincts.


Je vous remercie par avance de votre aide.

Swan
 

chezswan

XLDnaute Occasionnel
Bonjour,
Le plus simple serait de fournir un fichier test représentatif.
Le post #6 semblait résoudre le problème, non?
Bonjour,

A priori le dernier post convient pour une formule appliquée dans une cellule. Ce que je cherche c'est la même chose en VBA. Le code de Simply fonctionne très bien si les tableaux se trouvent sur la même feuille, mais pas si ils sont sur des feuilles distincts. Le fichier joint conserve le code de simply.

Bonne journée à tous.
 

Pièces jointes

  • Classeur1.xlsm
    15.2 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Il suffit de préciser la feuille de recherche :
VB:
Sub TestFormula()
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("C2:C" & LastRow).Formula = "=IFERROR(INDEX(Feuil2!C1:C677,MATCH(RC1,Feuil2!C2,0),MATCH(R1C,Feuil2!R1C1:R1C52,0)),"""")"
    Range("D2:D" & LastRow).Formula = "=IFERROR(INDEX(Feuil2!C1:C677,MATCH(RC1,Feuil2!C2,0),MATCH(R1C,Feuil2!R1C1:R1C52,0)),"""")"
End Sub
 

Pièces jointes

  • Classeur1 (5).xlsm
    17.2 KB · Affichages: 2

chezswan

XLDnaute Occasionnel
Re,
Il suffit de préciser la feuille de recherche :
VB:
Sub TestFormula()
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("C2:C" & LastRow).Formula = "=IFERROR(INDEX(Feuil2!C1:C677,MATCH(RC1,Feuil2!C2,0),MATCH(R1C,Feuil2!R1C1:R1C52,0)),"""")"
    Range("D2:D" & LastRow).Formula = "=IFERROR(INDEX(Feuil2!C1:C677,MATCH(RC1,Feuil2!C2,0),MATCH(R1C,Feuil2!R1C1:R1C52,0)),"""")"
End Sub
Re,

Merci beaucoup pour votre patience et vos réponses. c'est parfait.
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 154
Membres
112 670
dernier inscrit
Flow87