OVH Cloud OVH Cloud

2crire une formule par VBA dans cellule active

7 réponses
Avatar
SylVBA
Bonjour =E0 Tous & Toutes,

Me voil=E0 de retour avec un probl=E8me nouveau !

J'ai une base de donn=E9es pour mes patients sous Excel avec plus de
60 colonnes ....
(Date de soins, commentaires, renseignements, contacts, e mails
t=E9l=E9phone, adresse du g=E9n=E9raliste etc ..)

J'ai =E9cris une petit macro pour pouvoir facilement =E9crire une
formule qui me sert =E0 extraire des donn=E9es de cette base dans une
nouvelle feuille
J'utilise comme r=E9f=E9rence le num=E9ro de patient qui est toujours en
colonne A (num=E9ro =E0 5 chiffres qui commence par 1xxxx).

Voil=E0 un bout de mon code

Tout va tr=E8s bien, je connais l'affectation des 60 colonnes (les
num=E9ros me servant =E0 choisir ce que je souhaite extraire)

MAIS dans la formule suivant un passage me pose un probl=E8me :
& Cells(ActiveCell.Row, 1) &
Cela remplace la r=E9f=E9rence de la cellule (A2) par la valeur de A2

J'ai essay=E9 Cells(ActiveCell.Row, 1).address et/ou Range ("A" &
ActiveCell.Row) mais la il y a une erreur

Mon souhait est de transformer ce passage du code pour avoir DANS la
formule le A et le num=E9ro de ligne sur laquelle je suis (A2 par
Exemple)

Est-ce clair ?

Merci d'avance pour cette sympathique contribution

PS : Je sais que passer par des UF est mieux, mais j'ai des dizaines
de bases diff=E9rentes et donc comme cela c'est facile de changer, le
lecteur ou le chemin d'acc=E8s etc... je souhaite donc rester dans
cette formule, mais si on peut la raccourci alors l=E0 il ne faut pas
h=E9siter

Sylvie

Dim Lekteur, RepSousRep, Fichier, Onglet, CellDeDepart, CelluleMatch

Lekteur =3D "C"
RepSousRep =3D ":\" & "Mes documents\Patients\"
Fichier =3D "[Base de donn=E9es patients 2006]"
Onglet =3D "BDD3" & "'! "

Set CellDeDepart =3D Application.InputBox("Cliquer sur la premi=E8re
cellule ou introduire la formule", , , , , , , 8)
CellDeDepart.Select

Kol =3D Application.InputBox("No de la colonne =E0 extraire", , , , , , ,
1)
Kol =3D "R2C" & Kol & ":R900C" & Kol

ActiveCell.FormulaR1C1 =3D _
"=3DINDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "R2C1:R900C1,0))"

Une id=E9e, une solution ?

7 réponses

Avatar
isabelle
bonjour,

essaie comme ça,

ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "A2:A900,0))"

isabelle


Bonjour à Tous & Toutes,

Me voilà de retour avec un problème nouveau !

J'ai une base de données pour mes patients sous Excel avec plus de
60 colonnes ....
(Date de soins, commentaires, renseignements, contacts, e mails
téléphone, adresse du généraliste etc ..)

J'ai écris une petit macro pour pouvoir facilement écrire une
formule qui me sert à extraire des données de cette base dans une
nouvelle feuille
J'utilise comme référence le numéro de patient qui est toujours en
colonne A (numéro à 5 chiffres qui commence par 1xxxx).

Voilà un bout de mon code

Tout va très bien, je connais l'affectation des 60 colonnes (les
numéros me servant à choisir ce que je souhaite extraire)

MAIS dans la formule suivant un passage me pose un problème :
& Cells(ActiveCell.Row, 1) &
Cela remplace la référence de la cellule (A2) par la valeur de A2

J'ai essayé Cells(ActiveCell.Row, 1).address et/ou Range ("A" &
ActiveCell.Row) mais la il y a une erreur

Mon souhait est de transformer ce passage du code pour avoir DANS la
formule le A et le numéro de ligne sur laquelle je suis (A2 par
Exemple)

Est-ce clair ?

Merci d'avance pour cette sympathique contribution

PS : Je sais que passer par des UF est mieux, mais j'ai des dizaines
de bases différentes et donc comme cela c'est facile de changer, le
lecteur ou le chemin d'accès etc... je souhaite donc rester dans
cette formule, mais si on peut la raccourci alors là il ne faut pas
hésiter

Sylvie

Dim Lekteur, RepSousRep, Fichier, Onglet, CellDeDepart, CelluleMatch

