Problème d'accés aux feuilles Excel

mulraf Messages postés 18 Date d'inscription vendredi 24 février 2006 Statut Membre Dernière intervention 12 mai 2006 - 21 mars 2006 à 08:19
fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009 - 21 mars 2006 à 10:43
Débutant en VB, j'ai crée une application qui effectue un traitement sur un fichier pour afficher des valeurs dans plusieurs pages d'un classeur, le problème c'est la gestion d'erreur sur une suppression d'une feuille Excel. En fait je rentre bien dans ma routine "On Error GoTo erreur", le traitement se passe bien je crée la feuille qui a été malheureusement effacé avec son "Name" et "CodeName" mais par contre lorsque je retourne sur mon programme principal cela me fait planter Excel.

En fait le problème c'est que j'ai une vingtaine de feuilles, donc une vingtaine de possibilités, soit c'est la feuil01.Name qui est manquante, soit la deuxième ...
Prenons l'exemple Feuil01.Name manquante on va aller à l'étiquette erreur
reprise:

On Error GoTo erreur

Tableau_feuilles_valeurs(0, 0) = Feuil01.Name
Tableau_feuilles_valeurs(0, 1) = Feuil02.Name
Tableau_feuilles_valeurs(0, 2) = Feuil03.Name
Tableau_feuilles_valeurs(0, 3) = Feuil04.Name
Tableau_feuilles_valeurs(0, 4) = Feuil05.Name
Tableau_feuilles_valeurs(0, 5) = Feuil06.Name
Tableau_feuilles_valeurs(0, 6) = Feuil07.Name
Tableau_feuilles_valeurs(0, 7) = Feuil08.Name
Tableau_feuilles_valeurs(0, 8) = Feuil09.Name
Tableau_feuilles_graph(0, 0) = Feuil11.Name
Tableau_feuilles_graph(0, 1) = Feuil12.Name
Tableau_feuilles_graph(0, 2) = Feuil13.Name
Tableau_feuilles_graph(0, 3) = Feuil14.Name
Tableau_feuilles_graph(0, 4) = Feuil15.Name
Tableau_feuilles_graph(0, 5) = Feuil16.Name
Tableau_feuilles_graph(0, 6) = Feuil17.Name
Tableau_feuilles_graph(0, 7) = Feuil18.Name
Tableau_feuilles_graph(0, 8) = Feuil19.Name
On Error GoTo 0

Pour cela dans ma gestion d'erreur je regarde les pages qui restent sur mon classeur et ensuite je crée toutes les pages qui me manque, dans notre exemple je crée la feuille Feuil01.Name avec son nom T01

erreur:

