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

cellule d'une autre feuille en VBA

9 réponses
Avatar
jpthillard
Bonjour,
je souhaiterai adapter une macro.
Je voudrai modifier la ligne 2 de la macro pour que soit lu la cellule
d7 de la feuil 2.
Merci d'avance.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [d7]) Is Nothing And Target.Count = 1 Then
Range("C9:D42").ClearContents
Application.EnableEvents = False
x = 9
For Each c In [Classes]
If c = Target Then
Cells(x, 3) = c.Offset(, -3): Cells(x, 4) = c.Offset(, -2)
x = x + 1
End If
Next
Application.EnableEvents = True
End If
End Sub

9 réponses

Avatar
Gloops
a écrit, le 02/11/2007 08:49 :
Bonjour,
je souhaiterai adapter une macro.
Je voudrai modifier la ligne 2 de la macro pour que soit lu la cellule
d7 de la feuil 2.
Merci d'avance.


Bonjour,

Worksheets(2).Range("D7")

Oups, ma machine avec Excel est éteinte, vérifie voir si les feuilles
sont numérotées à partir de 1 ou de 0.

Avatar
lSteph
Bonjour, jpthill

qui a écrit entre autres wrote:
..
je souhaiterai adapter une macro.
Je voudrai modifier la ligne 2 de la macro pour que soit lu la cellule
d7 de la feuil 2.
S'agissant de

Private Sub Worksheet_Change(ByVal Target As Range)


C'est un évennement de feuille, si tu l'avaismis dans Feuil1
et bien mets le dans le code de Feuil2

Pour ce faire :
----
un clic droit sur l'onglet de Feuil1
---
ou bien
---
Alt+F11 t'ouvrira vbe puis tu dblcliques sur Feuil1 dans l'explorateur
de projet situé sur ta gauche.
---

ensuite avec ta souris sélectionne toute laprocèdure du code de
Feuil1
que tu copies Ctrl+c
puis tu dblcliques sur Feuil2 dans l'explorateur de projet situé sur
ta gauche.
et tu colles le code dans le module de Feuil2 Ctrl+v


--
lSteph

Avatar
anonymousA
Bonjour,

l'index commence toujours à 1 ,AMC.

A+


a écrit, le 02/11/2007 08:49 :
Bonjour,
je souhaiterai adapter une macro.
Je voudrai modifier la ligne 2 de la macro pour que soit lu la cellule
d7 de la feuil 2.
Merci d'avance.


Bonjour,

Worksheets(2).Range("D7")

Oups, ma machine avec Excel est éteinte, vérifie voir si les feuilles
sont numérotées à partir de 1 ou de 0.




Avatar
MichDenis
| Worksheets(2).Range("D7")

| "anonymousA"
toujours à 1 ,AMC.

Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.

Pour être plus sûr, il est préférable d'utiliser le nom complet
de l'onglet de la feuille Worksheets("Feuil2") dans son code.

Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure façon
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25
Avatar
lSteph
Bonjour,
;o) Sauf erreur d'appréciation de ma part
pourrais-je moi aussi suggérer qu'il s'agit d'un Worksheet_change et
qu'en l'occurence, même s'il est bon de faire ce rappel de la
différence entre name et codename
il paraît peu probable que Worksheet("Feuil2").[d7] convienne
et d'ailleurs pas plus que Feuil2.[d7]
car le [d7] en question pour être en intersect avec target devra
qd même d'abord selon ce contexte être sur la feuille qui contient ce
code.

Reste qu'il serait sympa d'avoir un retour de JpTh.. et qu'il nous
précise à cette occasion ce qu'il advient des adresses des autres
plages sur quelle feuille...?§

@+

--
lSteph




On 2 nov, 13:00, "MichDenis" wrote:
| Worksheets(2).Range("D7")

| "anonymousA"
toujours à 1 ,AMC.

Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.

Pour être plus sûr, il est préférable d'utiliser le nom complet
de l'onglet de la feuille Worksheets("Feuil2") dans son code.

Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure faç on
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25


Avatar
jpthillard
On 2 nov, 14:30, lSteph wrote:
Bonjour,
;o) Sauf erreur d'appréciation de ma part
pourrais-je moi aussi suggérer qu'il s'agit d'un Worksheet_change et
qu'en l'occurence, même s'il est bon de faire ce rappel de la
différence entre name et codename
il paraît peu probable que Worksheet("Feuil2").[d7] convienne
et d'ailleurs pas plus que Feuil2.[d7]
car le [d7] en question pour être en intersect avec target devra
qd même d'abord selon ce contexte être sur la feuille qui contient ce
code.