Lekteur = "C"
RepSousRep = ":" & "Mes documentsPatients"
Fichier = "[Base de données patients 2006]"
Onglet = "BDD3" & "'! "

Set CellDeDepart = Application.InputBox("Cliquer sur la première
cellule ou introduire la formule", , , , , , , 8)
CellDeDepart.Select

Kol = Application.InputBox("No de la colonne à extraire", , , , , , ,
1)
Kol = "R2C" & Kol & ":R900C" & Kol

ActiveCell.FormulaR1C1 = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "R2C1:R900C1,0))"

Une idée, une solution ?



Avatar
SylVBA
Bonjour Isabelle,

Merci pour cette entre aide féminine,

MAIS ta solution ne fonctionne malheuresement pas ....
Dans la formule il écrit après le Equiv la VALEUR de la cellule A2 et
non pas l'adresse de cette cellule et donc quand je "tire" la formule
forcement c'est faux !

Merci

Sylvie



bonjour,

essaie comme ça,

ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "A2:A900,0))"

isabelle


Bonjour à Tous & Toutes,

Me voilà de retour avec un problème nouveau !

J'ai une base de données pour mes patients sous Excel avec plus de
60 colonnes ....
(Date de soins, commentaires, renseignements, contacts, e mails
téléphone, adresse du généraliste etc ..)

J'ai écris une petit macro pour pouvoir facilement écrire une
formule qui me sert à extraire des données de cette base dans une
nouvelle feuille
J'utilise comme référence le numéro de patient qui est toujours en
colonne A (numéro à 5 chiffres qui commence par 1xxxx).

Voilà un bout de mon code

Tout va très bien, je connais l'affectation des 60 colonnes (les
numéros me servant à choisir ce que je souhaite extraire)

MAIS dans la formule suivant un passage me pose un problème :
& Cells(ActiveCell.Row, 1) &
Cela remplace la référence de la cellule (A2) par la valeur de A2

J'ai essayé Cells(ActiveCell.Row, 1).address et/ou Range ("A" &
ActiveCell.Row) mais la il y a une erreur

Mon souhait est de transformer ce passage du code pour avoir DANS la
formule le A et le numéro de ligne sur laquelle je suis (A2 par
Exemple)

Est-ce clair ?

Merci d'avance pour cette sympathique contribution

PS : Je sais que passer par des UF est mieux, mais j'ai des dizaines
de bases différentes et donc comme cela c'est facile de changer, le
lecteur ou le chemin d'accès etc... je souhaite donc rester dans
cette formule, mais si on peut la raccourci alors là il ne faut pas
hésiter

Sylvie

Dim Lekteur, RepSousRep, Fichier, Onglet, CellDeDepart, CelluleMatch

Lekteur = "C"
RepSousRep = ":" & "Mes documentsPatients"
Fichier = "[Base de données patients 2006]"
Onglet = "BDD3" & "'! "

Set CellDeDepart = Application.InputBox("Cliquer sur la première
cellule ou introduire la formule", , , , , , , 8)
CellDeDepart.Select

Kol = Application.InputBox("No de la colonne à extraire", , , , , , ,
1)
Kol = "R2C" & Kol & ":R900C" & Kol

ActiveCell.FormulaR1C1 = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "R2C1:R900C1,0))"

Une idée, une solution ?





Avatar
isabelle
bonjour Sylvie,

dit moi ci c'est mieux,
ps/ il faut ajouter le .xls
Fichier = "[Base de données patients 2006.xls]"

Kol = Range(Cells(2, kol1), Cells(900, kol1)).Address(0, 0)
ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1).Address(0) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "$B$2:$B$900,0))"

isabelle

Bonjour Isabelle,

Merci pour cette entre aide féminine,

MAIS ta solution ne fonctionne malheuresement pas ....
Dans la formule il écrit après le Equiv la VALEUR de la cellule A2 et
non pas l'adresse de cette cellule et donc quand je "tire" la formule
forcement c'est faux !

Merci

Sylvie




bonjour,

essaie comme ça,

ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "A2:A900,0))"

isabelle



Bonjour à Tous & Toutes,

Me voilà de retour avec un problème nouveau !

J'ai une base de données pour mes patients sous Excel avec plus de
60 colonnes ....
(Date de soins, commentaires, renseignements, contacts, e mails
téléphone, adresse du généraliste etc ..)

J'ai écris une petit macro pour pouvoir facilement écrire une
formule qui me sert à extraire des données de cette base dans une
nouvelle feuille
J'utilise comme référence le numéro de patient qui est toujours en
colonne A (numéro à 5 chiffres qui commence par 1xxxx).

Voilà un bout de mon code

