Private Sub Worksheet_Change(ByVal Target As Range)

Bonjour à tous,

J'ai un petit problème que je n'arrive pas à résoudre.

Mon programme (Macro) récupère une valeur d'un autre classeur

Chaque fois que je vais mettre une valeur dans la colonne A, de mon fichier je voudrais qu'il récupère une info d'un autre fichier excel

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$"& ligne Then
Dim X As Long, Y As Long, strAddress As String
strAddress = Target.Address
X = Target.Column
Y = Target.Row
MaLettre = Split(Columns(3).Address(ColumnAbsolute:=False), ":")(1) & Y
Range(MaLettre).Select
ActiveCell.FormulaR1C1 = "=INDEX('[Fichier.xlsx]ongletA line-set'!MaLettre,MATCH(RC[-2],'[Fichier.xlsx]ongletA line-set'!C8,0))"
end if
End Sub

Le problème :

1) J'avais essayé de faire appel à une macro style MaMacro(Malettre,Y) Car je crois qu'il faut éviter de mettre des formules dans un Private Sub Worksheet .. Breff

Il me fait une boucle, Excel Bug ferme et réouvre.

2) sur ma ligne (voir plus haut) j'ai : "ActiveCell.FormulaR1C1 = ...... " , le nom d'une variable "MaLettre" mais excel ne me la prend pas en compte (dans la barre des formule j'ai (=........line-set'!MaLettre;EQUIV ........... ) au lieu de "exemple" (=........line-set'!C3;EQUIV ........... )

Pourriez vous m'aider à résoudre ce problème ?

Je sais qu'il serait mieux de mettre des fichiers en exemple mais c'est un truc vraiment .. comment dirais je ?? .. Pour le boulot donc confidentiel :)

Merci à vous

Hello,

Pour le point 2 je dirai que c'est normal, tu lui demandes un affichage R1C1 via

.FormulaR1C1

et ta variable et style A1

Donc c'est soit tu te débrouilles pour lui donner du R1C1 ou alors tu utilises

.FormulaLocal

pour lui donner du A1

Merci,

Je ne connaissais pas "FormulaLocal"

Je vais tester ça demain soir, là j'en ai eu assez :)

Bonjour,

Je n'ai pas attendu ce soir je viens de tester, et il me fait une erreur "Erreur d'exécution 1004" : ' Erreur définie par l'application ou par l'objet".

Range(MaLettre).FormulaLocal = "=INDEX('.....

Hello,

Teste comme ceci :

ActiveCell.FormulaLocal = "=INDEX('[Fichier.xlsx]ongletA line-set'!" & MaLettre & ",MATCH(A2,'[Fichier.xlsx]ongletA line-set'!C8,0))"

Tu remarqueras que j'ai modifié la cellule de la formule MATCH, il faut que tu l'adapte à ton cas.(A2)

Merci pour ton aide

Je viens de m'apercevoir que ce n'est pas ça:

& MaLettre &

mais l'autre formule que je dois modifier (c'était une erreur de ma part)

là ou je dois mettre ma variable c'est sur ça : MATCH(RC[-2]

ActiveCell.FormulaR1C1 = "=INDEX('[Fichier.xlsx]ongletA line-set'!$D:$D,MATCH(RC[-2],'[Fichier.xlsx]ongletA line-set'!C8,0))"

Mais je crois que c'est impossible ?

Exemple :

1) je crée une nouvelle ligne (fichier macro) en lui indiquant une donnée (Nom de famille) en colonne B

2) il cherche dans un fichier externe dans la colonne $D:$D la donnée (Nom de famille)

3) Sur la même ligne (du fichier externe) il relève en colonne D la valeur correspondante à ma donnée (âge)

4) il me l'affiche (fichier macro) en colonne C dans mon fichier macro (âge)

C'est ce que je te disais au dessus

Soit tu gardes

ActiveCell.FormulaR1C1

Et du coup ton

$D:$D

tu dois le passer en style R1C1 donc par exemple :

RC[-2]

ou tu utilises

.FormulaLocal

et dans ce cas tu dois changer ton :

RC[-2]