Dim index As Boolean
Dim m, n, o, p As Integer
Dim Codename_feuille As String
Dim Name_feuille As String
Dim Feuilles As Worksheet
Dim Tableau_nom_feuille_present(1, 20) As String
Dim Tableau_nom_feuille_absent(1, 20) As String
m = 0
For Each Feuilles In ThisWorkbook.Worksheets
Tableau_nom_feuille_present(0, m) = Feuilles.CodeName
Tableau_nom_feuille_present(1, m) = Feuilles.Name
m = m + 1
Next
Erase Tableau_nom_feuille_absent
p = 0
For n = 0 To 9 Step 1
index = False
Codename_feuille = "Feuil0" + CStr(n)
For o = 0 To 19 Step 1
If Codename_feuille = Tableau_nom_feuille_present(0, o) Then
index = True
Exit For ElseIf (o 19 And index False) Then
Tableau_nom_feuille_absent(0, p) = Codename_feuille
If Codename_feuille = "Feuil00" Then
Tableau_nom_feuille_absent(1, p) = "Constantes"
ElseIf Codename_feuille = "Feuil01" Then
Tableau_nom_feuille_absent(1, p) = "T01"
ElseIf Codename_feuille = "Feuil02" Then
Tableau_nom_feuille_absent(1, p) = "T02"
ElseIf Codename_feuille = "Feuil03" Then
Tableau_nom_feuille_absent(1, p) = "T03"
ElseIf Codename_feuille = "Feuil04" Then
Tableau_nom_feuille_absent(1, p) = "T04"
ElseIf Codename_feuille = "Feuil05" Then
Tableau_nom_feuille_absent(1, p) = "T05"
ElseIf Codename_feuille = "Feuil06" Then
Tableau_nom_feuille_absent(1, p) = "T06"
ElseIf Codename_feuille = "Feuil07" Then
Tableau_nom_feuille_absent(1, p) = "T07"
ElseIf Codename_feuille = "Feuil08" Then
Tableau_nom_feuille_absent(1, p) = "T08"
ElseIf Codename_feuille = "Feuil09" Then
Tableau_nom_feuille_absent(1, p) = "T09"
End If
p = p + 1
End If
Next o
Codename_feuille = "Feuil1" + CStr(n)
For o = 0 To 19 Step 1
If Codename_feuille = Tableau_nom_feuille_present(0, o) Then
index = True
Exit For ElseIf (o 19 And index False) Then
Tableau_nom_feuille_absent(0, p) = Codename_feuille
If Codename_feuille = "Feuil10" Then
Tableau_nom_feuille_absent(1, p) = "Outils"
ElseIf Codename_feuille = "Feuil11" Then
Tableau_nom_feuille_absent(1, p) = "G01"
ElseIf Codename_feuille = "Feuil12" Then
Tableau_nom_feuille_absent(1, p) = "G02"
ElseIf Codename_feuille = "Feuil13" Then
Tableau_nom_feuille_absent(1, p) = "G03"
ElseIf Codename_feuille = "Feuil14" Then
Tableau_nom_feuille_absent(1, p) = "G04"
ElseIf Codename_feuille = "Feuil15" Then
Tableau_nom_feuille_absent(1, p) = "G05"
ElseIf Codename_feuille = "Feuil16" Then
Tableau_nom_feuille_absent(1, p) = "G06"
ElseIf Codename_feuille = "Feuil17" Then
Tableau_nom_feuille_absent(1, p) = "G07"
ElseIf Codename_feuille = "Feuil18" Then
Tableau_nom_feuille_absent(1, p) = "G08"
ElseIf Codename_feuille = "Feuil19" Then
Tableau_nom_feuille_absent(1, p) = "G09"
End If
p = p + 1
End If
Next o
Next n
For m = 0 To p - 1 Step 1
Set Feuilles = Worksheets.Add
Feuilles.Name = Tableau_nom_feuille_absent(1, m)
Change_CodeName Name:=Feuilles.Name, CodeName:=Tableau_nom_feuille_absent(0, m)
Next m
GoTo reprise

Après ce traitement on retourne à l'étiquette reprise et la le problème, la ligne suivante :
Tableau_feuilles_valeurs(0, 0) = Feuil01.Name
me donne une erreur qui me fait de nouveau rentrer dans ma routine de gestion d'ereur.
Apparement après création d'une nouvelle feuille avec Name et CodeName, le simple fait de faire un MsgBox Feuil01.Name me plante mon programme.
J'espère que quelqu'un à une solution, parce que là je suis désespéré...

Annexe : Fonction de création de feuille, je dois répéter deux fois l'instruction souligné pour ne pas avoir de problème de création de feuilles, peut être le problème vient de là ?

Private Function Change_CodeName(Name As String, CodeName As String)
On Error Resume Next
With ThisWorkbook
.VBProject.VBComponents(.Worksheets(Name).CodeName).Name = CodeName
End With
With ThisWorkbook
.VBProject.VBComponents(.Worksheets(Name).CodeName).Name = CodeName
End With
On Error GoTo 0

End Function

En tout cas merci d'avance

1 réponse

fred.toto Messages postés 73 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 4 mars 2009
21 mars 2006 à 10:43
Salut,


j'crois que le problème vient de la déclaration de tes tableaux. Tu déclares ton tableau de la façon suivante

Dim Tableau_nom_feuille_present(1, 20) As String

et ici tu veux mettre une valeur dans l'indice 0 de ton tableau alors que d'après ta déclaration il ne débute qu'en colonne 1

m = 0
For Each Feuilles In ThisWorkbook.Worksheets
Tableau_nom_feuille_present(0, m) = Feuilles.CodeName
Tableau_nom_feuille_present(1, m) = Feuilles.Name
m = m + 1
Next

C'est des choses qui arrivent ça
Fred
0
Rejoignez-nous