Erreur de compilation , etiquette non définie dans fichier excel !!!

yolojo

XLDnaute Occasionnel
Bonjour à tous,
Il y a quelque années, un généreux membre (dont j'ai égaré le nom) m'avait développé un fichier excel avec un formulaire de commande qui fonctionnait à merveille. Malheureusement depuis peu, ce fichier ne fonctionne plus. Lorsque je lance le formulaire, une erreur sur le débogage apparaît:

"Erreur de compilation , etiquette non définie"

et comme malheureusement je n'y comprend rien, j'aurais besoin de votre genie dans ce domaine. Bien sûr, ce n'est pas parce que je ne comprend pas le language VBA, que je ne souhaite pas savoir d'où vient le problème. Je vous joint le fichier.
Merci d'avance
 

Pièces jointes

  • Commande.xls
    277.5 KB · Affichages: 43

Papou-net

XLDnaute Barbatruc
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonsoir yolojo,

L'erreur de compilation vient de l'avant-dernière ligne qui était passée en commentaire:

Code:
Private Function SousDict(ByVal C As Long) As Dictionary ' (Récursif)
Dim Lignes() As Long, N As Long, ArgR As Variant, TypR As Integer
On Error GoTo Erreur
Set SousDict = New Dictionary
If C < CMax Then ' Si ce n'est pas le dictionnaire de la dernière colonne qu'on est en train de construire :
   Do: TypeEtVal(Typ(C), Arg(C)) = TabDico(L, C) ' Note chaque sous-clé courante pour les futurs tests de ruptures de séquence.
      SousDict.Add Key:=Arg(C), Item:=SousDict(C + 1) ' ICI, APPEL RÉCURSIF. Affecte à cette sous-clé le sous dictionnaire de la colonne suivante.
      Loop Until Rupt < C ' jusqu'à rupture de séquence sur une colonne précédente (il est alors forcément complet) voire sur 0 si tout est fini.
Else ' On est en train de construire le dictionnaire de la dernière colonne, celui des listes de lignes, une liste pour chaque dernière sous-clé.
   ReDim Lignes(1 To 512) As Long
   Do ' Niveau dictionnaire tant que le niveau de rupture n'est pas inférieur à C, qui est donc ici CMax, la dernière colonne.
      TypeEtVal(Typ(C), Arg(C)) = TabDico(L, C): N = 0 ' Note l'argument courant pour les tests de ruptures 6 lignes plus bas.
      Do ' Niveau sous-clé tant que le niveau de rupture est supérieur à C, c'est à dire pas de rupture car c'est un doublon.
         If N >= UBound(Lignes) Then ReDim Preserve Lignes(1 To (N \ 64 + 1) * 64) As Long
         N = N + 1: Lignes(N) = L ' Note la ligne dans la table en construction.
         If TIdx.Actif Then ' Si on n'était pas encore au dernier élément indexé :
            L = TIdx.Suivant ' On demande le numéro de ligne du suivant, puis on cherche la rupture par rapport à tous les Arg(1 à CMax) notés …
            For Rupt = 1 To CMax: TypeEtVal(TypR, ArgR) = TabDico(L, Rupt) ' …aussi bien dans les appelant récursifs qu'ici plus haut.
               If TypR <> Typ(Rupt) Then Exit For ' Il y a rupture si la nouvelle sous-clé n'est plus du même type de variant.
               If ArgR <> Arg(Rupt) Then Exit For ' Il y a évidemment rupture si la nouvelle sous-clé n'a plus la même valeur.
               Next Rupt ' Si on va jusqu'au bout de la boucle, c'est qu'il s'agit encore d'un doublon et Rupt se retrouve = CMax + 1
         Else:      Rupt = 0: End If ' Si on était sur le dernier, tous les Loop Until Rupt < C devront se terminer dans tous les appels récursifs.
         Loop Until Rupt <= C ' Niveau sous-clé terminé s'il y a une rupture quelconque.
      ReDim Preserve Lignes(1 To N) As Long ' Ajustement de la table des lignes qu'on vient de construire au strict nécessaire.
      SousDict.Add Key:=CStr(Arg(C)), Item:=Lignes ' Et son ajout comme Item au dictionnaire, sous-clé Arg(C) toujours encore notée quoique ancienne maintenant.
      Loop Until Rupt < C ' Niveau dicionnaire terminé si la rupture est à un niveau inférieur.
   End If
Exit Function ' Rend la main soit à DictionnArbo si C = 1, soit à l'appelant récursif si C > 1, finalisant ainsi son
              ' propre SousDict.Add Key:=ArgC, Item:=SousDict(C + 1) qui est le sous-dictionnaire qu'on vient d'élaborer !
Erreur: MsgBox Err.Description: Stop: Resume  ' <--- cette ligne était précédée d'une apostrophe
End Function
Par contre, je te conseille de supprimer l'instruction Stop: qui a pour effet d'ouvrir l'éditeur VB ce qui ne devrait jamais se produire en cours d'utilisation.

A +

Cordialement.
 

jecherche

XLDnaute Occasionnel
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonjour,

Dans "Private Function SousDict(ByVal C As Long) As Dictionary ' (Récursif)"
à la deuxième ligne, c'est écrit : "On Error GoTo Erreur"

Mais à la fin, l'étiquette est désactivée : " 'Erreur: MsgBox Err.Description: Stop: Resume" ...il a été mis en commentaire ... par erreur probablement ... une erreur par erreur ... :cool:


Jecherche
 

yolojo

XLDnaute Occasionnel
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Merci beaucoup pour vos réponses aussi rapides.
J'ai modifié comme vous me l'avez conseillé, mais maintenant lorsque je lance le formulaire, excel m'affiche:

"Cette clé est déjà associé à un élément de cette collection"

Si vous avez une idée ?
Merci
 

Dranreb

XLDnaute Barbatruc
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonsoir.
Trouvé la cause: La cellule B95 contient la valeur 1 au lieu du texte "1" comme les autres.
Pareil en B229, B230. En B439 c'est 2 au lieu de "2"

Remarque: c'est une des deux raisons pour lesquelles je n'utilise plus de Dictionary pour les ComboBox liées, mais ce que j'appelle des 'Sujet'. C'est tout à base de tableaux qui supportent les doublons dus à ce genre de maladresse, tout comme les ComboBox elles même d'ailleurs.
 
Dernière édition:

yolojo

XLDnaute Occasionnel
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonsoir Dranreb, je pense que tu as raison et pour cause, il me semble que c'est toi le généreux membre qui m'a crée ce fichier.
Je vais tout revérifier
Encore merci et bravo
 

yolojo

XLDnaute Occasionnel
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonjour à tous,
J'ai essayé de faire les modifications qui sont à la sources de cette erreur sauf que je ne peux pas accéder à mon fichier, l'erreur reviens sans cesse et je n'ai plus la main pour quoi que ce soit. De plus, comme conseillé, j'ai supprimé l'instruction qui posait problème dans vba, je n'ai plus accès à l'éditeur même avec alt-F11.
J'ai peur que mon fichier soit vérolé. ..
Help !
 

jecherche

XLDnaute Occasionnel
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonjour,

Tu as toujours la copie qui est ici sur le forum.

De plus, il est important de toujours travailler sur des copies.

Si tu penses que ta machine puisse être infectée ... tu peux la faire vérifier ... ICI ...


Jecherche
 

Dranreb

XLDnaute Barbatruc
Re : Erreur de compilation , etiquette non définie dans fichier excel !!!

Bonjour.
Il ne fallait surtout pas enlever le Stop. C'est lui qui m'a permis d'identifier rapidement le problème en déroulant en pas à pas à partir de lui. Il n'y avait aucun problème dans la programmation. C'était uniquement les données qui n'allaient pas (type de données contradictoires pour les valeurs de ComboBox "1" et "2").

Vous pouvez résoudre le problème en mettant en B3, à propager sur 590 lignes :
Code:
=NB.SI($C$3:$C3;$C3)
Ou alors si vous tenez absolument à ce que ce soient des textes, mais je me demande bien pourquoi :
Code:
=TEXTE(NB.SI($C$3:$C3;$C3);"0")

J'ai retrouvé une trace. À l'origine le numéro d'ordre dans la marque n'était pas rangé comme texte.
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
526

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal