Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

liaison via macro

  • Initiateur de la discussion Initiateur de la discussion charette63
  • Date de début Date de début

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 !

charette63

XLDnaute Occasionnel
Bonjour à toutes et toutes

J'ai crée une macro de liaison via l'éditeur VBA:

Code:
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]

merci pour votre aide

cordialement

Thierry
 
Re : liaison via macro

Bonjour.
VB:
ActiveCell.FormulaR1C1 = "='[test onglets0 2011.xls]" & Feuil1.Name &"'!R1C5"
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)
À+
 
Dernière édition:
Bonjour Dranreb,

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):

Code:
 ActiveCell.FormulaR1C1 = "='[test onglets0 & !R1C3 & .xls]Récapitulatif'!R1C4"

à 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)

peux-tu encore m'aider?

cordialement
thierry
 
Dernière édition:
Re : liaison via macro

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.
À+
 
Re: Re : liaison via macro

encore besoin d'un p'tit coup de pouce,

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.

Merci

cordialement
thierry
 
Re : liaison via macro

Rien compris. Si par ce fichier vous entendez celui qui porte la macro et si le "Ecncodé.xls" est ouvert:
VB:
ThisWorkbook.Worksheets(1).Cells(1,5).value = Workbooks("Encodé.xls").Worksheets(1).Cells(1,1).value
À+
 
Salut Dranreb,

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".

cordialement
Thierry
 
Re : liaison via macro

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.

VB:
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
 
Dernière édition:
Mais j'ai de la rigueur mon bon diable, j'ai.

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 .."

merci
 

Pièces jointes

Dernière édition:
Bonjour,

j'avance à petit pas, mais quand même besoin d'un petit coup de pouce

Voici où j'en étais arrivé:

Code:
Dim Fichier As String
    Fichier = "test onglets0" & " " & Cells(10, 1).Value & ".xls"
    Range("E1") = Fichier & " " & " " & Feuil1.Name & " " & Cells(1, 1).Value


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:

Code:
Dim Fichier As String
    Fichier = "test onglets0" & " " & Cells(10, 1).Value & ".xls"
    Range("E1") = "= Fichier & Feuil1.Name & Cells(1, 1)"

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"?

merci
cordialement
Thierry
 
Re : liaison via macro

Bonjour
je lis dans
Pourquoi par macro? Les liaisons faites via les fonction excel permettent seulement de donner "l'adresse" par le ...
À 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:
VB:
Feuil1.[E1].Value = Workbooks("test onglets0 " & Feuil1.[A10].Value & "bis.xls").Worksheet(Feuil1.Name).Cells(1, 1).Value
Mais comme dit:
Code:
=INDIRECT("'[test onglets0 "&$A$10&"bis.xls]Récapitulatif'!$A$1")
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.
À+
 
Dernière édition:
Bonjour Dranreb,

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é

Cordialement
Thierry
 
- 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

Discussions similaires

Réponses
3
Affichages
258
Réponses
18
Affichages
597
Réponses
1
Affichages
313
Réponses
3
Affichages
333
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…