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

Renvoyer l'en-tête de colonne dans un msgbox

  • Initiateur de la discussion Initiateur de la discussion Membre supprimé 103233
  • 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 !

M

Membre supprimé 103233

Guest
Bonjour,

dans l'exemple joint, je souhaite afficher l'en-tête de colonne dans un msgbox d'une valeur "doublon".

Le fichier est plus parlant et contient la macro trouvée sur le forum, mais à compléter. Je ne sais pas le faire, car un vrai débutant.

Quelqu'un pourrait-il m'aider s'il vous plaît ?

Merci.
 

Pièces jointes

Dernière modification par un modérateur:
Re : Renvoyer l'en-tête de colonne dans un msgbox

bonjour Sora3046 et bienvenue sur le forum,

essaye avec ce code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountIf(Range("G2:BQ2"), Target) > 1 Then
    [B]Set cellFind = Range("G2:BQ2").Find(Target, , , xlWhole)
    While cellFind.Address = Target.Address
        Set cellFind = Range("G2:BQ2").FindNext(cellFind)
    Wend[/B]
     MsgBox "Cette personne a déjà une autre participation [B](colonne """ & Cells(1, cellFind.Column).Text & """)[/B] ! Vérifie ta saisie !", vbCritical, "Saisie à double !"
End If
End Sub
a+
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bonjour Sora3046, bienvenue sur XLD,

La macro modifiée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ad As String
[COLOR="Red"]If Intersect(Target, Range("G2:BQ2")) Is Nothing Then Exit Sub[/COLOR]
ad = Range("G2:BQ2").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole).Address
If Target <> "" And Target.Address <> ad Then
  Target.Select
  MsgBox Target & " se trouve déjà en colonne " & Split(ad, "$")(1) & " !", vbCritical, "Saisie à double !"
End If
End Sub

Edit 1 : salut mromain 🙂

Edit 2 : ajouté le test en rouge

A+
 
Dernière édition:
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bienvenue Sora sur le forum,
Voici les quelques lignes de code à changer

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "" Then Exit Sub
For Each c In Range("G2:BQ2")
If c.Address <> Target.Address Then
If Target = c.Value Then
MsgBox "Cette personne a déjà une autre participation en " & Cells(1, c.Column) _
& vbCr & "Vérifie ta saisie !", vbCritical, "Saisie à double !"
Target.Select: Exit Sub
End If
End If
Next
End Sub
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Re et salut youky,

J'avais pris l'en-tête de colonne au pied de la lettre... Une autre manière :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G2:BQ2")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G2:BQ2").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
  Target.Select
  MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! Vérifie ta saisie !", vbCritical, "Saisie à double !"
End If
End Sub

A+
 
RESOLU: Renvoyer l'en-tête de colonne dans un msgbox

Bonjour à tous,

merci de votre aide si rapide.

J'ai testé vos différentes méthode et je retiens celle de Job75 (la dernière) qui fait exactement ce je souhaitais.

Merci beaucoup.
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Rebonjour à tous,

J'ai utilisé la macro de Job75 telle qu'écrite ci-dessus: ça fonctionne.

MAIS...

si je copie cette macro pour que le test se fasse sur chaque ligne individuellement, plus rien de ne fonctionne. Que fais-je de faux ?

Exemple ici de ce que j'ai fait (pour 3 lignes seulement, mais le fichier en contient 52 - pour les 52 semaines de l'année):

Private Sub Worksheet_Change2(ByVal Target As Range)
If Intersect(Target, Range("G2:BQ2")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G2:BQ2").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub

Private Sub Worksheet_Change3(ByVal Target As Range)
If Intersect(Target, Range("G3:BQ3")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G3:BQ3").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub

Private Sub Worksheet_Change4(ByVal Target As Range)
If Intersect(Target, Range("G4:BQ4")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G4:BQ4").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub

Merci de votre aide et soutien.

Belle journée.
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bonjour,

j'ai appliqué la méthode de Job75 qui fonctionne, mais lorsque je l'applique à plusieurs lignes (52 pour les 52 semaines de l'année), cela ne fonctionne plus.

J'ai copié-collé la macro et l'ai renommée pour chaque ligne dont je souhaitais un test de doublon lors de la saisie. Le chiffre après la macro correspond aussi à la ligne à tester.

Que fais-je de faux ?

Voici un extrait du code (qui est recopié 52 fois pour les 52 lignes individuelles à tester indépendamment les unes des autres).

****
Private Sub Worksheet_Change2(ByVal Target As Range)
If Intersect(Target, Range("G2:BQ2")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G2:BQ2").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub

Private Sub Worksheet_Change3(ByVal Target As Range)
If Intersect(Target, Range("G3:BQ3")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G3:BQ3").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub

Private Sub Worksheet_Change4(ByVal Target As Range)
If Intersect(Target, Range("G4:BQ4")) Is Nothing Then Exit Sub
Dim ref As Range
Set ref = Range("G4:BQ4").Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Address <> ref.Address Then
Target.Select
MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! " & vbCrLf & " " & vbCrLf & "Merci d'éviter de mettre plusieurs participations par frère le même soir. " & vbCrLf & " " & vbCrLf & "Vérifie ta saisie et corriges-là si nécessaire !", vbCritical, "Saisie à double !"
End If
End Sub
*********

Merci de votre aide !
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bonjour,
Private Sub Worksheet_Change2
Cette procédure n'existe pas
Au plus simple
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountIf(Range(Cells(Target.Row, 7), Cells(Target.Row, 69)), Target) > 1 Then
     MsgBox "Cette personne a déjà une autre participation ! Vérifie ta saisie !", vbCritical, "Saisie à double !"
     Target.ClearContents
End If
End Sub
A+
kjin
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bonjour,

merci, ça fonctionne, mais est-ce néanmoins possible de récupérer la fonction qui me renvoyait sur la cellule du doublon et me citait l'en-tête de colonne ?

Merci de votre aide.
 
Re : Renvoyer l'en-tête de colonne dans un msgbox

Bonjour le fil, le forum,

De retour d'une belle petite balade...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G2:BQ53")) Is Nothing Or Target.Count > 1 Then Exit Sub
Dim ref As Range
Set ref = Range("G" & Target.Row).Resize(, 63).Find(Target, After:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Target <> "" And Target.Column <> ref.Column Then
  Target.Select
  MsgBox Target & " a déjà une autre participation: " & Cells(1, ref.Column) & " ! Vérifie ta saisie !", vbCritical, "Saisie à double !"
End If
End Sub

A noter que j'avais oublié le test Target.Count > 1...

A+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…