Eviter les doublons

Bonjour a tous,

Je viens vers vous car je commence a désespérer sur un projet dans lequel les impasses se multiplies.

Topo : Dans ce fichier, j'aimerai qu'un Msgbox Vbyesno s'affiche lorsque la résidence sélectionnée (LB_residence) est déjà présente dans la feuille inventaire et demande si il souhaite écraser les données.

Si l'opérateur choisit oui : les données sont remplacées, si non retour a Uf_menu.

Le fichier présente beaucoup de petite erreurs mais c'est ce point qui, jusqu'à présent, m'empêche d'avancer. J'ai un début de code sur LB residence de UF_Saisie mais il ne fonctionne pas

Si qqun a une proposition je serais ravi d'y jeter un oeil

17inventaire-bac.xlsm (96.10 Ko)

Hello,

Une première approche :

Private Sub LB_residences_Change()
Const str_name_shinv As String = "INVENTAIRE"
Dim str_resistance As String
Dim sh_inventaire As Worksheet
Dim byt_colresitence As Byte
Dim i As Long
Dim answer As Variant

str_resistance = LB_residences.Text
Set sh_inventaire = Sheets(str_name_shinv)
byt_colresitence = 3
i = 3
With sh_inventaire
    Do While Not .Cells(i, byt_colresitence) = Empty
        If .Cells(i, byt_colresitence) = str_resistance Then
            answer = MsgBox("Voulez-vous écraser les données ? ", vbQuestion + vbYesNo + vbDefaultButton2, "Message Box Title")
            If answer = vbYes Then
                ' code ecrasement de données
            End If
        Else
            i = i + 1
        End If
    Loop
End With

Set sh_inventaire = Nothing

End Sub

Hello Rag02700,

Tout d'abords merci pour le temps que tu consacres à mon soucis.

Lorsque je rentre ta solution dans mon programme VBA voici ce que je constate :

-> Si je choisis une résidence déjà présente dans la feuille "INVENTAIRE", la Msgbox s'affiche bien, donc top !

-> En revanche lors du choix VbyesNo la liste est encore sélectionnée donc le message tourne en boucle et impossible d'en sortir

Hello,

-> En revanche lors du choix VbyesNo la liste est encore sélectionnée donc le message tourne en boucle et impossible d'en sortir

Oui c'était pour voir si tu suivais bien

Private Sub LB_residences_Change()
Const str_name_shinv As String = "INVENTAIRE"
Dim str_resistance As String
Dim sh_inventaire As Worksheet
Dim byt_colresitence As Byte
Dim i As Long
Dim answer As Variant

str_resistance = LB_residences.Text
Set sh_inventaire = Sheets(str_name_shinv)
byt_colresitence = 3
i = 3
With sh_inventaire
    Do While Not .Cells(i, byt_colresitence) = Empty
        If .Cells(i, byt_colresitence) = str_resistance Then
            answer = MsgBox("Voulez-vous écraser les données ? ", vbQuestion + vbYesNo + vbDefaultButton2, "Message Box Title")
            If answer = vbYes Then
                   i = i + 1
                ' code ecrasement de données
            else i = i + 1
            End If
        Else
            i = i + 1
        End If
    Loop
End With

Set sh_inventaire = Nothing

End Sub

Oh oui je suis, ça ne lâche pas mon esprit

C'est mieux, le programme capte que la résidence sélectionnée est déjà présente dans la feuille inventaire et lance le message d'erreur.

-> Si VbNo, il ferme la Msgbox, Parfait !

-> Si Vbyes je saisie le nombre de bac et il me crée une nouvelle ligne au lieu d'écraser l'existante.

-> Enfin la Msg s'affiche autant de fois qu'il y a de ligne présente sous le même nom de résidence dans la feuille inventaire

J'aimerai proposer des pistes de réflexion mais j'avoue être un peu distancé par le niveau nécessaire ^^

Si tu as une idée je suis preneur

Erratum,

Le MsgBox s'affichait plusieurs fois car je n'avais pas delet mes lignes dans la feuilles inventaire (my bad).

En revanche lorsque que vbYes -> unload Uf_etat

Hello,

Pour l'instant le code attend d'être complété quand tu cliques sur yes ou no

Soit + précis sur ce que tu souhaites faire quand tu cliques sur yes et quand tu cliques sur no

Yop,

Désolé si mes explications manquent de clartés.

Si la résidence sélectionnée est déjà présente dans la feuille inventaire, la Msgbox s'ouvre sur vbyesno :

Si vbyes, les données saisies viendront écraser celles déjà existantes dans la feuille INVENTAIRE ;

Si vbno, uf_saisie se ferme et retour sur uf_menu.

J'espère avoir été plus clair :)

Oui c'est mieux par contre tu as oublié une choses fondamentale de dire et dans ton fichier ...

Est ce que tu peux avoir plusieurs fois dans ton tableau la résidence sélectionnée ?

Idéalement, mon fichier inventaire ne doit comporter qu'une seul ligne par résidence.

Les données de cette ligne sont remplacées par les nouvelles données si : msgbox = vbyes

Par contre tu parles de données qui vont être saisies, mais dans ton userform je ne vois aucune données qui va être saisie sauf auditeur ...

Mon userform Uf_etat me permet de saisir l'auditeur, la résidence ainsi que le type de bacs.

Une fois les données cochées dans uf_etat, cb valid ouvre uf_saisie (pour sélectionner les bacs présents). Une fois les bacs renseigner cb_valid (de uf_saisie) décharge les données (auditeur, résidence, date, adresse, et nbr de bacs) dans la feuille inventaire.

Rechercher des sujets similaires à "eviter doublons"