Rapport de message :*
 

Re: Afficher une msgbox

Titre du sujet : Re: Afficher une msgbox
par myDearFriend! le 26/01/2021 17:02:00

Bonjour Parafun, le Forum,

Tout d 'abord, ne le prends pas mal Parafun, mais je dirais que la procédure VBA que tu a insérée dans le module de code de ta feuille (Feuil1), n'est pas vraiment... "académique" .
(Et j'avoue que je suis même surpris qu'il ne provoque pas un plantage Excel!)

En fait, ta procédure VBA pourrait être de ce type :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     ' TON CODE ICI...
End Sub

... c'est ce qu'on appelle une procédure "évènementielle" et qui se lance automatiquement lorsque l'utilisateur déplace la sélection d'une cellule à une autre. Cela signifie qu'à chaque fois que le curseur est déplacé dans la feuille, ton code se lance !
Il existe d'autres évènements de feuille exploitables ainsi, mais l'évènement "Worksheet_SelectionChange()" ne me semble pas une bonne idée dans ton cas selon moi, car il va tourner en continue et se lancer à chaque déplacement dans la feuille!

Sinon, ta procédure VBA pourrait être de ce type :

Sub Alerte()
     ' TON CODE ICI...
End Sub

... ce qui est utilisable, par exemple, si tu décides de lancer ton code via un clic sur un objet bouton notamment.
Il suffit d'affecter cette procédure "Sub" à ton bouton.
Dans ce cas, il est cependant préférable de la déplacer dans un module de code "standard" (Module1 par exemple) au lieu du module "private" de la feuille de calcul elle-même. Les modules "privates" des feuilles sont, en principe, réservés aux procédures évènementielles comme vu plus haut.

Tu as donc 2 types de procédures différentes utilisables, mais en aucun cas, il ne faut imbriquer les 2, l'une dans l'autre comme tu l'as fait. C'est soit l'une, soit l'autre.

Dans l'exemple que je t'ai préparé (voir pièce jointe), j'ai opté pour la 2ème façon de faire avec une procédure "Sub Alerte()" placée dans un module de code standard et liée à un bouton "DETECTION DOUBLONS" sur ta feuille.

Bien évidemment, il existe des façons de faire beaucoup plus optimisées et bien plus rapides, mais il me semble que le code VBA suivant te sera très simple à comprendre :

DANS UN MODULE DE CODE STANDARD (ex. Module1)

Option Explicit

Sub Alerte()
' myDearFriend! - www.mdf-xlpages.com
Dim codePylone As String
Dim L As Long, L2 As Long, Lmax As Long

    With Sheets("Feuil1")                                ' A adapter
        'Numéro de la dernière ligne utilisée en colonne F (colonne 6) ?
        Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
        'On parcourt la colonne F à partir de la ligne 5
        For L = 5 To Lmax
            codePylone = .Cells(L, 6).Value
            'S'il y a un code Pylone (cellule non vide)
            If codePylone <> "" Then
                'On parcourt toutes lignes placée en dessous
                For L2 = L + 1 To Lmax
                    'Si on trouve un équivalent, on affiche l'alerte
                    If .Cells(L2, 6).Value = codePylone Then
                        MsgBox "ATTENTION!!!" & vbLf & "Le code Pylone « " & codePylone & " » est en doublon!" & vbLf & vbLf & "Il apparaît en ligne " & L & ", et en ligne " & L2
                        'On interrompt la recheche à la découverte d'un doublon, et on quitte directement la procédure pour éviter de tourner en boucle...
                        Exit Sub
                    End If
                Next L2
            End If
        Next L
    End With
    MsgBox "Détection terminée." & vbLf & "Aucun doublon trouvé."
End Sub
  

En espérant que ça puisse te dépanner.


Bien cordialement,