XL 2016 Formule excel en VBA ?

Barazouti

XLDnaute Nouveau
Bonjour à tous,

J'essaye de me débrouiller avec mes petites connaissances en excel ..

Je vous explique mon soucis

J'ai un fichier excel auquel j'ai une base de donnée.
Je viens de créer un autre fichier pour sélectionner les données selon 3 groupes différents.

J'ai trouvé une formule qui me permet de récupérer des données en fonctions d'un groupe.
Le souci c'est que j'aimerais que cela puisse être variable selon les 2 autres groupes. Ce qui n'est pas possible avec ma formule statique.

J'ai essayé VBA avec l'enregistreur .. Le souci c'est que quand je remplace 2 Lettres dans ma formule cela s'écrit de la même façon dans VBA, on dirait qu'il n'est pas précis dans ce que je lui demande en passant par l'enregistrement.

Ma formule de base qui fonctionne pour un groupe est :
=SI($H$8='[Liste des docs RV 02.xlsx]Sheet1 '!$E$1;SI('[Liste des docs RV 02.xlsx]Sheet1 '!$E2<>"";'[Liste des docs RV 02.xlsx]Sheet1 '!$B2;"-");"")

Elle est donc valable uniquement quand je selectionne "ADMIN" en H8
J'aimerais qu'elle soit variable en changeant uniquement les lettres en gras par les groupe suivant

PROD = F
MAINTENANCE = G
ADMIN = E

-----------------------------------------------------------------------------------------------------------
Voici le VBA associé
Sub Macro1()
'
' Macro1 Macro
'

If ("H8" = PROD) Then
Range("H15:S15").Select
ActiveCell.FormulaR1C1 = _
"=IF(R8C8='[Liste des docs RV 02.xlsx]Sheet1 '!R1C6,IF('[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C6<>"""",'[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C2,""-""),"""")"
Range("H15:S15").Select
Selection.AutoFill Destination:=Range("H15:S26"), Type:=xlFillDefault
Range("H15:S26").Select

ElseIf ("H8" = MAINTENANCE) Then
Range("H15:S15").Select
ActiveCell.FormulaR1C1 = _
"=IF(R8C8='[Liste des docs RV 02.xlsx]Sheet1 '!R1C6,IF('[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C6<>"""",'[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C2,""-""),"""")"
Range("H15:S15").Select
Selection.AutoFill Destination:=Range("H15:S26"), Type:=xlFillDefault
Range("H15:S26").Select

ElseIf ("H8" = ADMIN) Then
Range("H15:S15").Select
ActiveCell.FormulaR1C1 = _
"=IF(R8C8='[Liste des docs RV 02.xlsx]Sheet1 '!R1C5,IF('[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C5<>"""",'[Liste des docs RV 02.xlsx]Sheet1 '!R[-13]C2,""-""),"""")"
Range("H15:S15").Select
Selection.AutoFill Destination:=Range("H15:S25"), Type:=xlFillDefault
Range("H15:S25").Select
End If
End Sub

----------------------------------------------------------------------------------------------------------------------------------------
Si quelqu'un à une idée. Peut-etre sans forcement passé par VBA

Merci à tous.
je peux vous fournir mon fichier si nécessaire.
 

CHALET53

XLDnaute Barbatruc
Bonjour,

Peut_être avec la fonction INDIRECT

=INDIRECT("'[Liste des docs RV 02.xlsx]Feuil1'!" &D2&2)

En D2 du fichier récepteur : la lettre F, G ou E
Avec la formule ci-dessus, il ira chercher dans le fichier Liste des ..... sur la feuille 1 en F2 ou G2 ou E2 l'info recherchée
J'ai pris D2 : ce pourrait être une autre cellule. Dans ce cas , remplacer dans la formule D2 par la cellule choisie
a+
 

Barazouti

XLDnaute Nouveau
Bonjour Lolote83,

Je te joins mon fichier.

@Chalet63 je vais essayer aujourd’hui ta formule je te tiens au courant dans la journée.
 

Fichiers joints

Barazouti

