IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Contrôler l'entrée de doublons [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Contrôler l'entrée de doublons
    Bonjour à tous,

    Avec le code suivant, l'utilisateur est averti d'un doublon lors de la saisie de nouvelle donnée dans le tableau.
    Cependant, je rencontre 2 difficultés :

    - 1 - Le contrôle sur la colonne D qui contient des numéros de téléphone ne se fait pas (format 00 00 00 00 00) et également sur la colonne C (format 00000000).

    - 2 - Dans mon code, seule la cellule sélectionnée est vidée de son contenu, hors je souhaite que la ligne entière soit vidée.

    Pouvez-vous m'aider s'il vous plait ?
    Je vous en remercie par avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim vCol As Integer
    Dim vRéponse As Integer
    Dim vCellule As Object
    'Vérifie si une cellule a été modifiée
        If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        vCol = Target.Column
        '1=64
        'compte jusqu'à 4 colonnes après 1
            If vCol = 1 Or vCol = 5 Then
                For Each vCellule In Range(Chr(vCol + 64) & ":" & Chr(vCol + 64))
        'vérifie si la donnée a déjà été introduite
                If LCase(vCellule.Value) = LCase(Target.Value) And vCellule.Address <> Target.Address Then
            vRéponse = MsgBox("Cette donnée a déjà été introduite dans la colonne." & Chr(10) & "Voulez-vous la laisser ?", vbYesNo + vbInformation, "Attention")
                If vRéponse = vbNo Then
                Range(Target.Address).Select
        'si réponse = non - alors on efface le contenu de la cellule
                Selection.ClearContents
                End If
                    Exit Sub
                End If
        ''vérifie si la ligne est la dernière
                If vCellule.Row > ActiveCell.SpecialCells(xlLastCell).Row Then Exit Sub
                Next
            End If
    End Sub

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Pour ton problème 1, il faudrait que je regarde d'un peu plus près, par contre pour le problème 2, il te suffit d'indiquer que tu veux effacer les données de la ligne correspondant à ta sélection, donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'si réponse = non - alors on efface le contenu de la cellule
                Selection.EntireRow.ClearContents

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    Merci pour ce problème, ça marche (j'aurai pu y penser seul, mais souvent on cherche compliqué).

    Pour le 2ème, la saisie se fait sous ce format 0000000000 pour la colonne D qui se modifie en 00 00 00 00 00 lors de la validation.
    merci par avance

    Je vous met un exemple ci-joint

    En saisissant le même numéro de téléphone ou d'abonné rien ne se passe, alors que si vous saississez "TOTOR" l'alerte se déclanche.

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour NEC14 Fvandermeulen le forum peut etre comme cela a adapter
    Option Explicit
    Option Compare Text'pas de difference recherche minu..& maj....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As Integer, Adresse As String, rep As String
     On Error Resume Next
     If Target.Value = "" Then Exit Sub
     Col = Target.Column
     If Target.Column = 1 Or Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Or Target.Column = 5 Then ' adapter
    Adresse = Columns(Col).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookIn:=xlValues, LookAt:=xlWhole, _
    SearchDirection:=xlNext).Address
    If Adresse <> Target.Address Then
    rep = MsgBox("La donnée '" & Target & "' existe déjà dans la cellule   " & Adresse & "  Voulez-vous la laisser ?", vbYesNo + vbInformation, "Attention")
    If rep = vbNo Then Target.EntireRow.ClearContents
    End If: End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/12/2012, 13h30
  2. [MySQL] Entrée en doublon dans une table
    Par vince4sx dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/12/2010, 17h00
  3. Dénombrer nb d'entrée sans doublon
    Par CHAREN dans le forum Excel
    Réponses: 4
    Dernier message: 16/02/2010, 10h50
  4. Contrôler les entrées utilisateur
    Par dimi2 dans le forum Pascal
    Réponses: 8
    Dernier message: 16/03/2008, 22h50
  5. Formulaire - contrôler une entrée
    Par psykbe dans le forum IHM
    Réponses: 2
    Dernier message: 07/10/2007, 20h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo