XL 2019 Erreur "Déclaration existante dans la portée en cours"

Hanjen

XLDnaute Nouveau
Bonjour à tous,
Je fais face à ce problème, j'ai dupliqué des lignes de macro selon une donnée initiale entré par l'utilisateur.
Je me retrouve avec cette erreur.
VBA me souligne l'erreur sur une ligne .
Je ne sais pas si je peux appeler ça une "instruction" mais ces lignes permettent de lire une donnée dans une inputbox et si la donnée n'est pas de la forme attendu on demande "goto reprise".
Le fait de l'avoir dupliqué VBA n'aime pas ça. Savez-vous pourquoi?

Je m'excuse, je ne peux vous envoyer le fichier car le projet est bien avancé et confidentiel.
Merci pour votre aide :)
1621106500630.png


1621106316497.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Hanjen,
En dupliquant les lignes, vous avez aussi dupliqué "reprise:" ?
Car dans ce cas vous avez deux labels "reprise" et ça c'est une erreur.
Baptisez le second reprise2 et modifiez le Goto reprise2.
Un label ne peut être qu'unique, sinon comment le VBA sait sur quel reprise il doit aller ?
Enfin, un Goto c'est moyen, il faut au maximum l'éviter.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Au débug c'est toujours complexe de savoir d'où on vient, surtout si le code entre label et le ou les goto est long.
D'autant qu'on peut souvent le remplacer par une autre structure comme un while wend ou autre.
C'est une règle générale de base. Mais comme on n'a qu'une partie parcellaire du code, impossible de vous proposer autre chose.:)
 

Hanjen

XLDnaute Nouveau
Bonjour @sylvanu,
Voici les quelques lignes de code qui ont du sens :)



VB:
reprise:
                Ident = Trim(Application.InputBox("Entrez la reference de l'identifant :", "Reference Identifiant", Type:=1))
                If PlgRecherche.Find(Ident) Is Nothing Or Ident = False Or IsError(Ident) Then
                    MsgBox "Valeur incorrecte ou non trouvée dans la plage de Recherche", vbExclamation
                    GoTo reprise
                Else

                    Ligne = PlgRecherche.Find(Ident).Row
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Une possibilité avec une fonction perso.
Dans le code :
VB:
        Do: Reponse = Question(PlgRecherche)
            If rep = 0 Then MsgBox "Valeur incorrecte ou non trouvée dans la plage de Recherche", vbExclamation Else Exit Do
        Loop
        Ligne = Reponse
En fonction perso :
Code:
Function Question(Plage) ' Renvoie 0 si Erreur sinon renvoie N° de ligne trouvé
    Ident = Trim(Application.InputBox("Entrez la reference de l'identifant :", "Reference Identifiant", Type:=1))
    If Plage.Find(Ident) Is Nothing Or Ident = False Or IsError(Ident) Then Question = 0 Else Question = Plage.Find(Ident).Row
End Function
On a le même nombre de lignes de codes
La fonction peut être appelée par plusieurs modules.
Il n'y a pas de Goto.
It was just for the fun.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo