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 :

macro _ double


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut macro _ double
    bjr
    j'ai fait un macro dont le but est de trouver les double que j'ai dans la colonne où j'ai saisie des "n° de cadre"
    le macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub macro1()
    whith sheets(1)
        for i=2 to .range("a65535").end(xlup).row
           for j=1+i to .range("a65535").end(xlup).row
               if .cells(i,1)=.cells(j,1)and .cells(i,1)<>"" and .cells(j,1)<>"" then
                   msgbox "ce n°      " & .cells(i,1) & "      de cadre est déjà saisi"
               end if
           next
        next
    end with
    end sub
    le prob c'est que je veux que le message s'affiche lors de la saisi, est ce que c'est possible.
    merci.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, ce n'est pas Whith mais With (avec)
    Pour le reste, je regarde

    NB - Pense à baliser ton code, icône # -> Sélection du code + 1 clic sur #

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    vous avez des grandes yeux.

    merci

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si ça résoud ton problème, alors un petit clic sur pour qu'on sâche que c'est résolu (en bas de cette fenêtre)

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    non pas encore
    je voulais que la macro s'execute lors de la saisie
    merci.

  6. #6
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Bonjour
    sans vba Données>Validation>Autoriserersonnalisé
    dans la zone Formule:
    onglet Alerte d'erreur Ect…..
    Abed_H

  7. #7
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    ça marche pas.

  8. #8
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Ouups
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI($A$1:$A$20;A1)=1

  9. #9
    Membre éprouvé Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Par défaut
    Citation Envoyé par Abed_H Voir le message
    Ouups
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI($A$1:$A$20;A1)=1
    a bah voila :/ mon tit vieux préféré qui devient gateu :/


  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par abouhossam Voir le message
    non pas encore
    je voulais que la macro s'execute lors de la saisie
    merci.
    Tu peux également par une macro dans l'événement Change de la feuille de calculs -> Editeur VBA - Deux clics sur le nom de la feuille.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    'l'événement Change se produit en quittant la cellule que l'on vient de renseigner
    Dim firstAddress As String, c As Range
        'Target correspond à la cellule active avant d'en sortir
        'si la cellule est vide, on sort sans rien faire
        If Target = "" Then Exit Sub
        'La recherche de la donnée saisie se fait dans la colonne de Target
        With ActiveSheet.Columns(Target.Column)
            'Si la donnée est trouvée, c la contient
            'Cette donnée, c'est celle qui se trouve dans la cellule active (Target)... donc
            Set c = .Find(Target.Value, LookIn:=xlValues)
            'c n'est pas "rien" si la donnée a été trouvée
            If Not c Is Nothing Then
                'on mémorise l'adresse de la donnée trouvée afin d'éviter une boucle sans fin
                firstAddress = c.Address
                'La donnée existe forcément puisqu'on vient de la saisir
                'mais on ignore si ce n'est pas une donnée pré-existante
                Do
                    'Donc, si l'adresse de cette donnée est différente de celle de Target
                    'on sait que target est un doublon
                    If c.Address <> Target.Address Then
                        MsgBox "Le cadre " & Target & " existe déjà"
                        'On retourne alors sur Target
                        Target.Select
                        '... et on efface la donnée
                        Target = ""
                        Exit Do
                    End If
                    Set c = .FindNext(c)
                    'Tant que la boucle ne nous replace pas sur la première donnée trouvée
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
    End Sub
    Si une formule ne te suffit pas

  11. #11
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    bjr
    marci bcp ouskel'n'or.
    la macro ça marche mais j'ai une défficulté de comprendre ton macro peux tu m'aider à la comprendre?
    merci.

  12. #12
    Membre chevronné
    Inscrit en
    Janvier 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 483
    Par défaut
    Many31;2976703]a bah voila :/ mon tit vieux préféré qui devient gateu :/

    Vous là-bas, au fond,
    je vous demande de vous taire et de laisser parler les premiers rangs !

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok, j'ajoute des commentaires dans le post précédent... Laisse-moi juste une seconde

    Edit
    C'est fait, j'ai ajouté les commentaires, tu peux jeter un oeil
    Bon courage

  14. #14
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    bjr
    la macro ça marche mais notez vous que je voulais que la macro travail seulement sur la colonne "a", est ce que vous avez une autre aidée.
    merci.

  15. #15
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    un petit problème:
    si la colonne "a" contient par exemple le n° (1542) et j'ai saisi (54) ; le message "le cadre 54 existe déjà" s'est affiché car la macro a trouvé 54 dans la chaîne de 1542.
    notez vous que je ne veux pas un macro qui s'execute sur toute la feuille mais sur la colonne "a" seulement
    un grand merci.

  16. #16
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Ben pour que ça ne prenne effet que dans la colonne A tu test au début du code si tu t'y trouve bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.column <> 1 Then Exit Sub
    et pour que ça tienne compte du contenue exact faut modifier l'appel au Find comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Find(What:="bon",LookAt:=xlWhole)
    (Je l'avais dans mon Clipboard quand même cet exemple

    Sinon pour ton cas ça ferait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = .Find(Target.Value,LookAt:=xlWhole, LookIn:=xlValues)
    A toutes fins utiles je rappelles l'utilisation de l'aide, on click sur le mot (ici find) et on tape sur

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  17. #17
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    bjr
    merci QWAZERTY de ton aide la macro est:
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim firstAddress As String, c As Range
        If Target.Column <> 1 Then Exit Sub
          With ActiveSheet.Columns(Target.Column)
            Set c = .Find(Target.Value, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    If c.Address <> Target.Address And Target <> "" Then
                        MsgBox "Le cadre " & Target & " existe déjà"
                        Target.Select
                        Target = ""
                        c.Select
     
                        Exit Do
                       End If
     
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
    End Sub
    comme tu vois j'ai ajouté and Target <> "" dans la ligne If c.Address <> Target.Address And Target <> "" Then car la macro prend en considération les cellules vides.
    merci bcp.

  18. #18
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Penses au balise code quand tu mets du code, sinon ça enlève les indentations et le code est difficilement lisible (sélectionne ton code + bouton # dans l'éditeur, je sais pas si tu sais ou pas donc je le met)
    Pour ce qui est de ton code, si tu ne veux pas tenir compte des case vid, ce que je comprend aisément tu peux faire comme cela

    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 Worksheet_Change(ByVal Target As Range)
    Dim firstAddress As String, c As Range
    If (Target.Column <> 1) Or (Target = "") Then Exit Sub
        With ActiveSheet.Columns(Target.Column)
            Set c = .Find(Target.Value, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    If c.Address <> Target.Address Then
                        MsgBox "Le cadre " & Target & " existe déjà"
                        Target = ""
                        c.Select
                        Exit Do
                    End If
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
     
    End Sub
    Il n'est pas utile de commencer a faire des opération sur cette case si de toute façon on va la rejeter par ce qu'elle est vide, autant le faire de suite elle souffrira moins
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  19. #19
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    ça marche merci.

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

Discussions similaires

  1. Macro controle double saisie
    Par Cic-ec dans le forum Macro
    Réponses: 16
    Dernier message: 19/06/2012, 10h54
  2. Demande d'aide sur macro a double conditions
    Par zinebs dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/11/2007, 23h23
  3. [Macro] ouverture d'un fichier csv par macro différent du double-clic
    Par Caro-Line dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/04/2007, 16h36
  4. Double macro facultative?
    Par Pragmateek dans le forum C
    Réponses: 13
    Dernier message: 23/03/2006, 19h43
  5. [VBA-E] Effacer les doubles dans 1 colonne grace à une macro
    Par Stef.proxi dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/08/2004, 15h44

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