Problème au niveau de on error goto

Résolu/Fermé
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 - 8 janv. 2013 à 10:45
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 - 8 janv. 2013 à 11:29
Bonjour tout le monde ,
ce que je veux faire c'est : en rentrant un nom d'une société dans un userform (et aussi d'autres données ) si cette société existe déjà il va juste ajouter une nouvelle ligne en dessous et qui remplisse la ligne mais si elle n'existe pas qui m'ajoute une ligne en dernier de mon tableau
le code marche bien sauf que quand j'entre un nom d'une société existante il m'ajoute une ligne en dessous de cette société mais aussi à la fin du tableau ,c'est comme s'il exécutait les deux codes

Private Sub chx_Click()
Application.ScreenUpdating = False

'recherche des cellules

Cells(1, 1).Select

On Error GoTo erreur
Cells.Find(What:=UserForm2.vdr, After:=ActiveCell).Activate

If Selection.Offset(1, 0) = "" Then
ligne = Selection.Offset(1, 0).Row
Else
ligne = Selection.End(xlDown).Row + 1
End If
Rows(ligne).Select
Selection.Insert Shift:=xlDown
Sheets("VENTE").Range("A" & ligne) = UserForm2.vdr.Value
Sheets("VENTE").Range("B" & ligne) = UserForm2.emt.Value
Sheets("VENTE").Range("C" & ligne) = UserForm2.nat.Value
Sheets("VENTE").Range("D" & ligne) = UserForm2.code.Value
Sheets("VENTE").Range("F" & ligne) = UserForm2.txfac.Value
Sheets("VENTE").Range("G" & ligne) = UserForm2.dtem.Value
Sheets("VENTE").Range("H" & ligne) = UserForm2.dtech.Value
Sheets("VENTE").Range("K" & ligne) = UserForm2.txcrb.Value
Sheets("VENTE").Range("I" & ligne) = UserForm2.qt.Value
Sheets("VENTE").Range("J" & ligne) = UserForm2.sprdini.Value
Sheets("VENTE").Range("L" & ligne) = UserForm2.pachat.Value
Sheets("VENTE").Range("M" & ligne) = Sheets("VENTE").Range("L" & ligne).Value + Sheets("VENTE").Range("K" & ligne).Value

erreur:

ligne = Range("A20000").End(xlUp).Row + 3
Rows(ligne).Select
Selection.Insert Shift:=xlDown
Sheets("VENTE").Range("A" & ligne) = UserForm2.vdr.Value
Sheets("VENTE").Range("B" & ligne) = UserForm2.emt.Value
Sheets("VENTE").Range("C" & ligne) = UserForm2.nat.Value
Sheets("VENTE").Range("D" & ligne) = UserForm2.code.Value
Sheets("VENTE").Range("F" & ligne) = UserForm2.txfac.Value
Sheets("VENTE").Range("G" & ligne) = UserForm2.dtem.Value
Sheets("VENTE").Range("H" & ligne) = UserForm2.dtech.Value
Sheets("VENTE").Range("K" & ligne) = UserForm2.txcrb.Value
Sheets("VENTE").Range("I" & ligne) = UserForm2.qt.Value
Sheets("VENTE").Range("J" & ligne) = UserForm2.sprdini.Value
Sheets("VENTE").Range("L" & ligne) = UserForm2.pachat.Value
Sheets("VENTE").Range("M" & ligne) = Sheets("VENTE").Range("L" & ligne).Value + Sheets("VENTE").Range("K" & ligne).Value

Application.ScreenUpdating = True
End Sub

pouvez vous m'aider . Merci

2 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
8 janv. 2013 à 11:16
Bonjour,

avec un fichier de test ça aurait été mieux.

Ce n'est pas comme si, les 2 codes sont exécutés puisque que tu ne quittes pas le sub avant l'étiquette erreur:
Ajouter devant Exit Sub

Mais tu n'a pas besoin d'un contrôle d'erreur pour traiter ça, affecte le .find à une variable range et teste son contenu après.
De plus j'ajouterai 2 paramètres au .find
Ce qui donnerait :
    Dim c As Range
    ' ....
    Set c = Cells.Find(What:=UserForm2.vdr, After:=ActiveCell, LookIn:=xlValues, lookat:=xlWhole)
    If c Is Nothing Then
        ' nouveau
        ' ...
    Else
        ' existant
        ' ...
    End If

c est ensuite utilisable comme une référence de cellule.
Tu peux faire If c.Offset(1, 0) = "" Then
etc

eric
0
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
8 janv. 2013 à 11:29
Merci beaucoup ERIIIC

ça a marché pour le Exit sub

je vais essayer aussi le code que tu m'a proposé

merci
0