Problème affichage MsgBox
Bonjour, je reviens vers vous car je rencontre un petit problème avec un bouton recherche de doublon, quand il n'y a pas de doublon je voudrais qu'il m'affiche la msgBox "Il y a aucun doublon". mais pour l'instant il bug. Merci pour votre aide.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range
Dim Cel As Range
Dim Col As Long
If MsgBox("Confirmez-vous la recherche de doublon?", vbYesNo, "Demande de confirmation de recherche de doublon") = vbYes Then
'seulement si modif dans une seule cellule et sur la colonne A
If Target.Count > 1 Then Exit Sub
If Target.Column > 1 Then Exit Sub
With Worksheets("BaseDeDonnées")
'défini la plage sur la colonne A de la feuille "Base de données" à partir de A2
Set plage = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)):
'effectue la recherche dans le fichier "basse de données"...
Set Cel = plage.Find(Target.Value, , xlValues, xlWhole)
'...si trouvé, défini le nombre de colonnes à récupérer par rapport aux entêtes (ligne 1)
'et inscrit les valeurs dans les cellules à droite de celle-ci
If Not Cel Is Nothing Then
Col = .Cells(6, .Columns.Count).End(xlToLeft).Column
Target.Resize(1, Col).Value = Cel.Resize(1, Col).Value
End If
End With
Else
MsgBox "Il y a aucuns doublons"
End If
End SubCordialement.
Bonjour minakashi
Ouille
Voici comment il faut faire
If Not Cel Is Nothing Then
Col = .Cells(6, .Columns.Count).End(xlToLeft).Column
Target.Resize(1, Col).Value = Cel.Resize(1, Col).Value
Else
MsgBox "Il n'y a pas de doublon"
End IfA+
Haha désolé je sui débutant^^. Il bug toujour... c'est bien ça le code du coup?:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range
Dim Cel As Range
Dim Col As Long
If MsgBox("Confirmez-vous la recherche de doublon?", vbYesNo, "Demande de confirmation de recherche de doublon") = vbYes Then
'seulement si modif dans une seule cellule et sur la colonne A
If Target.Count > 1 Then Exit Sub
If Target.Column > 1 Then Exit Sub
With Worksheets("BaseDeDonnées")
'défini la plage sur la colonne A de la feuille "Base de données" à partir de A2
Set plage = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)):
'effectue la recherche dans le fichier "basse de données"...
Set Cel = plage.Find(Target.Value, , xlValues, xlWhole)
'...si trouvé, défini le nombre de colonnes à récupérer par rapport aux entêtes (ligne 1)
'et inscrit les valeurs dans les cellules à droite de celle-ci
If Not Cel Is Nothing Then
Col = .Cells(6, .Columns.Count).End(xlToLeft).Column
Target.Resize(1, Col).Value = Cel.Resize(1, Col).Value
Else
MsgBox "Il n'y a pas de doublon"
End If
End SubRe,
Oh punaise non 😱
Quand on met un With il faut mettre un End With juste avant le End Sub
A d'accord sorry, et comme ça du coup c'est ok? il me demande bien si je veut faire la recherche mais quand je valide avec oui il me dit une erreur d'exécution 13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range
Dim Cel As Range
Dim Col As Long
If MsgBox("Confirmez-vous la recherche de doublon?", vbYesNo, "Demande de confirmation de recherche de doublon") = vbYes Then
'seulement si modif dans une seule cellule et sur la colonne A
If Target.Count > 1 Then Exit Sub
If Target.Column > 1 Then Exit Sub
With Worksheets("BaseDeDonnées")
'défini la plage sur la colonne A de la feuille "Base de données" à partir de A2
Set plage = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)):
'effectue la recherche dans le fichier "basse de données"...
Set Cel = plage.Find(Target.Value, , xlValues, xlWhole)
'...si trouvé, défini le nombre de colonnes à récupérer par rapport aux entêtes (ligne 1)
'et inscrit les valeurs dans les cellules à droite de celle-ci
If Not Cel Is Nothing Then
Col = .Cells(6, .Columns.Count).End(xlToLeft).Column
Target.Resize(1, Col).Value = Cel.Resize(1, Col).Value
Else
MsgBox "Il n'y a pas de doublon"
End If
End With
End SubMinakashi,
Vous pouvez débuter sur VBA, mais sur le forum, vous devriez savoir qu'il est souhaitable :
1) de mettre un fichier avec ses demandes
2) de mettre des copies d'écrans du message et de la ligne surlignée en jaune quand il y a un bug
Dans l'attente
A+
Bruno,
Voici le fichier Excel en question, il m'affiche plus de bug mais il fait n'importe quoi haha, quand je valide pour chercher des doublons, il me demande 2 fois le message de la validation et quand je dit non il me fait quand même la recherche…, merci pour votre aide Bruno.
Cordialement.
Re,
C'est marrant comment lorsqu'on demande le fichier, tout d'un coup l'erreur d'exécution 13 disparait
Sinon, vous êtes dans un évènement "Change" donc à tout changement la procédure est exécutée.
Or vous effectuer une modification de cellule dans le code, ce qui a pour impact de relancer la procédure
Pour éviter cela, il faut arrêter les évènements le temps de traitement avec
Application.EnableEvents = FalseJ'ai également pour habitude de sortir de la sub immédiatement si pas besoin de traitement.
J'ai donc modifié le test pour la réponse NON et sors directement
Voici le code,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plage As Range, Cel As Range
Dim Col As Long
' Demand de confirmation, si réponse NON, on sort
If MsgBox("Confirmez-vous la recherche de doublon?", vbYesNo, _
"Demande de confirmation de recherche de doublon") = vbNo Then Exit Sub
'seulement si modif dans une seule cellule et sur la colonne A
If Target.Count > 1 Then Exit Sub
If Target.Column > 1 Then Exit Sub
With Worksheets("BaseDeDonnées")
'défini la plage sur la colonne A de la feuille "Base de données" à partir de A2
Set plage = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)):
'effectue la recherche dans le fichier "basse de données"...
Set Cel = plage.Find(Target.Value, , xlValues, xlWhole)
'...si trouvé, défini le nombre de colonnes à récupérer par rapport aux entêtes (ligne 1)
'et inscrit les valeurs dans les cellules à droite de celle-ci
If Not Cel Is Nothing Then
Col = .Cells(6, .Columns.Count).End(xlToLeft).Column
Application.EnableEvents = False
Target.Resize(1, Col).Value = Cel.Resize(1, Col).Value
Application.EnableEvents = True
Else
MsgBox "Il n'y a pas de doublon"
End If
End With
End SubC'est en forgeant qu'on apprend à devenir forgeron... mais pas en demandant systématiquement au voisin de venir nous aider
"VBA pour les nuls" est un trait bon bouquin, j'ai commencé par là
A+
Nan mais c'est normal que le message d'erreur avait disparu, j'avais ajouté un End If à la fin. J'ai commencé a apprendre le VBA en suivant les cours dans ce site même, mais par manque de temps je pose des questions pour avance plus vite dans mon projet. Je vais acheter le bouquin du coup, merci pour le temps que vous avez passé sur mon problème Bruno
Cordialement.