Menu

Petite traduction en VBA... [Résolu]

Messages postés
146
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
11 mai 2019
- - Dernière réponse : Anthelm
Messages postés
146
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
11 mai 2019
- 23 nov. 2018 à 21:32
Bonjour, à tous!

J'aimerais expliquer à Excel la chose suivante, mais il ne me comprend pas...

"Si dans la plage G2:R2 une donnée est saisie, et qu'elle est déjà présente dans G2:R2, renvoyer un message d'erreur"
Pourriez vous me le traduire svp? :)

Ce sont des entêtes d'un tableau et le fait qu'elle se renomme avec un indice "2" quand on saisi un doublon, ça me pose problème.

Il s'agit de listes déroulantes, donc impossible de passer par la validation de données, qui est déjà utilisée pour ça.

Merci!


Configuration: Windows / Firefox 63.0
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
25568
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 mai 2019
1977
1
Merci
Bonsoir,
'déclenche la macro quand une valeur de la feuille change
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    Set Rng = ActiveSheet.Range("G2:R2")
    'Vérifie si dans la plage choisie
    If Not Application.Intersect(Target, Rng) Is Nothing Then
        'verifie si la valeur existe déjà dans la plage
        ValueToSearchFor = Target.Value 'récupère la valeur saisie
        If Application.CountIf(Rng, ValueToSearchFor) > 1 Then
            MsgBox "La valeur " & ValueToSearchFor & " existe déjà"
        End If
    End If
End Sub

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 39257 internautes nous ont dit merci ce mois-ci

Anthelm
Messages postés
146
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
11 mai 2019
1 -
J'ai l'impression que ça ne marche pas... Peut être une interaction avec une autre macro? sur la feuille ça donne ça:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("A3:AN502")) Is Nothing Then

Range("S1").Value = Target.Row

End If


End Sub

'déclenche la macro quand une valeur de la feuille change
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Rng = ActiveSheet.Range("G2:R2")
'Vérifie si dans la plage choisie
If Not Application.Intersect(Target, Rng) Is Nothing Then
'verifie si la valeur existe déjà dans la plage
ValueToSearchFor = Target.Value 'récupère la valeur saisie
If Application.CountIf(Rng, ValueToSearchFor) > 1 Then
MsgBox "La valeur " & ValueToSearchFor & " existe déjà"
End If
End If
End Sub


Et j'ai bien une ligne entre les deux. ça devrait marcher, non?
Commenter la réponse de jordane45
Messages postés
22729
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 mai 2019
7373
1
Merci
Bonjour,

une proposition qui t'affiche la liste épurée des items déjà présents.
Créer une listbox sous la ligne de titres et :
Private Sub ListBox1_Click()
    ActiveCell.Value = ListBox1.Text
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c      As Range
    If Not Intersect(Target, [A2:E2]) Is Nothing Then
        With ListBox1
            .Left = Target.Left
            .Clear
            .AddItem
            For Each c In [liste]
                If Application.CountIf([A2:E2], c.Value) = 0 Then .AddItem c.Value
            Next c
            .Visible = True
        End With
    Else
        ListBox1.Visible = False
    End If
End Sub

https://www.cjoint.com/c/HKvjPHqC6ZU
eric

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 39257 internautes nous ont dit merci ce mois-ci

Anthelm
Messages postés
146
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
11 mai 2019
1 -
Bonjour eric, désolé d'avoir mis autant de temps à répondre. J'ai bien noté ta solution et j'essaye d'approfondir cette histoire de listbox. Merci du conseil en tout cas, c'est peut être ça la solution en effet.

Je me fait quelques tutos concernant les listbox et j'essayerais :)

Merci beaucoup
Commenter la réponse de eriiic
Messages postés
146
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
11 mai 2019
1
0
Merci
Non effectivement ça marche mais dans la mesure ou c'est un tableau, l'entête prend un indice 2 avant le déclenchement de la macro :'(

Le message d'erreur n’empêche pas la saisie mais ça c'est moi qui n'en avait pas parlé...!
Commenter la réponse de Anthelm