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

VBA Référence relative à une cellule

6 réponses
Avatar
Céline Brien
Bonjour à toutes et à tous,
Dans une macro je réfère à une cellule pour vérifier si elle est vide.
Disons M7.
Si l'utilisateur ajoute une colonne à gauche de cette colonne, ma macro
ne réfère plus à la bonne cellule.
Voici la solution à laquelle j'ai pensé :
Nommer la cellule M1, la cellule contenant le titre de la colonne M.
Dans ma macro, référer à cette cellule nommée et décaler vers le bas de
6 cellules.
Qu'en pensez-vous ? Quels seraient les codes ?
Avez-vous une autre solution à me proposer ?
Merci de votre aide précieuse,
Céline

6 réponses

Avatar
AV
Faudrait voir ta macro mais si la cellule dont tu te sers dans la macro est
désignée sous la forme d'un nom et non en "dur", il n'y a pas de soucis avec
l'insertion de lignes ou colonnes pour la "retrouver" (si on fait référence à
son nom)

AV
Avatar
Céline Brien
Salut tout le monde,
Salut Alain,
Merci pour ta réponse.
Tu trouveras ci-dessous les codes de ma macro et des explications
supplémentaires.
Merci de ton aide
Céline
---------------------------------------------------------------
Il s'agit d'une liste de données.
Lorsqu'une nouvelle ligne de données est insérée, la cellule M7 doit
absolument être complétée car un tableau croisé dynamique effectue un
Grouper par année sur les dates que contient la colonne M.
Les utilisateurs fermaient parfois le fichier sans avoir inscrit la date
dans la cellule M7 et à l'ouverture, lors de la mise à jour du tableau
croisé dynamique, la colonne groupant par année ne groupait plus.
Donc j'ai ajouté des codes interdisant de fermer le fichier tant que la
cellule M7 n'est pas complétée.
Sauf que si des colonnes sont ajoutées à gauche de la colonne M, ma
macro ne pointe plus sur la bonne cellule.
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Data").Range("M7") = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer le classeur."
& vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter la ligne
insérée"
End If
If Sheets("Data").Range("M7") > 0 Then
SupprimeBarreMenu
End If
End Sub


"AV" a écrit dans le message de
news:%23%
Faudrait voir ta macro mais si la cellule dont tu te sers dans la
macro est

désignée sous la forme d'un nom et non en "dur", il n'y a pas de
soucis avec

l'insertion de lignes ou colonnes pour la "retrouver" (si on fait
référence à

son nom)

AV




Avatar
AV
Et en nommant, comme je te l'ai suggéré, la cellule M7 ?
Tu pourras tester son contenu quelles que soient les manips d'insertion de
lignes/colonnes
Ex : If Sheets("Data").Range("maCellule") = 0 Then...blabla
ou encore (pour récupérer sa ligne) :
MsgBox "Veuillez compléter la ligne " & Range("maCellule").Row & " avant de
fermer le classeur."

AV

"Céline Brien" a écrit dans le message news:

Salut tout le monde,
Salut Alain,
Merci pour ta réponse.
Tu trouveras ci-dessous les codes de ma macro et des explications
supplémentaires.
Merci de ton aide
Céline
---------------------------------------------------------------
Il s'agit d'une liste de données.
Lorsqu'une nouvelle ligne de données est insérée, la cellule M7 doit
absolument être complétée car un tableau croisé dynamique effectue un
Grouper par année sur les dates que contient la colonne M.
Les utilisateurs fermaient parfois le fichier sans avoir inscrit la date
dans la cellule M7 et à l'ouverture, lors de la mise à jour du tableau
croisé dynamique, la colonne groupant par année ne groupait plus.
Donc j'ai ajouté des codes interdisant de fermer le fichier tant que la
cellule M7 n'est pas complétée.
Sauf que si des colonnes sont ajoutées à gauche de la colonne M, ma
macro ne pointe plus sur la bonne cellule.
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Data").Range("M7") = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer le classeur."
& vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter la ligne
insérée"
End If
If Sheets("Data").Range("M7") > 0 Then
SupprimeBarreMenu
End If
End Sub


"AV" a écrit dans le message de
news:%23%
Faudrait voir ta macro mais si la cellule dont tu te sers dans la
macro est

désignée sous la forme d'un nom et non en "dur", il n'y a pas de
soucis avec

l'insertion de lignes ou colonnes pour la "retrouver" (si on fait
référence à

son nom)

AV







