Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macros Excel - liens entre cellules de differents onglets

1 réponse
Avatar
simina.lazar
1) Liens entre cellules de differents onglets
----------------------------------------------
Je veux faire une macro qui fasse un lien entre la cellule
selectionnee et une cellule d'un autre onglet, mais je veux que le
numero de la ligne soit la variable "Z_Li" (et non pas un chiffre).
Plus precisemment, dans l'instruction suivante :
ActiveCell.FormulaR1C1 = "=Pilotage!R[25]C[1]"
je veux remplacer le chiffre "25" par la variable Z_Li.
J'ai essaye, mais le programme s'arrete : erreur 1004.
Quelqu'un pourrait-il me renseigner sur la syntaxe a  utiliser (ou sur
la declaration de la variable "Z_Li") ?


2) Passage d'une adresse relative dans plusieurs onglets
---------------------------------------------------------
Par la methode la plus simple: celle de l'enregistrement, j'ai ecrit
une macro qui execute plusieurs operations dans plusieurs onglets.
Toutefois pour me positionner sur la ligne desiree dans chacun des
onglets, j'ai ete obligee d'intervenir manuellement dans la procedure
Visual Basic. Est ce qu'il y avait un autre moyen pour passage
d'adresse relative entre les onglets d'une maniere automatique ?
Ci-dessous, je presente ma procedure.


3) Procedure d'insertion des groupes de ligne dans plusieurs onglets
--------------------------------------------------------------------
J'ai marque entre signes d'interrogation les instructions qui ne
marchent pas.

==========================================================================
Option Explicit

Sub Prc_insere_t33()
'
' Prc_insere_t3 Macro
' Macro enregistre le 17/12/2004 par lazar
'
Dim Z_Ligne As Long
Dim Z_Ligne_c As Integer
Dim Z_Ligne_a As Integer
Dim Z_Tache As Long
Dim Z_Li As Integer

' ---------------------------------------------------------------------------
' Onglet Pilotage
' Insertion de 6 lignes et copie d'un ensemble de 6 lignes modele
(de la fin du fichier)
' ---------------------------------------------------------------------------
' Z_Ligne = Application.InputBox("Cliquez sur une cellule",
Type:=8).Row
Z_Ligne = Selection.Row
Z_Tache = ((Z_Ligne - 18) / 6) + 1
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.End(xlToLeft).Select
ActiveCell.FormulaR1C1 = "yyyyyy"
Cells.Find(What:="xxxxxx", After:=ActiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False).Activate
ActiveCell.Offset(3, 0).Range("A1").Select
Selection.End(xlToLeft).Select
ActiveCell.Rows("1:6").EntireRow.Select
ActiveCell.Activate
Selection.Copy
ActiveCell.Offset(-2, 0).Range("A1").Select
Cells.Find(What:="yyyyyy", After:=ActiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False).Activate
ActiveCell.Rows("1:1").EntireRow.Select
ActiveCell.Activate
ActiveSheet.Paste
Selection.End(xlToLeft).Select

' ---------------------------------------------------------------------------
' Onglet Cumuls
' Copie des 6 lignes precedentes et insertion au dessus
' ---------------------------------------------------------------------------
Sheets("Cumuls").Select
Application.Goto Reference:="R1C2"
Z_Ligne_c = Z_Ligne + 1

Cells(Z_Ligne_c, 1).Activate
ActiveCell.Offset(0, 0).Rows("1:6").EntireRow.Select
Application.CutCopyMode = False
Selection.Copy
Selection.Insert Shift:=xlDown
ActiveCell.Offset(1, 0).Range("A1").Select


' ---------------------------------------------------------------------------
' Onglet Avancement
' Insertion d'une ligne avec liens vers des cellules de l'onglet
Pilotage
' ---------------------------------------------------------------------------
Sheets("Avancement").Select
Application.Goto Reference:="R1C1"
Z_Ligne_a = Z_Tache + 2
Cells(Z_Ligne_a, 1).Activate
ActiveCell.Offset(0, 0).Range("A1").Select
Selection.EntireRow.Insert

' ============
' Premier lien
' ============
' ????????????????????????????????????????????????????????????
' Essai 1 - ca ne marche pas - erreur 1004
' Z_Li = Z_Ligne - Z_Ligne_a
''??? ActiveCell.FormulaR1C1 = "=Pilotage!R[Z_Li]C[1]" ??????

' Essai 2 - ca marche a peu pres, mais sans liens
' ??? ActiveCell.FormulaR1C1 =
ThisWorkbook.Sheets("Pilotage").Cells(Z_Ligne, 2) ?

' Essai 3 - cela marche - mais evidemment l'adresse n'est pas bonne
ActiveCell.FormulaR1C1 = "=Pilotage!R[25]C[1]"
' ????????????????????????????????????????????????????????????

' ==============
' Deuxieme lien
' ==============
ActiveCell.Offset(0, 1).Range("A1").Select

' ????????????????????????????????????????????????????????????
' Essai 1 - ca ne marche pas - erreur 1004
' Z_Li = Z_Li + 4
''??? ActiveCell.FormulaR1C1 = "=Pilotage!R[Z_Li]C[4]" ??????

' Essai 2 - ca marche a peu pres, mais sans liens
' Z_Li = Z_Ligne + 4
''??? ActiveCell.FormulaR1C1 =
ThisWorkbook.Sheets("Pilotage").Cells(Z_Ligne, 5) ?

' Essai 3 - cela marche - mais evidemment l'adresse n'est pas bonne
ActiveCell.FormulaR1C1 = "=Pilotage!R[29]C[4]"
' ????????????????????????????????????????????????????????????


End Sub

1 réponse

Avatar
Gaenonius
A ta question 1 (pour amorcer la pompe) :

