BABUDROME
Messages postés151Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention19 avril 2016
-
24 nov. 2015 à 19:13
BABUDROME
Messages postés151Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention19 avril 2016
-
24 nov. 2015 à 23:14
Bonjour,
Je ne comprend plus... et je viens soumettre ma programmation pour qu'un plus compétent que moi me dise où est l'erreur.
C'est peut-être tout bête...
Voilà mon programme :
Sub Workbook_Open() Chm = Path + "\": Cr = Chr(13): Qot = Chr(34): Com = Chr(44): FeuilleEnCours = "" ' "LogiPix" FicPb = Chm + NLgpPb: FicDupPb = Chm + NLgpDupPb: FicSol = Chm + NLgpSol: FicDupSol = Chm + NLgpDupSol FicQPb = Chm + NQueuPb: FicQSol = Chm + NQueuSol: DimagesPb = Chm + NLgpImPb + "\": DimagesChemins = Chm + NLgpImChm + "\" FicOpt = Chm + NLgpOpt: FicTm3 = Chm + NLgTm3: NomClasseur = Name: FExe = Chm + Name: initTbAdr x = FileDateTime(FExe): RéfVersion = "Version " & N°Version & " du " & Left(x, 10) + " à " + Right(x, 8) ' SetCellule stocke les informations dans des cellules réservées de la feuille LGP SetCellule LGP, "Version", RéfVersion: SetCellule LGP, "Chemin_Classeur", FExe ' Active fenêtre LGP via la fonction (sans problème) ... : LdListeNoms
'dans Module Const LGP="nom feuil1", LPB="nom feuil4" Public FeuilleEnCour$, x$,Cr$,Qot$,Com$,FeuilleEnCours$,...
Sub SetCellule(ByVal Feuil$, ByVal Adr$, ByVal Valeur) If Adr = "" Then Exit Sub On Error GoTo ER: Activer (Feuil) : Range(Adr).Value = Valeur: GoTo 9 ' cette activation fonctionne bien ER: Debug.Print Err, Error: Stop Resume 9 9: On Error GoTo 0: End Sub
Sub Activer(F$) On Error GoTo ER If FeuilleEnCours <> F Then Worksheets(F).Activate: Worksheets(F).Visible = True: FeuilleEnCours = F GoTo 9 ER: If Err = 20 Then Resume 9 Debug.Print "activer(" + F + ") "; Err, Error: Resume 9 9: On Error GoTo 0: End Sub '
Sub LdListeNoms() 1: Activer LPB: ActiveSheet.LoadListeNoms ' celle(ci génère l'erreur 40036 End Sub
'dans feuil4 Public Sub LoadListeNoms() Activer (LPB): Range("A2:L1000").Select: Selection.ClearContents For i = 0 To NbPb x = "A" + Trim(i + 2): Range(x).Value = NumPb(i) 'N° du Pb x = "B" + Trim(i + 2): Range(x).Value = NomPb(i) 'Nom du Pb ... x = "J" + Trim(i + 2): Range(x).Value = Trim(Score(i)) 'Score du meilleur gagnant du Pb x = "K" + Trim(i + 2): Range(x).Value = OrgPos(i) 'Position du Pb dans fenêtre de jeu Next
1) dans une 1ère phase, la fonction 'Activer LGP' fonctionne correctement via la fonction 'SetCellule LGP, adr, valeur'
2) à l'appel de la routine 'LdListeNoms', la même fonction pour la feuille LPB me délivre l'erreur 40036.
Je ne vois pas pourquoi ?
Je n'ai que 2 feuilles dans mon classeur (feuille1 et feuille4).
Merci d'avance, mais je tourne en rond depuis 2 jours...
Bonjour,
cette ligne :
ActiveSheet.LoadListeNoms ne serait compréhensible que si LoadListeNoms était un membre d'un objet WorkSheet. Ce qui n'est pas le cas, puisqu'il s'agit d'une procédure !
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Je vais essayer (en aveugle sans ton classeur) de mettre de l'ordre dans tout cela :
Dans ton module, uniquement ceci :
'dans Module Public Const LGP As String = "nom feuil1" Public Const LPB As String = "nom feuil4" Public FeuilleEnCour As String, x As String, Cr As String, Qot As String, Com As String, FeuilleEnCours As String ', .... j'ignore ce qui vient là ..L. Public Sub SetCellule(ByVal Feuil As String, ByVal Adr As String, ByVal Valeur) If Adr = "" Then Exit Sub With Worksheets(Feuil) .Range(Adr).Value = Valeur .Visible = True End With End Sub
Public Sub LdListeNoms() With Worksheets(LPB) .Range("A2:L1000").ClearContents For I = 0 To NbPb x = "A" & Trim(I + 2) .Range(x).Value = NumPb(I) 'N° du Pb x = "B" & Trim(I + 2) .Range(x).Value = NomPb(I) 'Nom du Pb '... x = "J" & Trim(I + 2) .Range(x).Value = Trim(Score(I)) 'Score du meilleur gagnant du Pb x = "K" & Trim(I + 2) .Range(x).Value = OrgPos(I) 'Position du Pb dans fenêtre de jeu Next End With End Sub
ce code est à écrire en supprimant la sub Activer (devenue totalement inutile) de ton module
Et en supprimant la sub LoadListeNoms() de ta feuil4
Il te faudra bien évidemment également déclarer en public dans ton module tes tableaux NumPB, NomPb, Score et OrgPos et ta variable NbPb
Observe : je ne travaille pas à coups de Select, Activate, Selection, etc ...
J'ai supprimé par ailleurs toutes les gestions d'erreur, car je ne vois pas à quoi elles servirait si la feuille Feuil4 existe sous ce nom.
EDIT perds cette habitude que tu as prise de mettre sur une même ligne deux instructions séparées par un ":". Ce n'est pas une faute, mais cela gêne considérablement le suivi en lecture/correction
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
BABUDROME
Messages postés151Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention19 avril 2016 24 nov. 2015 à 23:14
Bonsoir.
Merci. J'ai encore bien des choses à apprendre...
Je vais mettre en application tes recommandations : éliminer les Activate entre autres et en particulier le regroupement des instructions sur une même ligne (fait pour minimiser les tailles (nombre de lignes) des routines.
Je dois pouvoir simplifier.
A + et encore Merci