Microsoft 365 Formule Indirect à intégrer dans VBA

AD95

XLDnaute Junior
Bonjour à tous,

J'ai besoin d'une formule que je peux intégrer dans VBA.
Le besoin est le suivant :

si colonne A est identique que la colonne F de la feuille Extraction alors la colonne D est = à la colonne B de la feuille Extraction
si colonne A est identique que la colonne F de la feuille Extraction alors la colonne F est = à la colonne C de la feuille Extraction

Exemple :
1709223332953.png


si colonne A est identique que la colonne F de la feuille Extraction alors la colonne L est = à la colonne L de la feuille Extraction
Exemple :
1709223308607.png




Dans le code VBA lui dire d'étendre la formule jusqu'à la dernière ligne de la colonne A


Merci d'avance de votre expertise !!!!!!!!
 

Pièces jointes

  • Tableau_Indirect.xlsx
    13 KB · Affichages: 3
Dernière édition:
Solution
Re,
En PJ un essai. La réactualisation se fait lors de la sélection des feuilles CCA et ATB.
Avec beaucoup de lignes, j'ai préféré mettre les formules puis ensuite faire un coller valeurs, ce qui sera moins lourd et plus rapide. Avec :
VB:
Feuille CCA :
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    DL = [A10000].End(xlUp).Row
    Range("D9:D" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$D$1:$D$10000;EQUIV(A9;Extraction!$F$1:$F$10000;0));"""")"
    Range("D9:D" & DL) = Range("D9:D" & DL).Value
    Range("F9:F" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$C$1:$C$10000;EQUIV(A9;Extraction!$F$1:$F$10000;0));"""")"
    Range("F9:F" & DL) = Range("F9:F" & DL).Value
    Range("L9:L" & DL).FormulaLocal =...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour AD, sousou,
Si vous mettez vos tableaux en ATB et CCA sous forme de tableaux structurés, alors le VBA est inutile, et vous pouvez utiliser des formules du genre :
VB:
=SIERREUR(INDEX(Extraction!$B$1:$B$10000;EQUIV(Tableau1[[#Cette ligne];[TEX1]];Extraction!$F$1:$F$10000;0));"")
L'avantage d'un TDS sont :
1- Les formules se dupliqueront automatiquement lorsqu'on ajoute des lignes.
2- Si on efface de tableau, les formules restent en place.
 

Pièces jointes

  • Tableau_Indirect (1).xlsx
    15.9 KB · Affichages: 3

AD95

XLDnaute Junior
Bonjour AD, sousou,
Si vous mettez vos tableaux en ATB et CCA sous forme de tableaux structurés, alors le VBA est inutile, et vous pouvez utiliser des formules du genre :
VB:
=SIERREUR(INDEX(Extraction!$B$1:$B$10000;EQUIV(Tableau1[[#Cette ligne];[TEX1]];Extraction!$F$1:$F$10000;0));"")
L'avantage d'un TDS sont :
1- Les formules se dupliqueront automatiquement lorsqu'on ajoute des lignes.
2- Si on efface de tableau, les formules restent en place.
Bonjour Sylvanu,

Merci pour ton retour. -
Peux-tu stp m'envoyer le code ici eb format texte je ne peux pas ouvrir les PJ extérieur (le boulot à tout bridé 😶‍🌫️ )

Les tableaux ne sont pas structurés.
Il peut y avoir 2 lignes comme 600 000 lignes et les données textes ne sont jamais les mêmes.

Je suis encore novice mais tu peux dire c'est quoi un TDS ?

Merci d'avance de ton aide
 

AD95

XLDnaute Junior
Bonjour,
La formule est déjà en format texte dans le post #4.
Un tableau structuré (TDS) est simple à construire.
Vous sélectionnez votre tableau et faites Insertion/Tableau croisé dynamique.
Bonjour Sylvanu,

Merci pour ton retour, le problème c'est que je peux pas faire de tableau croisé dynamique.
Le tableau dépend d'autres formules et code VBA qui créer le tableau qui fait des calcul etc.... je peux pas trop toucher au tableau.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ un essai. La réactualisation se fait lors de la sélection des feuilles CCA et ATB.
Avec beaucoup de lignes, j'ai préféré mettre les formules puis ensuite faire un coller valeurs, ce qui sera moins lourd et plus rapide. Avec :
VB:
Feuille CCA :
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    DL = [A10000].End(xlUp).Row
    Range("D9:D" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$D$1:$D$10000;EQUIV(A9;Extraction!$F$1:$F$10000;0));"""")"
    Range("D9:D" & DL) = Range("D9:D" & DL).Value
    Range("F9:F" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$C$1:$C$10000;EQUIV(A9;Extraction!$F$1:$F$10000;0));"""")"
    Range("F9:F" & DL) = Range("F9:F" & DL).Value
    Range("L9:L" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$L$1:$L$10000;EQUIV(A9;Extraction!$F$1:$F$10000;0));"""")"
    Range("L9:L" & DL) = Range("L9:L" & DL).Value
End Sub
Feuille ATB :
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    DL = [A10000].End(xlUp).Row
    Range("D2:D" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$B$1:$B$10000;EQUIV(A2;Extraction!$F$1:$F$10000;0));"""")"
    Range("D2:D" & DL) = Range("D2:D" & DL).Value
    Range("F2:F" & DL).FormulaLocal = "=SIERREUR(INDEX(Extraction!$C$1:$C$10000;EQUIV(A2;Extraction!$F$1:$F$10000;0));"""")"
    Range("F2:F" & DL) = Range("F2:F" & DL).Value
End Sub
J'ai supposé votre XL en français.
 

Pièces jointes

  • Tableau_Indirect (2).xlsm
    19.9 KB · Affichages: 0

Discussions similaires

Réponses
2
Affichages
124

Statistiques des forums

Discussions
313 226
Messages
2 096 363
Membres
106 585
dernier inscrit
Tortank69