Reste qu'il serait sympa d'avoir un retour de JpTh.. et qu'il nous
précise à cette occasion ce qu'il advient des adresses des autres
plages sur quelle feuille...?§

@+

--
lSteph

On 2 nov, 13:00, "MichDenis" wrote:



| Worksheets(2).Range("D7")

| "anonymousA"
toujours à 1 ,AMC.

Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.

Pour être plus sûr, il est préférable d'utiliser le nom complet
de l'onglet de la feuille Worksheets("Feuil2") dans son code.

Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure fa çon
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25- Masquer le texte des messages précéd ents -


- Afficher le texte des messages précédents -


Bonjour à tous,

merci déjà de vos réponses.
J'ai bien compris ma méprise avec Worksheets.
Néanmoins je n'ai pas ma solution. Aussi je vous propose en PJ un
exemple.
Je voudrai que ma cellule D7 de la feuille émargement (qui est une
copie de la cellule D7 de la feuille Information) me permette de
générer la liste.

http://cjoint.com/?lcrcTBlsCM

Merci pour votre aide.

JP


Avatar
LSteph
Bonsoir,
http://cjoint.com/?lctqHlDb3V

On 2 nov, 14:30, lSteph wrote:
Bonjour,
;o) Sauf erreur d'appréciation de ma part
pourrais-je moi aussi suggérer qu'il s'agit d'un Worksheet_change et
qu'en l'occurence, même s'il est bon de faire ce rappel de la
différence entre name et codename
il paraît peu probable que Worksheet("Feuil2").[d7] convienne
et d'ailleurs pas plus que Feuil2.[d7]
car le [d7] en question pour être en intersect avec target devra
qd même d'abord selon ce contexte être sur la feuille qui contient ce
code.

Reste qu'il serait sympa d'avoir un retour de JpTh.. et qu'il nous
précise à cette occasion ce qu'il advient des adresses des autres
plages sur quelle feuille...?§

@+

--
lSteph

On 2 nov, 13:00, "MichDenis" wrote:



| Worksheets(2).Range("D7")
| "anonymousA"
toujours à 1 ,AMC.
Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.
Pour être plus sûr, il est préférable d'utiliser le nom complet
de l'onglet de la feuille Worksheets("Feuil2") dans son code.
Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure façon
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -



Bonjour à tous,

merci déjà de vos réponses.
J'ai bien compris ma méprise avec Worksheets.
Néanmoins je n'ai pas ma solution. Aussi je vous propose en PJ un
exemple.
Je voudrai que ma cellule D7 de la feuille émargement (qui est une
copie de la cellule D7 de la feuille Information) me permette de
générer la liste.

http://cjoint.com/?lcrcTBlsCM

Merci pour votre aide.

JP





Avatar
jpthillard
On 2 nov, 19:16, LSteph wrote:
Bonsoir,http://cjoint.com/?lctqHlDb3V




On 2 nov, 14:30, lSteph wrote:
Bonjour,
;o) Sauf erreur d'appréciation de ma part
pourrais-je moi aussi suggérer qu'il s'agit d'un Worksheet_change et
qu'en l'occurence, même s'il est bon de faire ce rappel de la
différence entre name et codename
il paraît peu probable que Worksheet("Feuil2").[d7] convienne
et d'ailleurs pas plus que Feuil2.[d7]
car le [d7] en question pour être en intersect avec target devra
qd même d'abord selon ce contexte être sur la feuille qui contien t ce
code.

Reste qu'il serait sympa d'avoir un retour de JpTh.. et qu'il nous
précise à cette occasion ce qu'il advient des adresses des autres
plages sur quelle feuille...?§

@+

--
lSteph

On 2 nov, 13:00, "MichDenis" wrote:

| Worksheets(2).Range("D7")
| "anonymousA"
toujours à 1 ,AMC.
Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.
Pour être plus sûr, il est préférable d'utiliser le nom compl et
de l'onglet de la feuille Worksheets("Feuil2") dans son code.
Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure f açon
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25- Masquer le texte des messages préc édents -
- Afficher le texte des messages précédents -



Bonjour à tous,

merci déjà de vos réponses.
J'ai bien compris ma méprise avec Worksheets.
Néanmoins je n'ai pas ma solution. Aussi je vous propose en PJ un
exemple.
Je voudrai que ma cellule D7 de la feuille émargement (qui est une
copie de la cellule D7 de la feuille Information) me permette de
générer la liste.

http://cjoint.com/?lcrcTBlsCM

Merci pour votre aide.

JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Bonsoir et merci de la réponse LSteph,
Ce que tu me proposes, je l'avais à l'origine. Mais pour éviter de
faire un choix dans une liste déroulante dans chacune de mes feuilles
(car elles sont nombreuses) et pour limiter les sources d'erreurs,
j'aurai aimé faire ce choix seulement sur la feuille 2 et l'utiliser
pour toutes les autres. Mais la macro ne convient pas.
Comme mes compétences sont limitées en VBA je compte sur les membres
du groupes pour m'aider.
Merci encore
JP




Avatar
LSteph
Bonjour,


A lors on va enlever les Private sub des feuilles et utiliser les
évenements de Classeur donc ThisWorkbook
et un userform

L'exemple est ici:

http://cjoint.com/?ldl1pSzrTk

Voici le code:

''''''thisworkbook
Option Explicit

Private Sub Workbook_Open()
UserForm1.Show
End Sub

Private Sub Workbook_SheetChange(ByVal sh As Object, _
ByVal Target As Range)
Dim x As Long, c As Range
Select Case sh.Name
Case "Information", "Emargement"
If Not Intersect(Target, [d7]) Is Nothing And Target.Count = 1 Then
Range("C9:F49").ClearContents
Application.EnableEvents = False
x = 9
For Each c In [Classe]
If c = Target Then
Cells(x, 3) = c.Offset(, -2): Cells(x, 4) = c.Offset(, -1)
Cells(x, 5) = c.Offset(, 2)
x = x + 1
End If
Next
Application.EnableEvents = True
End If
End Select
End Sub



'''''Userform1

Private Sub CommandButton1_Click()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
Select Case sh.Name
Case "Information", "Emargement"
sh.Activate
sh.[d7] = ComboBox1
End Select
Next
Unload Me
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim c As Range, myList As New Collection, i As Integer
ComboBox1.Clear
For Each c In [Classe]
On Error Resume Next
myList.Add c, CStr(c)
On Error GoTo 0
Next c
For i = 1 To myList.Count - 1
ComboBox1.AddItem myList(i)
Next i
End Sub

'lSteph

On 2 nov, 19:16, LSteph wrote:
Bonsoir,http://cjoint.com/?lctqHlDb3V




On 2 nov, 14:30, lSteph wrote:
Bonjour,
;o) Sauf erreur d'appréciation de ma part
pourrais-je moi aussi suggérer qu'il s'agit d'un Worksheet_change et
qu'en l'occurence, même s'il est bon de faire ce rappel de la
différence entre name et codename
il paraît peu probable que Worksheet("Feuil2").[d7] convienne
et d'ailleurs pas plus que Feuil2.[d7]
car le [d7] en question pour être en intersect avec target devra
qd même d'abord selon ce contexte être sur la feuille qui contient ce
code.
Reste qu'il serait sympa d'avoir un retour de JpTh.. et qu'il nous
précise à cette occasion ce qu'il advient des adresses des autres
plages sur quelle feuille...?§
@+
--
lSteph
On 2 nov, 13:00, "MichDenis" wrote:
| Worksheets(2).Range("D7")
| "anonymousA"
toujours à 1 ,AMC.
Pourrais-je rappeler que l'index 2 dans "Worksheets(2)".
indique la position de la feuille dans un classeur. Dans ce
cas, c'est la deuxième feuille à partir de extrême gauche
de la série des onglets. Cela n'a rien à voir avec le nom
réel de la feuille.
Pour être plus sûr, il est préférable d'utiliser le nom complet
de l'onglet de la feuille Worksheets("Feuil2") dans son code.
Idéalement, désigner une feuille par la propriété "Name" de
l'objet "Feuille" visible dans l'éditeur de code est la meilleure façon
de s'assurer de l'efficacité de son code suite aux modifications
du nom de l'onglet de la feuille. Dans ce cas on utiliserais :
Feuil2.Range("D7") = 25- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -

Bonjour à tous,

merci déjà de vos réponses.
J'ai bien compris ma méprise avec Worksheets.
Néanmoins je n'ai pas ma solution. Aussi je vous propose en PJ un
exemple.
Je voudrai que ma cellule D7 de la feuille émargement (qui est une
copie de la cellule D7 de la feuille Information) me permette de
générer la liste.
http://cjoint.com/?lcrcTBlsCM
Merci pour votre aide.
JP- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -



Bonsoir et merci de la réponse LSteph,
Ce que tu me proposes, je l'avais à l'origine. Mais pour éviter de
faire un choix dans une liste déroulante dans chacune de mes feuilles
(car elles sont nombreuses) et pour limiter les sources d'erreurs,
j'aurai aimé faire ce choix seulement sur la feuille 2 et l'utiliser
pour toutes les autres. Mais la macro ne convient pas.
Comme mes compétences sont limitées en VBA je compte sur les membres
du groupes pour m'aider.
Merci encore
JP