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 :

Signalisé Doublons par code vba excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut Signalisé Doublons par code vba excel
    Bonsoir ! je me demandais si il étais possible d'avoir un programme qui permet à ma feuille de refuser un double de donnée si celui-ci existe déjà. par un code vba qui s'exécute automatiquement. j'ai essayé la procédure excel des doublons mais ça marche pas vraiment.
    Merci ! bonne soirée.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    j'ai essayé la procédure excel des doublons mais ça marche pas vraiment.
    Laquelle?

    Sinon, pour éviter la saisie d'une donnée en double en colonne A, ci-après code à mettre dans le module de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column = 1 And Target.Count = 1 Then
        If Application.CountIf(Range("A:A"), Target.Value) > 1 Then Application.Undo
    End If
    End Sub

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    bonsoir ! merci, je viens de l’essayer, . le code à l'air d'être le bon juste à la fin il se plante , disant il ya un code d'erreur .

    dans mon userform j'ai taper dans ma zone de texte le même mot étant dans la feuille. juste à la dernière lettre apparaît un code d'erreur qui me demande " un débogage ou d'y mettre fin".

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Et ce message d'erreur , qu'attends tu pour le lire t le copier ici ?

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    Erreur d'exécution '1004':

    La méthode 'Undo' de l'objet'_Application' a échoué

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans ton post #1, tu n'as pas parlé de ton userform.

    Sinon, dans le bouton de validation des données inscrites dans les contrôles de ton userform, et avant de les rapatrier sur ta feuille, mets un test de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click() 'bouton de validation
     
    With Worksheets("Feuil1")
        If Application.CountIf(.Range("A:A"), Me.TextBox1.Value) > 0 Then
            MsgBox Me.TextBox1 & " existe déjà dans la colonne A de la feuille Feuil1"
        Else
            .Cells(.Rows.Count, 1).End(xlUp)(2) = Me.TextBox1
        End If
    End With
    End Sub

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    Bonsoir ! je l'ai associé à ce code elle marche quasiment bien, juste que quand j'insert un mail qui n'existe pas dans ma feuille il répète comme même le message "existe déjà dans la colonne A de la feuille "*.* "

    est il possible par ce code d'éssayé de voir ou conviendrait que je mettes le code pour quelle marche bien.

    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
     
    Private Sub Ajout1_Click()
    If Not (isMailPerso(UserForm1.TextBox1.Text)) Then
           Call MsgBox("Ceci est un destinataire Professionnel" & Chr(10) & _
                       "Veuillez saisir l'adresse mail dans la rubrique appropriée", vbExclamation + vbOKOnly)
           Exit Sub
        End If
    'teste si un texte a été entré, si non, le programme averti l'utilisateur et s'arrête
    If UserForm1.TextBox1.Text = "" Then
      MsgBox "Vous n'avez rien saisi;" & Chr(10) & "Veillez entrer un mail! "
      Exit Sub
                       End If
    For i = 1 To 10000
    If Cells(i, 1) = "" Then Exit For
    Next
    'insertion de la valeur de la zone de texte (textbox1 représentant le nom de la zone de texte)
    Cells(i, 1) = TextBox1.Text
    MsgBox "Enregistrement de l'adresse Mail créé avec succès"
    End Sub
    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
     
    Private Sub Ajout2_Click()
    If (isMailPerso(UserForm1.TextBox2.Text)) Then
           Call MsgBox("Ceci est un destinataire NON professionnel" & Chr(10) & _
                       "Veuillez saisir l'adresse mail dans la rubrique appropriée", vbExclamation + vbOKOnly)
           Exit Sub
        End If
    'teste si un texte a été entré, si non, le programme averti l'utilisateur et s'arrête
                   If UserForm1.TextBox2.Text = "" Then
                            MsgBox "Vous n'avez rien saisi;" & Chr(10) & "Veillez entrer un mail! "
                        Exit Sub
                       End If
    For i = 1 To 10000
    If Cells(i, 1) = "" Then Exit For
    Next
     
    'insertion de la valeur de la zone de texte (textbox1 représentant le nom de la zone de texte)
    Cells(i, 1) = TextBox2.Text
    MsgBox "Enregistrement de l'adresse Mail créé avec succès"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CommandButton1_Click()
    Unload Me
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub TextBox1_Change()
    Sheets("Mail Personnel").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = TextBox1
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub TextBox2_Change()
    Sheets("Mail Professionel").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = TextBox2
    End Sub
    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
     
    Function isMailPerso(destinataire As String) As Boolean
        Dim ISPPerso() As String
        ISPPerso = Split("yahoo;gmail;hotmail;live;voila;laposte;aol;bouygtel;crocomail;caramail", ";")
     
        isMailPerso = False
        Dim i As Integer
        For i = 0 To UBound(ISPPerso)
            If InStr(1, LCase(destinataire), "@" & ISPPerso(i)) > 0 Then
                isMailPerso = True
                Exit For
            End If
        Next i
     
    End Function

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je ferai comme ceci

    Je supprime les code TextBox1_Change et TextBox2_Change
    Je ferai une seule procédure de transfert
    J'ai modifié la procédure isMailPerso
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Option Explicit
     
    Private Sub Ajout1_Click()
     
    Transfere Me.TextBox1.Text, True
    End Sub
     
    Private Sub Ajout2_Click()
     
    Transfere Me.TextBox2.Text, False
    End Sub
     
    'Perso=True: mail personnel, Perso=False: Mail professionnel
    Private Sub Transfere(ByVal LeMail As String, ByVal Perso As Boolean)
    Dim NomFeuille As String, Tpe As String
     
     
    NomFeuille = IIf(Perso, "Mail Personnel", "Mail Professionnel")
    Tpe = IIf(Perso, "Professionnel", "Personnel")
    If LeMail <> "" Then
        If isMailPerso(LeMail) = Perso Then
            With Worksheets("Mail " & Tpe)
                If Nouveau(.Name, LeMail) Then
                    'insertion de la valeur de la zone de texte (textbox1 représentant le nom de la zone de texte)
                    .Cells(.Rows.Count, 1).End(xlUp)(2) = LeMail
                    MsgBox "Enregistrement de l'adresse Mail créé avec succès"
                Else
                    MsgBox "Destinataire existe déjà"
     
                End If
            End With
        Else
            MsgBox "Ceci est un destinataire " & Tpe & Chr(10) & "Veuillez saisir l'adresse mail dans la rubrique appropriée", vbExclamation + vbOKOnly
        End If
    Else
        MsgBox "Vous n'avez rien saisi;" & Chr(10) & "Veillez entrer un mail! "
    End If
    End Sub
     
    Private Function isMailPerso(ByVal Dest As String) As Boolean
    Dim ISPPerso As String
    Dim i As Integer
     
    ISPPerso = ";yahoo;gmail;hotmail;live;voila;laposte;aol;bouygtel;crocomail;caramail;" 'le ; à la fin est nécessaire
    Dest = Mid(Dest, InStr(Dest, "@") + 1)
    Dest = Left(Dest, InStr(Dest, ".") - 1)
     
    isMailPerso = InStr(ISPPerso, ";" & Dest & ";") > 0
    End Function
     
    Private Function Nouveau(ByVal ShName As String, ByVal Dest As String) As Boolean
     
    Nouveau = Application.CountIf(Worksheets(ShName).Range("A:A"), Dest) = 0
    End Function

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    Bonjour ! merci, j'aimerai garder l'utilisation des deux zone de texte. Mais ce que vous venez de me proposer est très intéressant. y a-t-il un moyen d'adapter le code pour les doublons à mes deux zones de texte .
    bonne fin de journée

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu essayé le code proposé.
    Il fait la même chose pour les données des 2 feuilles

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    Bonjour ! excuse moi si j'ai mis du temps à te répondre, je viens de l'essayer.
    il y'a certain point qui fonctionne notamment.
    - reconnaissance des adresses mails personnelles et des adresses mails
    professionnelles.
    - quand je clic sur la commande d'enregistrement il me dit que
    l'enregistrement de l'adresse à été effectuer avec succès en regardant
    sur la feuille je vois aucune adresse nouvelle entrée.


    ces point ci ne fonctionne pas:
    - l'ajout sur la feuille des adresses mails en actionnant le bouton spécifié.
    - doublon ( quand j'ajoute les mails identique il ya aucun message qui me
    signale le mail entrer existe déjà sur la feuille.


    Bon voilà , je vous souhaite une bonne journée. merci

  12. #12
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu supprimé les codes TextBox1_Change et TextBox2_Change

    L'enregistrement du nouveau mail se fait sur la dernière cellule vide de la colonne A en partant du bas.

    Voilà, le code a été testé avec succès sur mon classeur que j'ai crée pour tester.

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    ok je me remet au travail, est il possible de m'envoyer ton classeur histoire de voir comment ça fonctionne chez toi, si possible merci.

  14. #14
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je ne l'ai plus le classeur

    Construis en un avec:
    1 feuille appelée Mail Professionnel
    1 feuille appelée Mail Personnel
    1 userform contenant:
    2 TextBox, TextBox1 et TextBox2
    2 Bouton, nommés Ajout1 et Ajout2

    Tu colle le code dans le module de l'userform

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 36
    Par défaut
    Bonsoir ! Merci, je viens de le tester. J'ai juste eu à faire une petite modification.
    à ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NomFeuille = IIf(Perso, "Mail Personnel", "Mail Professionnel")
    Tpe = IIf(Perso, "Professionnel", "Personnel")
    à la place j'ai remplacé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NomFeuille = IIf(Perso, "Mail Personnel", "Mail Professionnel")
    Tpe = IIf(Perso, "Personnel","Professionnel")
    Merci Beaucoup vous venez de me sauvez la vie.

  16. #16
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Non!
    Dans Tpe le message d'erreur si Perso=True, le mail est Personnel et le message en cas d'erreur devrait être: ce destinataire est professionnel. (en gras la variable Tpe)

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

Discussions similaires

  1. [Toutes versions] Comment piloter un ERP en flash via IE par code vba excel
    Par sebi76 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/09/2011, 15h15
  2. ajouter un utilisateur au groupe users par code VBA ?
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2007, 17h00
  3. [VBA-E] Change links par code VBA
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2007, 10h09
  4. Définir marge par code VBA
    Par tamyme dans le forum Access
    Réponses: 2
    Dernier message: 10/03/2006, 09h43
  5. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19

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