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 Sub

Cordialement.

Bonjour minakashi

Ouille va falloir étudié un peu le VBA

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 If

A+

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 Sub

Re,

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 Sub

Minakashi,

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 = False

J'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 Sub

C'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.

Rechercher des sujets similaires à "probleme affichage msgbox"