en style A1 par exemple :

MATCH(A2....)

Mais tu ne peux pas avoir les 2 styles dans une même formule.

Vu que tu veux récupérer dans ta variable Malettre un style A1 il faut utiliser

.FormulaLocal

avec que du style A1 à l'intérieur de ta formule

Merci

Je vote pour :

MATCH(A2....)

Mais si je fait : (sachant que ma variable (MaLettre) est égale à "B3")

MATCH(" & MaLettre & ")

Une fois que je teste il me met : entre apostrophes , donc la formule ne marche pas

;EQUIV('B3'

Il faut doubler il me semble :

MATCH("" & MaLettre & "")

Merci mais il me donne :

;EQUIV(" & MaLettre & "

envoi tout ton code stp

 ActiveCell.FormulaR1C1 = _
        "=INDEX('[fichier.xlsx]onglet line-set'!C4,MATCH("" & MaLettre & "",'[fichier.xlsx]onglet line-set'!C8,0))"
                                                                                           

Je te remercie d'avance pour ton aide, là je ferme tout je suis claqué

Bonne soiré à toi et encore merci, je vais continuer sur le problème demain soir

Tu dois être fatigué

ActiveCell.FormulaR1C1 = _
        "=INDEX('[fichier.xlsx]onglet line-set'!C4,MATCH("" & MaLettre & "",'[fichier.xlsx]onglet line-set'!C8,0))"

Tu demandes du style R1C1 et dans ta formule c'est du style A1

ActiveCell.FormulaLocal = _
        "=INDEX('[fichier.xlsx]onglet line-set'!C4,MATCH("" & MaLettre & "",'[fichier.xlsx]onglet line-set'!C8,0))"

Devrait être mieux

Merci je viens de tester et il me fait quand même une erreur, je pense savoir ou vient l'erreur mais pas sur.

En brut ça marche

=INDEX('[Fichier.xlsx]Onglet line-set'!$D:$D;EQUIV(B3;'[Fichier.xlsx]Onglet line-set'!$H:$H;0))

L'erreur dans VBA vient surement du !$D:$D;

En $D:$D ce trouve ma recherche ( fichier externe )

En B3 c'est la valeur que je lui demande de chercher dans mon fichier macro.

Hello,

J'avoue ne plus savoir t'aider sans fichier.

Bonjour,

Je viens de créer 2 fichiers ressemblant à ce que je voudrais

Macro.xlsm fichier principal

Fichier.xlsx les données

Pour le moment il faut utiliser uniquement la cellule D3 du fichier macro

Merci pour ton aide.

8exemple.zip (27.37 Ko)

Eric

Hello,

Autant pour moi je n'ai pas percuté ...

Formulalocal utilise exactement la même synthaxe que dans ton excel ...

Si ton appli excel est en français alors formulalocal attends du français, si tu es en anglais il attends de l'anglais... Idem pour les séparateurs :

ActiveCell.FormulaLocal = _
        "=INDEX('[Fichier.xlsx]onglet line-set'!$B:$B;EQUIV(" & MaLettre & ";'[Fichier.xlsx]onglet line-set'!$D:$D;0))"

Merci, Il y a du mieux, j'ai juste à affiner une fois fait je viendrais mettre le résultat final ici, ça peut toujours servir à quelqu'un

Merci pour ton aide et ta patience

Bonjour,

Finalement, j'ai changé la tactique , mais je te rassure je garde ta formule dans mon dossier d'exemples il me servira surement un de ses jours.

Pourquoi j'ai changé ? c'est tout simplement pour éviter de voir les formules dans les cellules (long à expliquer la raisons exact)

capture 2021 07 03 a 16 52 21

Donc j'ai créé 2 nouveaux fichiers

Macro.xlsm fichier principal

Fichier.xlsx les données

J'arrive à l'utiliser sans problème , le seul hic c'est que je suis obligé d'ouvrir le fichier de données ce qui est plutôt embêtant

Il n'y a pas moyen de faire autrement ?

8exemple2.zip (29.98 Ko)

Merci de ton aide.

Rechercher des sujets similaires à "private sub worksheet change byval target range"