Sub essai()
Dim Z_Li As Long
Z_Li = 25
ActiveCell.FormulaR1C1 = "=Pilotage!R[" & Z_Li & "]C[1]"
End Sub

--
Gaenonius

1) Liens entre cellules de differents onglets
----------------------------------------------
Je veux faire une macro qui fasse un lien entre la cellule
selectionnee et une cellule d'un autre onglet, mais je veux que le
numero de la ligne soit la variable "Z_Li" (et non pas un chiffre).
Plus precisemment, dans l'instruction suivante :
ActiveCell.FormulaR1C1 = "=Pilotage!R[25]C[1]"
je veux remplacer le chiffre "25" par la variable Z_Li.
J'ai essaye, mais le programme s'arrete : erreur 1004.
Quelqu'un pourrait-il me renseigner sur la syntaxe a utiliser (ou sur
la declaration de la variable "Z_Li") ?


2) Passage d'une adresse relative dans plusieurs onglets
---------------------------------------------------------
Par la methode la plus simple: celle de l'enregistrement, j'ai ecrit
une macro qui execute plusieurs operations dans plusieurs onglets.
Toutefois pour me positionner sur la ligne desiree dans chacun des
onglets, j'ai ete obligee d'intervenir manuellement dans la procedure
Visual Basic. Est ce qu'il y avait un autre moyen pour passage
d'adresse relative entre les onglets d'une maniere automatique ?
Ci-dessous, je presente ma procedure.


3) Procedure d'insertion des groupes de ligne dans plusieurs onglets
--------------------------------------------------------------------
J'ai marque entre signes d'interrogation les instructions qui ne
marchent pas.

========================================================================= > Option Explicit

Sub Prc_insere_t33()
'
' Prc_insere_t3 Macro
' Macro enregistre le 17/12/2004 par lazar
'
Dim Z_Ligne As Long
Dim Z_Ligne_c As Integer
Dim Z_Ligne_a As Integer
Dim Z_Tache As Long
Dim Z_Li As Integer

' ---------------------------------------------------------------------------
' Onglet Pilotage
' Insertion de 6 lignes et copie d'un ensemble de 6 lignes modele
(de la fin du fichier)
' ---------------------------------------------------------------------------
' Z_Ligne = Application.InputBox("Cliquez sur une cellule",
Type:=8).Row
Z_Ligne = Selection.Row
Z_Tache = ((Z_Ligne - 18) / 6) + 1
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.End(xlToLeft).Select
ActiveCell.FormulaR1C1 = "yyyyyy"
Cells.Find(What:="xxxxxx", After:¬tiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False).Activate
ActiveCell.Offset(3, 0).Range("A1").Select
Selection.End(xlToLeft).Select
ActiveCell.Rows("1:6").EntireRow.Select
ActiveCell.Activate
Selection.Copy
ActiveCell.Offset(-2, 0).Range("A1").Select
Cells.Find(What:="yyyyyy", After:¬tiveCell, LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False).Activate
ActiveCell.Rows("1:1").EntireRow.Select
ActiveCell.Activate
ActiveSheet.Paste
Selection.End(xlToLeft).Select

' ---------------------------------------------------------------------------
' Onglet Cumuls
' Copie des 6 lignes precedentes et insertion au dessus
' ---------------------------------------------------------------------------
Sheets("Cumuls").Select
Application.Goto Reference:="R1C2"
Z_Ligne_c = Z_Ligne + 1

Cells(Z_Ligne_c, 1).Activate
ActiveCell.Offset(0, 0).Rows("1:6").EntireRow.Select
Application.CutCopyMode = False
Selection.Copy
Selection.Insert Shift:=xlDown
ActiveCell.Offset(1, 0).Range("A1").Select


' ---------------------------------------------------------------------------
' Onglet Avancement
' Insertion d'une ligne avec liens vers des cellules de l'onglet
Pilotage
' ---------------------------------------------------------------------------
Sheets("Avancement").Select
Application.Goto Reference:="R1C1"
Z_Ligne_a = Z_Tache + 2
Cells(Z_Ligne_a, 1).Activate
ActiveCell.Offset(0, 0).Range("A1").Select
Selection.EntireRow.Insert

' =========== > ' Premier lien
' ============
' ????????????????????????????????????????????????????????????
' Essai 1 - ca ne marche pas - erreur 1004
' Z_Li = Z_Ligne - Z_Ligne_a
''??? ActiveCell.FormulaR1C1 = "=Pilotage!R[Z_Li]C[1]" ??????

' Essai 2 - ca marche a peu pres, mais sans liens
' ??? ActiveCell.FormulaR1C1 > ThisWorkbook.Sheets("Pilotage").Cells(Z_Ligne, 2) ?

' Essai 3 - cela marche - mais evidemment l'adresse n'est pas bonne
ActiveCell.FormulaR1C1 = "=Pilotage!R[25]C[1]"
' ????????????????????????????????????????????????????????????

' ============= > ' Deuxieme lien
' ==============
ActiveCell.Offset(0, 1).Range("A1").Select

' ????????????????????????????????????????????????????????????
' Essai 1 - ca ne marche pas - erreur 1004
' Z_Li = Z_Li + 4
''??? ActiveCell.FormulaR1C1 = "=Pilotage!R[Z_Li]C[4]" ??????

' Essai 2 - ca marche a peu pres, mais sans liens
' Z_Li = Z_Ligne + 4
''??? ActiveCell.FormulaR1C1 > ThisWorkbook.Sheets("Pilotage").Cells(Z_Ligne, 5) ?

' Essai 3 - cela marche - mais evidemment l'adresse n'est pas bonne
ActiveCell.FormulaR1C1 = "=Pilotage!R[29]C[4]"
' ????????????????????????????????????????????????????????????


End Sub