XLDnaute Nouveau
Je pense que la fonction INDIRECT que tu proposes ne fonctionnes pas étant donné que je souhaite conditionner l'apparition de certaines données (dans les mêmes plages de cellule) en fonction d'une liste déroulante.

Je pourrais faire 3 colonnes avec la même formule que j'ai proposé au début
=SI($H$8='[Liste des docs RV 02.xlsx]Sheet1 '!$E$1;SI('[Liste des docs RV 02.xlsx]Sheet1 '!$E2<>"";'[Liste des docs RV 02.xlsx]Sheet1 '!$B2;"-");"")

Mais je ne souhaite avoir une seule colonne de cellule modulable.
 

CHALET53

XLDnaute Barbatruc
Tu voudrais dans une même colonne avoir parfois avec E, parfois avec G et parfois avec F
Si c'est cela, il faut à chaque ligne, choisir entre ces 3 lettres. Si c'est le cas, il faut, dans une colonne et pour chaque ligne, choisir l'option (avec validation de données)
Si ce n'est pas cela, un fichier présentant le résultat attendu serait le bienvenu
a+
 

Barazouti

XLDnaute Nouveau
Je vais essayer de te faire ça (sous 3 colonnes avec validation de données) pour que tu puisses visualiser le résultats attendu.
 

Barazouti

XLDnaute Nouveau
Voilà.

En espérant que tu puisses visualiser ce que j'aimerais faire.

Avoir une seul colonne au lieu de 3.

Merci pour votre aide
 

Fichiers joints

CHALET53

XLDnaute Barbatruc
Avec la fonction INDIRECT, les infos sont dans la 1ère colonne : Nom Fiche d'autoformation
Avec une info complémentaire en H9

Toutefois, j'imagine qu' un expert en formule matricielle trouverait une formule plus adaptée
 

Fichiers joints

Barazouti

XLDnaute Nouveau
Merci beaucoup.

En attendant c'est déjà très bien.
Des fois des choses toutes bêtes à faire sont difficiles je trouve.

Si tu pouvais m'expliquer brievement la fonction INDIRECT ça serait sympa :)

Bonne journée.
 

CHALET53

XLDnaute Barbatruc
Dans sa version la plus simple :
Tu mets "Toto" dans la cellule K2
Tu mets en D17 : K2 (une adresse de cellule
tu mets en D19 : = indirect(D17). Il doit t'afficher Toto en D19
On va ainsi chercher le contenu de la cellule K2 en se servant avec INDIRECT de la cellule D17

Dans ton problème, la fonction INDIRECT est un peu plus complexe

=SI(INDIRECT("'"&"Sheet1"&"'!"&$H$9& LIGNE()-12)="X";Sheet1!B2;"")
Les infos sont sur la feuille Sheet1 (qui m'a posé beaucoup de problème car il y avait un blanc à la fin du nom pas facilement détectable)
La cellule F2 de cette feuille dont j'ai besoin pour démarrer, je l'obtiens en concaténant :
La lettre en H9 (F) et le chiffre 2 par le n° de ligne de la feuille 1 sur laquelle se trouve la formule (LIGNE() soit 14 duquel je retranche 12 pour trouver le 2 de la feuille Sheet1
En décalant la formule vers le bas, 14 devient 15 et le n° de ligne sur la feuille Sheet1 devient 3..... et ainsi de suite
Attention à l'apostrophe avant et après Sheet1
Bien sûr si H9 =G avec la formule, j'obtiens G2

Suis-je clair?
 

Barazouti

XLDnaute Nouveau
Je pense .. je vais me refaire le schéma ce soir.

Par contre petite question, la fonction INDIRECT fonctionne uniquement sur un seule et même fichier ?
Ou bien je peux aller chercher la même chose sous un autre fichier ?
 

Barazouti

XLDnaute Nouveau
D'accord !

J'ai reussi à faire plus simple.
J'ai copié coller mes données dans l'onglet et je récupère les données de l'autre par simple liaison. Comme ça quand je modifie mon fichier de "liste de données" de base, ça se répercute sur l'autre quand j'ouvre l'autre.

En tout cas. JE te remercie vraiment pour ton aide et ta pédagogie.

A bientot pour de nouvelle galère !

C
 

Discussions similaires


Haut Bas