VBA : Problème fonction GoTo

Garcinou Messages postés 7 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 18 juillet 2011 - 19 janv. 2010 à 17:58
Garcinou Messages postés 7 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 18 juillet 2011 - 20 janv. 2010 à 09:47
Bonjour,

J'ai un petit souci avec la fonction GoTo de VB pour Excel.
Voici une petite explication du problème :
Je rentre dans un UF une date et 3 données associées (donc 4 données), que je dois insérer dans une feuille du fichier excel (1ère colonne : date et les 3 suivantes les données numériques). Si la date existe déjà alors je souhaite demander confirmation avant d'écraser les données dans le tableau, par contre si elle n'existe pas, je souhaite ajouter la nouvelle ligne dans le tableur.
Seulement si la dernière ligne remplie est celle du 15/01/2010 et que les valeurs à ajouter sont celles du 19/01/2010, il faut que je remplisse 4 lignes plus bas que celle du 15/01/2010...

Pour avoir une idée plus précise, voici le code correspondant :

Public Sub EDCB1_Click()

On Error GoTo NonTrouve

CelluleTrouvee = Worksheets("Donnees").Columns(1).Find(EDDTPicker.Value)

'Si le .find trouve

MsgBox "Trouvé"
PrintLine = CelluleTrouvee.Row

A = MsgBox("Ecraser les données existantes ?", vbYesNo)

If (A = 6) Then

GoTo LaFin

Else

Unload Me
Edition.Show

End If

'Si le .find ne trouve pas

NonTrouve:

MsgBox "Pas Trouvé"

LastLine = (Worksheets("Donnees").Columns(1).Find("", [A1], , , xlByRows, xlByNext).Row) - 1
PrintLine = LastLine + DateDiff("d", Worksheets("Donnees").Cells(LastLine, 1).Value, EDDTPicker.Value)

'La fin

LaFin:

MsgBox "La fin"

Worksheets("Donnees").Cells(PrintLine, 1).Value = EDSBTMin.Value
Worksheets("Donnees").Cells(PrintLine, 2).Value = EDSBTMax.Value
Worksheets("Donnees").Cells(PrintLine, 3).Value = EDSBPrec.Value
Worksheets("Donnees").Cells(PrintLine, 4).Value = EDComments.Value

End Sub



Les MsgBox sont des indicateurs, donc je sais que le premier GoTo fonctionne (GoTo NonTrouve) par contre le second ne marche pas (GoTo LaFin)...

J'ai utilisé la fonction GoTo car je ne savais pas comment gérer le fait que le .Find ne trouve pas la date (ce qui est une possibilité normale dans mon cas)

J'espère être clair, Merci d'avance

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 janv. 2010 à 18:18
Bonjour,
Ton On Error GoTo NonTrouve est icui maladroit et inutile...
Procède plutôt ainsi (exemple) :
Dim CelluleTrouvee as Range (une cellule est un Range)
set CelluleTrouvee = Worksheets("Donnees")........
If not Celluletrouvee is Nothing Then ' si une cellule répondant à ce critère a été trouvée (sinon c'est Nothing)
   'tes instructions....
Else
   msgbox "pas trouvée"
end if
set celluletrouyvee = Nothing ' (pour libérer la mémoire)

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 janv. 2010 à 18:21
Pareil pour ton goto lafin ! un if then Else !
En règle générale ; Goto = "code spaghetti" à éviter !

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Garcinou Messages postés 7 Date d'inscription dimanche 26 avril 2009 Statut Membre Dernière intervention 18 juillet 2011
20 janv. 2010 à 09:47
Merci beaucoup!

Ca fonctionne parfaitement... En fait le problème ne venait pas de la fonction GoTo mais du fait de l'utiliser, j'ai compris qu'il vaut mieux l'éviter (quand on sait comment faire).
J'ai simplement eu un problème de compilation après (erreur 336) mais il est résolu!

Merci encore, à bientôt
0
Rejoignez-nous