Avatar
Céline Brien
Bonjour à tous,
Salut Alain,
Merci beaucoup pour ta réponse, mais je n'obtiens pas le résultat
souhaité.
Si la celllule M7 est nommée MaCellule, lors de l'insertion d'une ligne
en ligne 7, le champ nommé MaCellule ne réfère plus à $M$7 mais à $M$8.
C'est normal ?
Par contre si MaCellue réfère à la celllule M1, l'insertion de lignes
n'a pas d'influence et, lors de l'insertion d'une colonneà gauche de la
colonne M, $M$1 devient $N$1.
C'est pourquoi je pensais référer à $M$1 et 6 cellules vers le bas.
Est-ce possible ?
Merci de ton aide,
Céline

"AV" a écrit dans le message de
news:%
Et en nommant, comme je te l'ai suggéré, la cellule M7 ?
Tu pourras tester son contenu quelles que soient les manips
d'insertion de

lignes/colonnes
Ex : If Sheets("Data").Range("maCellule") = 0 Then...blabla
ou encore (pour récupérer sa ligne) :
MsgBox "Veuillez compléter la ligne " & Range("maCellule").Row & "
avant de

fermer le classeur."

AV

"Céline Brien" a écrit dans le message
news:


Salut tout le monde,
Salut Alain,
Merci pour ta réponse.
Tu trouveras ci-dessous les codes de ma macro et des explications
supplémentaires.
Merci de ton aide
Céline
---------------------------------------------------------------
Il s'agit d'une liste de données.
Lorsqu'une nouvelle ligne de données est insérée, la cellule M7 doit
absolument être complétée car un tableau croisé dynamique effectue
un


Grouper par année sur les dates que contient la colonne M.
Les utilisateurs fermaient parfois le fichier sans avoir inscrit la
date


dans la cellule M7 et à l'ouverture, lors de la mise à jour du
tableau


croisé dynamique, la colonne groupant par année ne groupait plus.
Donc j'ai ajouté des codes interdisant de fermer le fichier tant que
la


cellule M7 n'est pas complétée.
Sauf que si des colonnes sont ajoutées à gauche de la colonne M, ma
macro ne pointe plus sur la bonne cellule.
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Data").Range("M7") = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer le
classeur."


& vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter la ligne
insérée"
End If
If Sheets("Data").Range("M7") > 0 Then
SupprimeBarreMenu
End If
End Sub


"AV" a écrit dans le message de
news:%23%
Faudrait voir ta macro mais si la cellule dont tu te sers dans la
macro est

désignée sous la forme d'un nom et non en "dur", il n'y a pas de
soucis avec

l'insertion de lignes ou colonnes pour la "retrouver" (si on fait
référence à

son nom)

AV











Avatar
Paul V.
Bonjour,

Je ne pense pas avoir tout compris. ;-)

Mais tu devrais y arriver en nommant M1 et en utilisant l'instruction Offset
pour accéder à ta cellule de la même colonne en rang 7.

HTH

Paul V

Céline Brien wrote:
Bonjour à tous,
Salut Alain,
Merci beaucoup pour ta réponse, mais je n'obtiens pas le résultat
souhaité.
Si la celllule M7 est nommée MaCellule, lors de l'insertion d'une
ligne en ligne 7, le champ nommé MaCellule ne réfère plus à $M$7 mais
à $M$8. C'est normal ?
Par contre si MaCellue réfère à la celllule M1, l'insertion de lignes
n'a pas d'influence et, lors de l'insertion d'une colonneà gauche de
la colonne M, $M$1 devient $N$1.
C'est pourquoi je pensais référer à $M$1 et 6 cellules vers le bas.
Est-ce possible ?
Merci de ton aide,
Céline

"AV" a écrit dans le message de
news:%
Et en nommant, comme je te l'ai suggéré, la cellule M7 ?
Tu pourras tester son contenu quelles que soient les manips
d'insertion de lignes/colonnes
Ex : If Sheets("Data").Range("maCellule") = 0 Then...blabla
ou encore (pour récupérer sa ligne) :
MsgBox "Veuillez compléter la ligne " & Range("maCellule").Row & "
avant de fermer le classeur."

AV

"Céline Brien" a écrit dans le
message news:
Salut tout le monde,
Salut Alain,
Merci pour ta réponse.
Tu trouveras ci-dessous les codes de ma macro et des explications
supplémentaires.
Merci de ton aide
Céline
---------------------------------------------------------------
Il s'agit d'une liste de données.
Lorsqu'une nouvelle ligne de données est insérée, la cellule M7 doit
absolument être complétée car un tableau croisé dynamique effectue
un Grouper par année sur les dates que contient la colonne M.
Les utilisateurs fermaient parfois le fichier sans avoir inscrit la
date dans la cellule M7 et à l'ouverture, lors de la mise à jour du
tableau croisé dynamique, la colonne groupant par année ne groupait
plus. Donc j'ai ajouté des codes interdisant de fermer le fichier
tant que la cellule M7 n'est pas complétée.
Sauf que si des colonnes sont ajoutées à gauche de la colonne M, ma
macro ne pointe plus sur la bonne cellule.
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Data").Range("M7") = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer le
classeur." & vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter la ligne
insérée"
End If
If Sheets("Data").Range("M7") > 0 Then
SupprimeBarreMenu
End If
End Sub