Tout va très bien, je connais l'affectation des 60 colonnes (les
numéros me servant à choisir ce que je souhaite extraire)

MAIS dans la formule suivant un passage me pose un problème :
& Cells(ActiveCell.Row, 1) &
Cela remplace la référence de la cellule (A2) par la valeur de A2

J'ai essayé Cells(ActiveCell.Row, 1).address et/ou Range ("A" &
ActiveCell.Row) mais la il y a une erreur

Mon souhait est de transformer ce passage du code pour avoir DANS la
formule le A et le numéro de ligne sur laquelle je suis (A2 par
Exemple)

Est-ce clair ?

Merci d'avance pour cette sympathique contribution

PS : Je sais que passer par des UF est mieux, mais j'ai des dizaines
de bases différentes et donc comme cela c'est facile de changer, le
lecteur ou le chemin d'accès etc... je souhaite donc rester dans
cette formule, mais si on peut la raccourci alors là il ne faut pas
hésiter

Sylvie

Dim Lekteur, RepSousRep, Fichier, Onglet, CellDeDepart, CelluleMatch

Lekteur = "C"
RepSousRep = ":" & "Mes documentsPatients"
Fichier = "[Base de données patients 2006]"
Onglet = "BDD3" & "'! "

Set CellDeDepart = Application.InputBox("Cliquer sur la première
cellule ou introduire la formule", , , , , , , 8)
CellDeDepart.Select

Kol = Application.InputBox("No de la colonne à extraire", , , , , , ,
1)
Kol = "R2C" & Kol & ":R900C" & Kol

ActiveCell.FormulaR1C1 = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "R2C1:R900C1,0))"

Une idée, une solution ?









Avatar
SylVBA
Re bonsoir Isabelle,

Merci à toi pour ce début de solution

Presque j'ai corrigé ton code pour que cela fonctionne voici donc ton
code Upgrade:

Kol = Range(Cells(2, Kol), Cells(900, Kol)).Address(0, 0)
'Kol1 ne fonctionne pas
ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1).Address(0) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "$A$2:$A$900,0))"

' la colonne de ref est A pas B

Mais maintenant on a bien l'adresse de la cellule mais avec la nouvelle
définition de Kol les références perdent les $ (avant = $B$2:$B$900
pour la colonne 2 donc la B et maintenant voilà le code = B2:B900,
forcément quand tu tires la formule...... = danger !

Vois tu autre chose ?
Que pense les ExceL experts de cette petite erreur à corriger ?

Bisous à toutes & tous,

Sylvie
Avatar
isabelle
bonjour Sylvie,

pour les références relative ou absolu, je te laisse choisir :

Range(Cells(2, 1), Cells(900, 1)).Address(0, 0) = A1:A900
Range(Cells(2, 1), Cells(900, 1)).Address(0) = $A1:$A900
Range(Cells(2, 1), Cells(900, 1)).Address(, 0) = A$1:A$900
Range(Cells(2, 1), Cells(900, 1)).Address = $A$1:$A$900

isabelle

Re bonsoir Isabelle,

Merci à toi pour ce début de solution

Presque j'ai corrigé ton code pour que cela fonctionne voici donc ton
code Upgrade:

Kol = Range(Cells(2, Kol), Cells(900, Kol)).Address(0, 0)
'Kol1 ne fonctionne pas
ActiveCell.Formula = _
"=INDEX('" & Lekteur & RepSousRep & Fichier & Onglet & Kol & _
" ,MATCH(" & Cells(ActiveCell.Row, 1).Address(0) & ",'" & _
Lekteur & RepSousRep & Fichier & Onglet & "$A$2:$A$900,0))"

' la colonne de ref est A pas B

Mais maintenant on a bien l'adresse de la cellule mais avec la nouvelle
définition de Kol les références perdent les $ (avant = $B$2:$B$900
pour la colonne 2 donc la B et maintenant voilà le code = B2:B900,
forcément quand tu tires la formule...... = danger !

Vois tu autre chose ?
Que pense les ExceL experts de cette petite erreur à corriger ?

Bisous à toutes & tous,

Sylvie



Avatar
SylVBA
Merci isabelle

c'est parfair je viens de comprendre pour les références absolues

Ce code fonctionne maintenant parfaitement grace à toi,

un grand Merci

Ps: Y a t'il moyen de le raccourcir ? à la façon AV .... ?

Bonne soirée

Sylvie
Avatar
isabelle
un grand Merci

de rien sylvie,

Ps: Y a t'il moyen de le raccourcir ? à la façon AV .... ?


j'ai mis une balise pour Av, espérons qu'il passe dans les parages.

isabelle