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 :

Adaptation du code [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut Adaptation du code
    bonjour je souhaite ceci mais que pour des lignes à partir de la ligne 3 mais qui irai de colonne A à E voici le code qui fonctionne pour colonnes "j’espère que c'est assez clair "
    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
    Option Explicite
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        Dim Colonne As Integer
        Dim Adresse As String
     
        'On sort si plus d'une cellule a été modifiée
        If Target.Count > 1 Then Exit Sub
        'On sort si la cellule modifiée est vide
        If Target.Value = "" Then Exit Sub
     
        'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
        Colonne = 1
     
        'Vérifie si c'est la colonne cible a été modifiée
        If Target.Column = Colonne Then
     
            'Recherche si la nouvelle donnée existe déjà dans la colonne.
            Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
     
            'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
            'signifie qu'il y a un doublon dans la colonne.
            If Adresse <> Target.Address Then
     
                MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
                'Suppression de la donnée
                Target.Value = ""
                Target.Select
     
            End If
        End If
     
    End Sub
    j'ai bien essayé j'ai fais mais pour l'instant cela bug de partout

    merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    Bonjour a tous,

    pour commencer

    il n'y a pas de e ensuite il suffit de modifier la range sur laquelle tu appliques ton find:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
    je pense que des petites sécuritées supplémentaires seraient les bienvenues:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=True
    au début de la sub et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    à la fin de manière à ne pas rappeler la macro lorsque celle-ci modifie une valeur dans la feuille.



    Et vérifier que le find à renvoyé quelque chose avant d'appliquer la méthode address, sinon cela va lever une erreur


    si tu as d'autres questions

  3. #3
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    pardon de mon ignorance mais cela ne fonctionne pas voici le code
    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
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''controle des doublons
    Application.EnableEvents = False
     
        Dim ligne As Integer
     
        Dim Adresse As String
     
        'On sort si plus d'une cellule a été modifiée
        If Target.Count > 1 Then Exit Sub
        'On sort si la cellule modifiée est vide
        If Target.Value = "" Then Exit Sub
     
     
        'Vérifie si c'est la ligne cible a été modifiée
        If Target.Rows = ligne Then
     
            'Recherche si la nouvelle donnée existe déjà dans la ligne.
          Adresse = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
     
            'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
            'signifie qu'il y a un doublon dans la ligne.
            If Adresse <> Target.Address Then
     
                MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
                'Suppression de la donnée
                Target.Value = ""
                Target.Select
     
            End If
        End If
     Application.EnableEvents = True
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    Bonjour à tous,

    peut-tu me dire de quel genre de disfonctionement il s'agit:
    • Erreur qui bloque l'execution, dans ce cas clique sur débogage et donnes moi la ligne sur laquelle le programme s'est arreté (surlignée en jaune)
    • l'execution va jusqu'au bout mais le resultat n'est pas celui attendu. Dans ce cas il faudrait détailler le résultat obtenu


    cela ne fonctionne pas n'est pas suffisamment précis

  5. #5
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    j'ai le message d'erreur quand j'ajoute comme il se doit je pense
    erreur d 'exécution 7 mémoire insuffisante ?
    une question le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    tu le mets au début ou à la fin et comment tu le mets
    cordialement

  6. #6
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    en fait ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Rows = ligne Then
    devrait s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Row = ligne Then
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    se met imméditement après le début de la Sub, comme tu l'as mis, c'est corect.

  7. #7
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    j'ai répondu trop vide message d'erreur d’exécution 13 incompatibilité de type
    à la ligne suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
    qu'es qui peu clocher ?
    c'est bien ligne ,colonne es ce que dans mon cas il faudrait pas autre chose ou c'est bon

    cordialement

  8. #8
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    Bonjour à tous,

    je viens de faire un test chez moi et cela fonctionne sans erreur

    Peut-être faudrait-il essayer avec l'argument dans la fonction find (voir aide si besoin, F1 sur le mot find)

    Sinon envoie moi un classeur exemple pour que je vois un peu les valeurs du tableau.

  9. #9
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,

    Je définirais bien une variable de type range pour la recherche. Parce qu'à mon avis, s'il ne trouve pas la valeur cherchée dans la plage de données, il n'a aucune cellule (du nothing) donc, l'adresse d'une range nothing renvoie une erreur en général.
    Utilises ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim rng as range
    set rng = nothing
    set rng = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext)
    if rng = nothing then
    adresse = ""
    else
    adresse = rng.Address
    end if

  10. #10
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Il y a une erreur dans After:=Target.Offset(1, 0).

    Il faut mettre After:=Target.Offset(0, 0) ou encore After:=Target.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target, LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address

  11. #11
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut pas bien marche ?
    bonjour
    malgrès toutes les pistes j'en suis toujours au même point
    voici le code
    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
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     
        Application.EnableEvents = False
        Dim ligne As Integer
        Dim Adresse As String
     
        'On sort si plus d'une cellule a été modifiée
        If Target.Count > 1 Then Exit Sub
        'On sort si la cellule modifiée est vide
        If Target.Value = "" Then Exit Sub
     
        'Définit la ligne à vérifier
       ligne = Target.Row
     
        'Vérifie si c'est la ligne cible a été modifiée
        If Target.Row = ligne Then
     
            'Recherche si la nouvelle donnée existe déjà dans la ligne .
            Adresse = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target, LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
            'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
            'signifie qu'il y a un doublon dans la ligne.
            If Adresse <> Target.Address Then
     
                MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
                'Suppression de la donnée
                Target.Value = ""
                Target.Select
     
            End If
        End If
     Application.EnableEvents = True
    End Sub
    si vous souhaiter modifier le code redonner moi un ensemble svp c'est mieux pour le vieux que je suis
    cordialement

  12. #12
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    stp tu le mets ou ton dans son ensemble qu'es que cela donne ! puisque cela fonctionne chez toi
    merci d'avance


    Citation Envoyé par Aposto Voir le message
    Bonjour à tous,

    je viens de faire un test chez moi et cela fonctionne sans erreur

    Peut-être faudrait-il essayer avec l'argument dans la fonction find (voir aide si besoin, F1 sur le mot find)

    Sinon envoie moi un classeur exemple pour que je vois un peu les valeurs du tableau.

  13. #13
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    Citation Envoyé par Gado2600 Voir le message
    Bonjour,

    Je définirais bien une variable de type range pour la recherche. Parce qu'à mon avis, s'il ne trouve pas la valeur cherchée dans la plage de données, il n'a aucune cellule (du nothing) donc, l'adresse d'une range nothing renvoie une erreur en général.
    Utilises ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim rng as range
    set rng = nothing
    set rng = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext)
    if rng = nothing then
    adresse = ""
    else
    adresse = rng.Address
    end if
    merci pour le regard et tes instructions !
    j'ai le message suivant erreur de compilation utilisation incorrecte de l'objet je pense que c'est le nothing l'erreur

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Ce type d'instruction ne sert strictement à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        ligne = Target.Row
     
        'Vérifie si c'est la ligne cible a été modifiée
        If Target.Row = ligne Then
    puisque d'office "Target.Row" sera forcement égal à "ligne" vu l'instruction qui précède "ligne = Target.Row".
    La position de ce mets juste avant l'instruction qui va forcement déclencher la procédure donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Application.EnableEvents = False
     
    Target.Value = ""
     
    Application.EnableEvents = True
    Voici un code qui devrait marcher (pas testé). Il ne faut jamais utiliser une propriété ou méthode avec la fonction Find car si pas trouvé, erreur d'office. Il faut utiliser une variable Objet (Range) et faire un contrôle d'initialisation (Nothing) :
    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
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     
        Dim Cel As Range
        Dim ligne As Long
        Dim Adresse As String
     
        'On sort si plus d'une cellule a été modifiée
        If Target.Count > 1 Then Exit Sub
        'On sort si la cellule modifiée est vide
        If Target.Value = "" Then Exit Sub
     
     
    '    'Définit la ligne à vérifier
    '    ligne = Target.Row
    '
    '    'Vérifie si c'est la ligne cible a été modifiée
    '    If Target.Row = ligne Then
     
        'Recherche si la nouvelle donnée existe déjà dans la ligne .
        Set Cel = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(Target.Value, Target, xlValues, xlWhole, , xlNext)
     
        'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
        'signifie qu'il y a un doublon dans la ligne.
        If Not Cel Is Nothing Then
     
            If Cel.Address <> Target.Address Then
     
                MsgBox "La donnée '" & Target.Value & "' existe déjà dans la cellule " & Cel.Address(0, 0)
     
                'Suppression de la donnée
                Application.EnableEvents = False
     
                Target.Value = ""
     
                Application.EnableEvents = True
     
                Target.Select
     
            End If
     
        End If
     
    End Sub
    Hervé.

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oups,

    Un petit oubli dans la ligne
    La position de ce mets juste avant l'instruction qui va forcement déclencher la procédure
    La position de "Application.EnableEvents = False" ce mets juste avant l'instruction qui va forcement déclencher la procédure et donc "Application.EnableEvents = True" juste après. Si tu le mets en début de code pour te simplifier la vie, tu risque de te retrouver avec les évènements bloqués car dans ce type d'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Application.EnableEvents = False
    Dim ligne As Integer
    Dim Adresse As String
     
    'On sort si plus d'une cellule a été modifiée
    If Target.Count > 1 Then Exit Sub
    On sort si la cellule modifiée est vide
    If Target.Value = "" Then Exit Sub
    si "If Target.Count > 1 Then Exit Sub" ou "If Target.Value = "" Then Exit Sub" sont à "True", sortie de procédure sans exécuter l'instruction "Application.EnableEvents = True"

    Hervé.

  16. #16
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut Au secours !
    bonjour tous
    cela fonctionne pour une colonne ok
    'Recherche si la nouvelle donnée existe déjà dans la colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address

    ceci fonctionne pour une ligne ok
    'Recherche si la nouvelle donnée existe déjà dans la ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Rows(ligne).Find(What:=Target.Value, After:=Target.Offset(0, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address

    mais ceci ne fonctionne pas! pour une ligne qui n'irai de la colonne A à la colonne E qui serai représenter par le target.row dans la plage qui définirai la ligne à vérifier

    je cherche je ne trouve pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Adresse = Range("A3:E" & ActiveSheet.UsedRange.Rows.Count).Find(What:=Target.Value, After:=Target.Offset(0, 0), LookAt:=xlWhole, _
                SearchDirection:=xlNext).Address
    pourquoi d’après vous ?

    cordialement

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai beau parcourir l'ensemble des fils de cette discussion, à aucun moment tu n'expliques quelle est la finalité de ta procédure.
    Est-ce vérifier que la valeur introduite est présente dans la colonne, sur la même ligne, sur une plage ?
    La valeur cherchée doit-elle être complète ou partielle, la casse doit-elle être respectée ou pas, etc.

    bonjour je souhaite ceci mais que pour des lignes à partir de la ligne 3 mais qui irai de colonne A à E voici le code qui fonctionne pour colonnes "j’espère que c'est assez clair "
    Ta demande initiale n'est pas du tout claire pour moi. "Je souhaite ceci" ???, mais encore
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  18. #18
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    bonjour et merci !
    Je cherche simplement dans une plage si je modifie ou je remets une valeur de la cellule de ma plage A3 :E cela contrôle dans les autres cellules la valeur de la même ligne dans plage A3 : E
    Je ne contrôle pas du tout toute la ligne ou les autres lignes à ce moment là ,encore moins la colonne
    La valeur cherchée est complète ex : si je mets 10 cela recherche que la valeur 10 dans les autres cellules et pas 2103
    Je ne sais pas pour la casse ce que cela veut dire, mais comme c’est une option :

    J’ai trouvé pour une ligne ainsi que pour une colonne et aussi pour toutes les lignes il me reste de comprendre ou à trouver pour restreinte qu’a une plage
    Je sais que ce n’est pas facile de me comprendre et je m’en excuse humblement

    j'ai bien essayer toutes les pistes qui m'on été donnée et à tous je les en remercie

    mais peut être que ce n'est pas possible tout simplement

    Cordialement

  19. #19
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bien sûr que c'est possible.

    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
    55
     
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     If Target.Count > 1 Then Exit Sub
     
        'Definir quelle feuille
        Set f = ActiveSheet
     
        'Definir quelle region de cette feuille
        Set tout = f.Range("B3:E" & f.Rows.Count)
     
        'Definir quelle ligne de cette region
        Set cetteligne = Intersect(tout, f.Rows(Target.Row))
     
        If cetteligne Is Nothing Then Exit Sub
     
        'Est-ce que Target est dans cetteligne
        If Intersect(cetteligne, Target) Is Nothing Then Exit Sub
     
     
        'Recherche sur cette ligne
     Methode = 1
     
        If Methode = 1 Then
            'Methode 1 : Rechercher doublon avec For...Next
            Set rng = Nothing
            For k = 1 To cetteligne.Columns.Count
     
                If cetteligne.Cells(1, k).Value = Target.Value Then
                    If Intersect(cetteligne.Cells(1, k), Target) Is Nothing Then
                        Set rng = cetteligne.Cells(1, k)
                        Exit For
                    End If
                End If
     
            Next
     
        Else
            'Methode 2 : Rechercher doublon avec FIND et LookIn:=xlFormulas
            Set rng = cetteligne.Find(what:=Target.Value, After:=Target, LookIn:=xlFormulas, LookAt:=xlWhole, _
            SearchFormat:=False, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
        End If
     
        If rng Is Nothing Then Exit Sub
     
        If rng.Address = Target.Address Then
            'Pas de doublon
        Else
     
            MsgBox "Doublon en " & rng.Address
        End If
     
    End Sub

  20. #20
    Membre très actif Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Par défaut
    impeccable mieux du neuf ! en te remerciant très chaleureusement

    si je pouvais te mettre 10 000 points dans tous les cas tu le mérite je te les donnerai
    @+ à tous

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

Discussions similaires

  1. [Oracle] [PL/SQL] Adapter un code VB
    Par LoulouFifi dans le forum Oracle
    Réponses: 1
    Dernier message: 20/07/2006, 16h11
  2. Réponses: 7
    Dernier message: 24/03/2006, 09h25
  3. [débutant] Pb adaptation de code VBA
    Par delphineleclerc1 dans le forum Access
    Réponses: 9
    Dernier message: 28/02/2006, 12h58
  4. Réponses: 22
    Dernier message: 06/10/2005, 10h53
  5. [VBA Excel Word]Adapter un code Excel a Word
    Par Baxter67 dans le forum VBA Word
    Réponses: 4
    Dernier message: 08/08/2005, 23h43

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