ActiveCell.FormulaR1C1

Signaler
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004
-
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004
-
Bonjour,

Comment puis-je utiliser la fonction, ActiveCell.FormulaR1C1 = "=RIGHT([1001004.xls]Feuil1!R6C1,10)" sans mettre le nom du fichier (1001004.xls) ?

Le chemin a été définit auparavant.
Le code ouvre tous les fichiers d'un répertoire donné.

Mon code :

Sub Macro1()
'
Dim sFichier As String
Workbooks.Add
ChDir ("h:\Transit\Otcdep\Arretes\TCN\CR\Agate")
sFichier = Dir("*.xls")
Do Until sFichier = "1001008.xls"
Workbooks.Open (sFichier)
'
'ActiveCell.FormulaR1C1 = "=RIGHT([1001004.xls]Feuil1!R6C1,10)"

'
ActiveWorkbook.Close
sFichier = Dir()
Loop
End Sub

Je vous remercie par avance de vos réponses.

8 réponses

Messages postés
64
Date d'inscription
vendredi 21 décembre 2001
Statut
Membre
Dernière intervention
16 janvier 2009

L'astuce est la concatenation de ta formule !
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004

C'est à dire ????
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004

C'est à dire ????
Messages postés
64
Date d'inscription
vendredi 21 décembre 2001
Statut
Membre
Dernière intervention
16 janvier 2009

Bonjour Géraldine,

Effectivement, je n'ai pas été très "explicite" dans mon comentaire mais j'ai été interrompu ce matin alors que j ete répondais... Désolé.

J'espere avoir compris ce que tu demandais ;-)

Ce que je voulais dire :
As-tu essayé de mettre le nom de ton fichier dans une variable du style Nomfichier
puis de taper :
ActiveCell.FormulaR1C1 = "=RIGHT([" & nomfichier & "]Feuil1!R6C1,10)"

sinon, essaie de passer une premiere fois dans ton fichier 1001004.xls, enregistre la formule dans une variable, puis restitue la pour chacun des fichiers que tu ouvres par la suite (sans avoir à la retaper ;-)

Est-ce que j'ai répondu ou suis-je à côté?
si je suis à côté, peux-tu m'expliquer d'avantage ce que tu compte faire?

Cordialement
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004

Salut,

Merci pour le coup de main, mais effectivement je crois que mon souci est plus complexe.

1) Mettre mon fichier dans une variable (NomFichier) veut dire que je n'ai qu'un fichier dans ma variable. (Sauf erreur, je débute dans Visual Basic)

2) Si j'enregistre la formule dans une variable, dans ma formule il y a toujours le nom du fichier qui va changer, donc ???

Explication de mon souci :
J'ai environ 500 fichiers .xls de base qui ont la même structure. (C'est à dire, par exemple, la date se situe toujours en A6 mais ce n'est pas forcément la même date pour tous les fichiers).

Je souhaite par Visual Basic, obtenir un fichier .xls avec uniquement quelques cellules de mes fichiers de base.

Par exemple, on veut récupérer :

- la partie droite de la cellule A6 du 1001004.xls vers A1 du NouveauFichier.xls
- cellule D9 du 1001004.xls vers B1 du NouveauFichier.xls

- la partie droite de la cellule A6 du 1001005.xls vers A2 du NouveauFichier.xls
- cellule D9 du 1001005.xls vers B2 du NouveauFichier.xls

Etc..... pour tous les fichiers de Base (de 1001004.xls : 1001999.xls)

J'espère avoir été un peu plus claire.

Merci d'avance.
A+
Géraldine
Messages postés
64
Date d'inscription
vendredi 21 décembre 2001
Statut
Membre
Dernière intervention
16 janvier 2009

Salut Géraldine

Effectivement, c'etait un peu plus complexe que ce à quoi je m'attendais.
Il n'empeche que je te propose une solution :

Tu crée un fichier (ici resultat.xls) dans lequel tu colle cete macro

tu place ce fichier dans le repertoire ou sont tous les autres fichiers excel et tu lance la macro.

Celle ci se contente d'ouvrir tout les fichiers excel presents (tu peux affiner à souhait si tu le désires, en donnant des criteres de noms) et enregistre dans un tableau en mémoire les valeurs des cases A6 (les 10 caracteres de droite) et D9
Une fois tous les fichiers parcourus, elle restitue les valeurs engrangées dans le fichier resultat...

Tiensmoi au courant si ça te va ;-)

A +

Le Desassembleur (alias Bertrand)

Sub Macro1()
'

Dim tableau_tempo(2, 1000)
Dim sFichier As String
boucle = 0

With Application.FileSearch
If .Execute() > 0 Then
MsgBox "There were " & .FoundFiles.Count & _
" file(s) found."
For i = 1 To .FoundFiles.Count
If Right(.FoundFiles(i), 3) = "xls" And Right(.FoundFiles(i), 12) <> "resultat.xls" Then
Workbooks.Open Filename:=.FoundFiles(i)
boucle = boucle + 1
Range("A6").Select
tableau_tempo(1, boucle) = Right(ActiveCell.Value, 10)
Range("D9").Select
tableau_tempo(2, boucle) = ActiveCell.Value
ActiveWorkbook.Close

End If
Next i
Else
MsgBox "There were no files found."
End If

End With

Range("A1").Select
For boucle = 1 To 1000
ActiveCell.Value = tableau_tempo(1, boucle)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = tableau_tempo(2, boucle)
ActiveCell.Offset(1, -1).Select
Next boucle
'(bien sûr, tu paux ajouter une condition du style si contenu vide alors je passe...)

End Sub

Il y a certainement moyen de faire plus court mais en tout cas ça fonctionne.
Messages postés
64
Date d'inscription
vendredi 21 décembre 2001
Statut
Membre
Dernière intervention
16 janvier 2009

Juste une question : As-tu testé ce que je t'avais répondu?
(pour savoir si ca cole avec ce dont tu avais besoin?)

A+
Messages postés
10
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
8 mai 2004

Bonjour,

Je suis désolé, je n'ai pas oublié de te répondre.
Après une période de vacances, je n'ai pas eu le temps de m'occuper de VB.
Mais d'après un premier test, ce que tu m'avais répondu correspond à mon besoin. Il faut maintenant approfondir.
Je te tiendrai au courant dès que possible.

Merci encore pour ton soutient.
A+
Géraldine