Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 09h05   #1
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Par défaut interdire saisie doublon sur une colonne

Bonjour le forum,

J'essaye d'améliorer ce code afin d’empêcher la saisie de doublon ligne par ligne sur la première colonne seulement :

colonne D : Durand
colonne E : Dubois
Colonne F : Dubois

Je souhaite que ligne par ligne, un doublon avec la premiere colonne ne soit pas possible, mais sur les colonnes suivantes oui.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'Pas de doublons sur chaque ligne des colonne de D à G
Private Sub Worksheet_Change(ByVal Target As Range)
 
If Target.Count = 1 Then
    If Target.Value <> "" Then
        If Application.CountIf(Intersect(Target.EntireRow, Range("D:G")), Target.Value) > 1 Then
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
            MsgBox "Doublons effacé"
        End If
    End If
End If
End Sub
Merci beaucoup pour votre aide!!!
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h15   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Bonjour,

Essais comme cela

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
 
If Target.Count = 1 Then
 
    If Application.WorksheetFunction.CountIf(Columns(Target.Column), Target.Value) > 1 Then
        MsgBox "Doublon"
        Target.Select
        Target.Value = ""
    End If
 
End If
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h43   #3
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Merci pour cette réponse rapide.

Mais ça ne marche pas
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h53   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Et comme cela

Code :
If Application.WorksheetFunction.CountIf(Range("A:A"), Target.Value) >= 1 Then
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h25   #5
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
La il me sort doublon dès que je rentre quelque chose dans ma colonne!

Merci encore!

En fait mon premier code marche très bien sauf qu'il me sort doublon des que j'ai un nom en double sur la ligne quelque soit la colonne
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h38   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
En effet, il ne faut pas que le code s'execute si saisie dans la colonne 1 (Voir si tu veux tester le doublons lors de la saisie dans cette colonne)
Code :
1
2
3
4
5
6
7
8
9
If Target.Count = 1 And Target.Column > 1 Then

    If Application.WorksheetFunction.CountIf(Range("A:A"), Target.Value) = 1 Then
        MsgBox "Doublon"
        Target.Select
        Target.Value = ""
    End If

End If
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h43   #7
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Pas de changement avec ca...
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h50   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Je ne comprend pas ce que tu souhaites, peux tu dire clairement ou tu saisies et ou il faut vérifier la saisie
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 10h56   #9
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Ok, merci pour ta patience

Je choisis dans une liste le nom d'un formateur en colonne AB.
Sur la même ligne, je choisis à plusieurs reprises des testeurs (colonne AD, AF, AJ,etc...) qui peuvent être la même personne. Cependant, un formateur ne peut pas être à la fois formateur et testeur. Et donc, si un un formateur est choisi, si on sélectionne ensuite son nom pour être testeur, je souhaite qu'excel bloque et renvoi "déjà formateur". Et inversement (au cas ou on choisi le testeur avant le formateur).

J'espère que c'est plus clair, c'est pas toujours facile d'expliquer sur un forum! MErci beaucoup!
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 11h08   #10
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
oui c'est plus clair. Il faut compter sur la même ligne

Code :
1
2
3
4
5
6
7
8
9
If Target.Count = 1 Then
 
    If Application.WorksheetFunction.CountIf(Range("A" & Target.Row & ":D" & Target.Row), Target.Value) > 1 Then
        MsgBox "Doublon"
        Target.Select
        Target.Value = ""
    End If
 
End If
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 11h31   #11
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Alors ça marche bien (c'est une alternative au code que j'ai mis dans mon premier post en fait) mais mon problème est toujours le même : je veux pouvoir choisir un testeur plusieurs fois, je souhaite que le doublon ne soit pas possible seulement sur la première colonne. Par exemple :

Colonne A : Durand
Colonne B : Dubois
Colonne C : Dubois
Colonne D : Durand --> Doublon

Merci
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 12h02   #12
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
On va y arriver

On test uniquement si la colonne est après la colonne 1 (ici A)
Code :
1
2
3
4
5
6
7
8
9
If Target.Count = 1 And Target.Column > 1 Then
 
    If Target.Value = Range("A" & Target.Row).Value Then
        MsgBox "Doublon"
        Target.Select
        Target.Value = ""
    End If
 
End If
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 12h09   #13
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
J'espère qu'on va y arriver , je m'en retourne à ton aide précieuse!

Avec ce code il reste bloqué sur le msgbox doublon des que je choisi un formateur alors même qu'il n'y a rien d'autre sur la ligne...
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 13h19   #14
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Affiches ton code, car pas ce problème chez moi
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 13h31   #15
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Sans rapport avec "le constat" de borisp.
Pour ne pas bloquer le fichier dans le cas suivant:

Cellule A2 remplie avec XXX, Cellule B2 YYY
J'efface A2, puis j'efface B2-> Crash
Il faudrait ajouter une condition Aussi la désactivation des événements est nécessaire
Code :
1
2
3
Application.EnableEvents = False
'Code qui change des cellules
Application.EnableEvents = True
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 14h13   #16
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
Avec ce code, renvoi doublon des que je saisi dans la colonne AB, quelque soit le reste du contenu du reste de ma ligne:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
If Target.Count = 1 And Target.Column > 1 Then
 If Target.Value <> "" Then
    If Target.Value = Range("AB" & Target.Row).Value Then
    Application.EnableEvents = False
        MsgBox "Un collaborateur ne peut pas être formateur et testeur"
        Application.EnableEvents = True
        Target.Select
        Target.Value = ""
    End If
 End If
 
End If
Avec ce code, renvoi doublon et bloque sur le msgbox des que je saisi en colonne AB, quelque soit le contenu du reste de ma ligne :

Code :
1
2
3
4
5
6
7
8
9
If Target.Count = 1 And Target.Column > 1 Then
    If Target.Value = Range("AB" & Target.Row).Value Then
        MsgBox "Un collaborateur ne peut pas être formateur et testeur"
        Target.Select
        Target.Value = ""
    End If
 End If
 
End If
Merci à vous deux!
borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 14h25   #17
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 901
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 901
Points : 7 188
Points : 7 188
Le correspond à la colonne de saisie du formateur. Dans ton cas, il faut écrire 28
ou
Code :
Target.Column > Range("AB:AB").Column
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 14h39   #18
Candidat au titre de Membre du Club
 
Homme Boris
Étudiant
Inscription : août 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 53
Points : 13
Points : 13
YES Merci mille fois, je débute en vba, je ne savais pas qu'il fallait mettre le numéro de ma colonne à la place de 1!

Ca marche bien, mais par contre excel ne relève pas de doublon si je saisi d'abord en colonne AD (choisi d'abord le testeur) et reviens en arrière en AB pour choisir le formateur. Si il y a un moyen je suis preneur, mais là c'est déjà top!

borisp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h51.


 
 
 
 
Partenaires

Hébergement Web