"AV" a écrit dans le message de
news:%23%
Faudrait voir ta macro mais si la cellule dont tu te sers dans la
macro est désignée sous la forme d'un nom et non en "dur", il n'y
a pas de soucis avec l'insertion de lignes ou colonnes pour la
"retrouver" (si on fait référence à son nom)

AV








Avatar
Céline Brien
Bonjour à toutes et à tous,
Bonjour Paul,
Merci pour ta réponse.
J'ai réussi à régler mon problème (voir codes ci-dessous).
Merci de m'avoir mis sur la piste avec la fonction Offset.
Bonne fin de semaine à tous,
Céline
------------------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("CelluleACompleter").Activate
ActiveCell.Offset(rowOffset:=6).Activate
If ActiveCell = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer
le classeur." & vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter
la ligne insérée"
End If
Range("CelluleACompleter").Activate
ActiveCell.Offset(rowOffset:=6).Activate
If ActiveCell > 0 Then
SupprimeBarreMenu
End If
End Sub

"Paul V." a écrit dans le message de
news:
Bonjour,

Je ne pense pas avoir tout compris. ;-)

Mais tu devrais y arriver en nommant M1 et en utilisant l'instruction
Offset

pour accéder à ta cellule de la même colonne en rang 7.

HTH

Paul V

Céline Brien wrote:
Bonjour à tous,
Salut Alain,
Merci beaucoup pour ta réponse, mais je n'obtiens pas le résultat
souhaité.
Si la celllule M7 est nommée MaCellule, lors de l'insertion d'une
ligne en ligne 7, le champ nommé MaCellule ne réfère plus à $M$7
mais


à $M$8. C'est normal ?
Par contre si MaCellue réfère à la celllule M1, l'insertion de
lignes


n'a pas d'influence et, lors de l'insertion d'une colonneà gauche de
la colonne M, $M$1 devient $N$1.
C'est pourquoi je pensais référer à $M$1 et 6 cellules vers le bas.
Est-ce possible ?
Merci de ton aide,
Céline

"AV" a écrit dans le message de
news:%
Et en nommant, comme je te l'ai suggéré, la cellule M7 ?
Tu pourras tester son contenu quelles que soient les manips
d'insertion de lignes/colonnes
Ex : If Sheets("Data").Range("maCellule") = 0 Then...blabla
ou encore (pour récupérer sa ligne) :
MsgBox "Veuillez compléter la ligne " & Range("maCellule").Row & "
avant de fermer le classeur."

AV

"Céline Brien" a écrit dans le
message news:
Salut tout le monde,
Salut Alain,
Merci pour ta réponse.
Tu trouveras ci-dessous les codes de ma macro et des explications
supplémentaires.
Merci de ton aide
Céline
---------------------------------------------------------------
Il s'agit d'une liste de données.
Lorsqu'une nouvelle ligne de données est insérée, la cellule M7
doit




absolument être complétée car un tableau croisé dynamique effectue
un Grouper par année sur les dates que contient la colonne M.
Les utilisateurs fermaient parfois le fichier sans avoir inscrit
la




date dans la cellule M7 et à l'ouverture, lors de la mise à jour
du




tableau croisé dynamique, la colonne groupant par année ne
groupait




plus. Donc j'ai ajouté des codes interdisant de fermer le fichier
tant que la cellule M7 n'est pas complétée.
Sauf que si des colonnes sont ajoutées à gauche de la colonne M,
ma




macro ne pointe plus sur la bonne cellule.
---------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Data").Range("M7") = 0 Then
Cancel = True
Msg = "Bonjour !" & vbLf
Msg = Msg & "Veuillez compléter la ligne 7 avant de fermer le
classeur." & vbLf
Msg = Msg & "Merci !"
MsgBox Msg, vbInformatin, "Macro pour rappeler de compléter la
ligne




insérée"
End If
If Sheets("Data").Range("M7") > 0 Then
SupprimeBarreMenu
End If
End Sub


"AV" a écrit dans le message de
news:%23%
Faudrait voir ta macro mais si la cellule dont tu te sers dans la
macro est désignée sous la forme d'un nom et non en "dur", il n'y
a pas de soucis avec l'insertion de lignes ou colonnes pour la
"retrouver" (si on fait référence à son nom)

AV