Afficher une msgbox
#1
Débutant XLPages

Inscription: 21/01/2021
De SAINTRY SUR SEINE

Messages: 5

Système d'exploitation:
pc
Version Excel utilisée:
2016
Posté le : 21-01 11h54

Bonjour

 

Je suis débutant en vba, et je souhaite mettre un message d'alerte dans un tableau ou des doublons peuvent être présents dans 2 colonnes. avec des formules Je  compare les 2 colonnes pour que  la condition finale soit k1<>I1 alors doublons. Je souhaite écrire un code pour afficher le message.." Attention doublon" quand K1<>I1 et "PAS DE DOUBLON POURSUIVEZ" si K1=I1

J'espère que c'est clair et merci pour votre aide

Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1504

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 23-01 00h48

Bonsoir Parafun et bienvenue sur mDF-XLpages.com.smiley

 

Ta question semble être simple, mais selon moi, elle demande cependant quelques éclaircissements et points de réflexion...

 

Pour tout traitement VBA, la première question à se poser, c'est : quel évènement (ou quelle action) devra déclencher mon code ?

 

La présence de doublons dans un tableau n'est pas un évènement en soi.

Par évènement, il faut entendre un fait générateur, une action ou un changement d'état  qui servira de point de départ pour déclencher ton programme. Une fois déclenché, ton code pourra ensuite analyser tes cellules et, le cas échéant, t'avertir par un message d'alerte. Mais avant toutes choses, il faut trouver le déclencheur.

 

La détection de tes valeurs doublons (impliquant l'affichage du message d'alerte éventuel) doit-elle être déclenchée par :

  • l'action de saisir une valeur dans une cellule ?
  • l'action de cliquer sur un bouton ?
  • l'action d'ouvrir le classeur lui-même ?  
  • etc.

 

La deuxième étape, consiste ensuite à définir la façon dont le code devra agir et son déroulement :

Par exemple : si je décide qu'il faut cliquer sur un bouton, alors faut-il que le code parcourt tout le tableau et recherche, ligne après ligne, la présence de doublons ?

Dans l'affirmative : en cas de présence de multiples doublons (selon la taille du tableau), l'utilisateur risque fort de subir une overdose de MsgBox d'alerte en cascade, non ?

 

Ensuite, n'aurais-tu pas inversé la logique dans ton énoncé ? 

 

" Attention doublon" quand K1<>I1

Pour moi, c'est l'inverse : si les éléments sont différents, alors ils ne s'agit justement pas de doublons. 

 

Je pense qu'il serait préférable que tu joignes un fichier exemple (très simplifié) de ce que tu souhaiterais obtenir (voir la FAQ : Comment joindre un fichier dans le Forum ?" au besoin). N'hésite pas à donner plus de détails.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#3
Débutant XLPages

Inscription: 21/01/2021
De SAINTRY SUR SEINE

Messages: 5

Système d'exploitation:
pc
Version Excel utilisée:
2016
Posté le : 25-01 09h58

Merci pour le retour

 

En effet ça mérite un complément d'information, 

dans l'onglet " introduire des Pylones", des données sont injectées en lançant la macro depuis une autre fichier. Ce fichier est une extraction pour l'exercice, le fichier principal est trop volumineux

La colonne f permet de recueillir l'identité de chaque pylone. Il peut y avoir doublon (car le pylone est sur 2 commune par exemple). Si Il y a doublon alors une alerte MSGBOX est déclenchée pour que l'operateur fasse une analyse (supprimer ou pas le doublon)

Voici le code que j'ai initié et qui me donne en partie satisfaction :

Sub Alerte()
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(1, 9).Value <> Cells(1, 11) Then
MsgBox "ATTENTION AU MOINS UN PYLONE EST EN DOUBLON!", , "CTO"
 End If

End Sub

Une fois le message affiché Je souhaite qu'il disparaisse définitivement lorsque l'operateur clique sur ok.

Encore Merci

Pièce jointe:
zip Alerte Doublons.zip   [ Taille: 96.27 Ko - Téléchargements: 14 ]
Edité par Parafun le 25/01/2021 10:57:37
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1504

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-01 17h02

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,

Pièce jointe:
zip PourParafun - Alerte Doublons.zip   [ Taille: 103.73 Ko - Téléchargements: 15 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#5
Débutant XLPages

Inscription: 21/01/2021
De SAINTRY SUR SEINE

Messages: 5

Système d'exploitation:
pc
Version Excel utilisée:
2016
Posté le : 26-01 22h00

Merci Didier tu as complètement cerné ma demande, et non je ne me vexe pas, car tu es un sachant dans le domaine, alors que moi non. Merci encore pour le temps passé et surtout pour la qualité de la réponse que je trouve très pédagogique.

Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#6
Débutant XLPages

Inscription: 21/01/2021
De SAINTRY SUR SEINE

Messages: 5

Système d'exploitation:
pc
Version Excel utilisée:
2016
Posté le : 26-01 22h25

petite Question Didier : Le code fonctionne impeccablement bien pour un doublon, quid si il y a 2 3 4 ..bref plusieurs doublons, le MSGBOX n'en affiche qu'un seul...

Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1504

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01 00h53

Re,

Citation :

Parafun a écrit :

petite Question Didier : Le code fonctionne impeccablement bien pour un doublon, quid si il y a 2 3 4 ..bref plusieurs doublons, le MSGBOX n'en affiche qu'un seul...



En fait, c'est un peu ce dont je te parlais dans mon premier post ci-dessus :

si je décide qu'il faut cliquer sur un bouton, alors faut-il que le code parcourt tout le tableau et recherche, ligne après ligne, la présence de doublons ? Dans l'affirmative : en cas de présence de multiples doublons (selon la taille du tableau), l'utilisateur risque fort de subir une overdose de MsgBox d'alerte en cascade, non ?


Tu as donc 2 possibilités :

  1.  La première, c'est de :
    • cliquer sur le bouton pour lancer la détection de doublons
    • corriger le 1er doublon détecté (correction facilitée avec l'indication des numéros de lignes concernées lors de l'alerte).
    • puis, relancer une détection pour l'éventuel doublon suivant.
    • corriger.
    • etc...
    • jusqu'à que tu obtiennes le message "Détection terminée. Aucun doublon trouvé."

      Dans le doute, c'est la solution que j'avais en tête en te proposant ce code.

  2. La deuxième solution, c'est sans doute de :
    • supprimer l'instruction "Exit Sub" dans le code présenté.


C'est à tester et peut-être à adapter. Mais sans cette instruction, les boucles de recherche continueront de tourner jusqu'à la fin. Mais, s'il y a plusieurs doublons, tu obtiendras les MsgBox l'une après l'autre, sans aucune pause entre elles... Il te faudra donc noter les numéros de lignes concernées au fur et à mesure, et faire l'ensemble des corrections à l'issue.


Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#8
Débutant XLPages

Inscription: 21/01/2021
De SAINTRY SUR SEINE

Messages: 5

Système d'exploitation:
pc
Version Excel utilisée:
2016
Posté le : 27-01 12h36

Encore Merci c'est parfait

Edité par Parafun le 27/01/2021 16:17:02
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes