Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Sub Macro25()
Range("E1").Select
ActiveCell.FormulaR1C1 = "='[test onglets0 2011.xls]Récapitulatif'!R1C5"
Range("E2").Select
End Sub
Je cherche à modifier le nom de la feuille (Récapitulatif) par Feuil1.Name:
Code:
Sub Macro25()
Range("E1").Select
ActiveCell.FormulaR1C1 = "='[test onglets0 2011.xls]Feuil1.Name'!R1C5"
Range("E2").Select
End Sub
Mais cela ne fonctionne pas, j'y ai mis des parenthèses, rien de mieux
pouvez-vous m'aider?
De plus, y-a-t-il moyen de remplacer, dans le code, le chiffre 2011 par une valeur d'une cellule donnée? Je m'explique avec mes mots:
[test onglets0 valeur de la cellule A1.xls]
Pareil pour la partie du nom du classeur: faut la concaténer.
Mais si vous avez la plage définie dans une varible Range ça pourrait devenir plus simple d'utiliser Plg.Address(True, True, xlR1C1, True)
À+
sympa de participer,
pour débuter, je suis novice, j'ai fais quelques macro principalement via l'éditeur que j'adapte à mes besoins avec des renseignements glanés ci et là.
Voici ce que j'ai fait suivant tes indications (j'ai gardé le code "Récapitulatif" pour les tests):
à l'activation, ça ne bug pas, mais ça m'ouvre la page de mise à jour des liens. Il semblerais donc, qu'il ne trouve pas son chemin. De plus quand je lui "indique" le chemin du classeur via la page précitée, il ne me demande pas quel feuille du classeur (donc il lit bien "récapitulatif) mais me note 0 au lieu de la valeur de R1c4 (bien que dans le bandeau des fonctions, la cellule R1C4 est renseignée sous la forme ("D1") qui est la bonne cellule)
Bonjour.
Vous n'avez visiblement pas compris le principe.
La propriété FormulaR1C1 doit recevoir une expression String qui représente une formule correcte en notation R1C1 native.
Ce que vous avez affecté: "='[test onglets0 & !R1C3 & .xls]Récapitulatif'!R1C4" est une constante String qui ne représente pas une formule correcte: il ne faut pas mettre de "&" dans les parties constantes: c'est un opérateur de concaténation pour mettre bout à bout des parties constantes et variables.
À+
grace aux informations de Dranreb (et google), je suis arrivé à ça:
Code:
Sub Macro28()
Dim Fichier As String
Fichier = "test onglets0" & " " & Cells(10, 1).Value & ".xls"
Range("E1").Select
ActiveCell.FormulaR1C1 = Fichier & Feuil1.Name & Cells(1, 1).Value
Range("E2").Select
End Sub
Quand je lance la macro, dans la cellule "E1", s'inscrit le chemin du fichier + la valeur de la cellule "A1" (cells(1 ,1).value) .Normal puisque il y a le signe égal entre "activecell...." et "fichier....." .
Ce que je recherche est que la valeur de la cellule "A1" du fichier "encodé" s'inscrive dans la cellule "E1" de ce fichier.
le fichier "encodé", est : test onglets0 2011.xls , je l'ai appelé encodé parce que dans la macro il est sous la forme : "test onglets0" & " " & Cells(10, 1).Value & ".xls". Ecrit sous cette forme parce que "2011" est variable et que cette valeur variable sera toujours dans la cellule ("A10")
exprimé autrement, la cellule ("E5") soit cells(1, 5) du classeur ouvert doit etre égale la cellule ("A1") soit cells(1, 1) de la Feuil1.Name
du fichier "test onglets0" & " " & Cells(10, 1).Value & ".xls".
Bon arrangez vous pour initialiser correctement deux variables déclarées de la façon suivante
VB:
Dim PlgeCible As Range, PlgSource As Range
On verra après.
P.S: Utilisez l'instruction Set bien sûr pour les initialiser: ce sont des variables objets.
n'oubliez pas qu'une expression Range appartient à un objet de type Worksheet,
et qu'une expression de type Worksheet appartient à un objet de type Workbook.
Pour les expressions Workbook vous avez à votre disposition:
Thisworkbook: le classeur qui porte la macro,
ActiveWorkbook: le classeur momentanément en avant plan parmi tous ceux qui sont ouverts,
Workbooks(index): Un classeur spécifique de ceux qui sont ouverts,
Workbooks.Add: Un nouveau classeur,
Une variable de type Workbook correctement initialisée d'une expression Workbook par un Set.
Pour les expressions Worksheet vous avez à votre disposition:
ActiveSheet: la feuille affichée (appartenant donc au ActiveWorkbook),
WB.Workseets(Index): une feuille spécifique d'un classeur WB spécifique,
Le nom VBA d'une feuille de ThisWorkbook,
Une variable de type Worksheet correctement initialisée d'une expression WorkSheet par un Set.
le fichier "encodé", est : test onglets0 2011.xls , je l'ai appelé encodé parce que dans la macro il est sous la forme : "test onglets0" & " " & Cells(10, 1).Value & ".xls". Ecrit sous cette forme parce que "2011" est variable et que cette valeur variable sera toujours dans la cellule ("A10")
Dim Encodé As Workbook, CelR10C1DUneFeuilleNonPrécisée As String
Set Encodé = Workbooks("test onglets0 " & CelR10C1DUneFeuilleNonPrécisée & ".xls")
Un peu de rigueur que diable !
Bon. Supposons:
VB:
Set Encodé = Workbooks("test onglets0 " & ActiveSheet.Cells(10,1).value & ".xls")
la cellule ("E5") soit cells(1, 5) du classeur ouvert doit etre égale la cellule ("A1") soit cells(1, 1) de la Feuil1.Name
du fichier "test onglets0" & " " & Cells(10, 1).Value & ".xls".
Mais ils doivent tous être ouverts. Vous voulez parler du classeur actif peut être ?
ça doit alors en tout cas finir par ... = Feuil1.[A1].Value qui est un raccourci de Feuil1.Range("A1").Value
Je ne pensais pas que ce fut-ce si compliquer de creer une liaison par macro.
Je doit bien avouer que votre dernier post m'effraye mon cher Dranreb. Quand je vous dit que je suis novice, c'est novice de chez novice
comme un p'tit dessin vaut mieux qu'un long discours je joint deux petits fichiers qui me servent de test, quelques explications dans le "test onglet2 .."
Avec ce code, j'ai dans la cellule E1
-le nom exact du fichier
-le nom de la feuil1 de la feuille active
......(alors que c'est la Feuil1 de "test onglets0" & " " & Cells(10, 1).Value & ".xls" que j'aimerais avoir)
-la valeur de la cellule (Cells(1, 1)) de la feuille active
......(même remarque que la parenthèse ci dessus)
Donc en fait, je n'ai pas la liaison
Aprés quelques recherches et un petite modification au code, j'arrive à ceci:
cette fois, quand j'active la macro, j'ai "#NOM?" noté dans la cellule "E1" mais,
dans le bandeau des fonctions, la formule commence par un "=". Donc j'ai une liaison,
chose que je n'avais pas avant.
Pouvez vous m'aider sur la cause que je n'ai pas la valeur de la cellule A1 du fichier ""test onglets0" & " " & Cells(10, 1).Value & ".xls"?
À partir du moment ou on a de quoi construire par formule une adresse variable mais correcte de cellule dans un classeur ouvert, on peut accéder au contenu de la cellule à cette adresse sans avoir besoin de macro: la fonction INDIRECT est faite pour cela.
La seule instruction nécessaire de votre macro28 dans module 1 serait:
affiche le même résultat.
Ne laissez pas de modules inutilisables (j'ai vu une copie de ceux de Module1 apparamment) dans les modules associés aux feuilles. Pour votre information, ceux ci sont réservés à des procédures évènementielles dont le modèle d'instructions de début et fin peut être engendré à l'aide des deux zone qui surmontenrt la fenêtre de code. Pareil pour le module ThisWorkbook (Associé à l'objet du même nom) pour gérer les évènements propres au classeur. À part d'éventuels sous programmes à usage interne, l'exécution des procédures écrites dans ces modules est normalement provoquée par Excel.
À+
Je ne connaissais pas la fonction "indirect", mais on est aussi ici pour apprendre. Je vais faire plus de recherche sur les possibilités de cette fonction.
Pour info, la code que tu m'as transmis genere un message d'erreur: erreur d'execution 438 propriété ou méthode non géré par cet objet
Je vais opter pour la fonction, je pourrais ainsi terminer mes tableaux.
Un grand merci pour les informations et l'aide que tu m'as apporté
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD