cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 2011
-
22 mai 2008 à 12:00
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
29 mai 2008 à 23:56
Bonjour à tous,
J'ai realisé un prog qui gère un classeur excel, il permet d'ouvrir un classeur et de créer des pages afin d'écrire dessus.
Mon problème est que lors de la création du fichier excel, il y a 3 feuilles (par défaut) qui sont présentes mais lorsque je veut écrire sur la 4 eme feuille qui n'existe pas encore, mon programme me dit "Erreur d'execution '9' indice en dehors de la plage ??
Pourtant j'utilise une fonction qui permet de creer des nouvelles pages qui est :
VariablePage = VariablePage + 1
MsgBox (VariablePage)
a.Workbooks.Add
With a.ActiveWorkbook.Worksheets(VariablePage)
End With
Quelqu'un aurait une idée ?
Jack.
A voir également:
Problème lors de la creation d'une nouvelle page excel (4eme page)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 29 mai 2008 à 23:56
Dans ton bout de code, tu fais 2 Add
Set oSh = Sheets.Add
Sheets.Add.Name = VariablePage
Essaie plutôt comme ceci
oWk.Sheets.Add After:=Sheets(Sheets.Count) 'partie en bleu pour la placer à la fin
Set oSh = ActiveSheet
oSh.Name = "NomDeBase" & VariablePage
Et quand tu as besoin
oSh.Activate
ou
Sheets(oSh.Name).Activate
ou
Sheets("NomDeBase" & VariablePage).Activate
Bien sûr, si tu crées plusieurs pages, oSh va équivaloir à la dernière feuille créée.
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 22 mai 2008 à 12:07
salut,
With a.ActiveWorkbook.ActiveSheet
là tu ne devrais plus avoir de problème.
Le mieux, serait parès insertion de cette nouvelle feuille, de la renommer, comme ça pour la reselectionner au besoin, tu gères avec le nom de la feuille et non plus l'indice
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 23 mai 2008 à 10:43
Tu n'as pas besoin de déclarer 2 Application (oExcel et a)
Laisse tomber le "a" qui, de toutes façons, n'est pas très explicite...
Si tu veux utiliser les références, utilise New et laisse tomber CreateObject.
Si tu ne veux pas utiliser les références, déclare tes objets As Object et utilise CreateObject
Avec référence à Excel Dim oExcel As New Excel.Application
Dim oWk As Workbook
Dim oSh As Worksheet
Dim LigneVide As Variant
Set oWk = oExcel.Workbooks.Open("le fichier")
Set oSh = oWk.Sheets("Feuil1")
Sans références
Dim oExcel As Object
Dim oWk As Object
Dim oSh As Object
Set oExcel = CreateObject("Excel.Application")
Set oWk = oExcel.Workbooks.Open("le fichier")
Set oSh = oWk.Sheets("Feuil1")
Et n'oublie pas de bien fermer ces objets et de les mettre à Nothing avant de quitter pour éviter que la session Excel ne demeure active dans les "process"
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 27 mai 2008 à 17:18
Bonjour MPI,
J'ai testé les differentes solutions que tu me proposait mais en vain j'ai toujours le même message d'erreur qui apparait ("Erreur d'execution '9' indice en dehors de la plage") ??
Voila le code que j'ai fait :
Public LigneVide As Integer
Public VariablePage As Integer
Dim oExcel As New Excel.Application
Dim oWk As Workbook
Dim oSh As Worksheet
Set oExcel = CreateObject("Excel.Application")
Set oWk = ActiveWorkbook
If Dir(App.Path & "\application13.xls") = "" Then
oExcel.Visible = True
oExcel.Workbooks.Add
VariablePage = 1
Else
oExcel.Visible = True
Workbooks.Open App.Path & "\application13.xls"
End If
Set oWk = ActiveWorkbook
LigneVide = oWk.Sheets(VariablePage).Cells(Rows.Count, "A").End(xlUp).Row + 1
If LigneVide <= 5 Then
oWk.Sheets(VariablePage).Range("A" & LigneVide) = Text2
ElseIf LigneVide >= 5 Then
VariablePage = VariablePage + 1
Set oSh = oWk.Sheets(VariablePage)
MsgBox (VariablePage)
oExcel.Workbooks.Add
Set oSh = oWk.Sheets(VariablePage)
oWk.Sheets(VariablePage).Range("A2") = Text2
End If
Text4 = ("A" & LigneVide)
oExcel.DisplayAlerts = False
oWk.SaveAs App.Path & "\application13.xls"
oWk.Close False
oExcel.Quit
Set oWk = Nothing
Set oExcel = Nothing
Set oSh = Nothing
End If
End Sub
Peut être ai-je mal écrit ou oublier quelque chose ?
Si quelqu'un aurait une idée
Merci
Jack.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 27 mai 2008 à 20:41
salut,
ton problème est que tu appelles une feuille (par l'index numérique) qui n'existe pas.
Appelle là par son nom (Sheets("Feuil2").Select, par exemple)
sinon :
<strike>Set oExcel = CreateObject("Excel.Application")</strike>
' inutile, le New dans ta déclaration fait créer une instance de l'appli dès utilisation de la variable
<strike>Set oWk = ActiveWorkbook</strike>
If Dir(App.Path & "\application13.xls") = "" Then
oExcel.Visible = True
Set oWk = oExcel.Workbooks.Add
VariablePage = 1
Else
oExcel.Visible = True
Set oWk = Workbooks.Open App.Path & "\application13.xls"
End If
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 28 mai 2008 à 11:44
Salut mortalino,
Mon problème est que je ne connait pas le numero de la feuille à appeller pour écrire dessus, c'est pour cela que j'ai utilisé une variable qui permet a mon prog de creer une nouvelle feuille et de l'appeller quand il en a besoin en incrementant cette variable (VariablePage)
Je ne comprend pas car j'arrive à creer, ouvrir, ecrire, sauvegarder sur les 3 premières pages sans aucun souci avant que l'erreur n'apparaisse ?
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 28 mai 2008 à 17:12
Bonjour MPI,
Je pense avoir tenu compte des conseils de Mortalino (effectivement je me melange les pinceaux car je débute en VB6) voila comment j'ai fait :
Dim oExcel As Excel.Application
Dim oWk As Workbook
Dim oSh As Worksheet
Set oWk = ActiveWorkbook
Set oSh = ActiveSheet
Set oExcel = CreateObject("Excel.Application") Par contre si je retire cette ligne comme me le conseille Mortalino mon programme ne fonctionne plus.
If Dir(App.Path & "\application18.xls") = "" Then
oExcel.Visible = True
Set oWh = oExcel.Workbooks.Add
VariablePage = 1
Else
oExcel.Visible = True
Workbooks.Open App.Path & "\application18.xls"
End If
Set oWk = ActiveWorkbook
LigneVide = oWk.Sheets(VariablePage).Cells(Rows.Count, "A").End(xlUp).Row + 1
If LigneVide <= 5 Then
oWk.Sheets(VariablePage).Range("A" & LigneVide) = Text2
ElseIf LigneVide >= 5 Then
VariablePage = VariablePage + 1
MsgBox (VariablePage)
oExcel.Workbooks.Add
Set oSh = oWk.Sheets(VariablePage)
oWk.Sheets(VariablePage).Range("A2") = Text2
End If
Text4 = ("A" & LigneVide)
oExcel.DisplayAlerts = False
oWk.SaveAs App.Path & "\application18.xls"
oWk.Close False
oExcel.Quit
Set oWk = Nothing
Set oExcel = Nothing
Set oSh = Nothing
End If
End Sub
Par contre je ne sais pas par quel moyen, j'ai reussi à écrire une fois sur la 4eme page et en fait elle apparait avant la page 1
puis décale les pages (c'est à dire page 4,1,2,3 et ce qu'il y avait sur la page 1 a été decalé sur la 4 puis ce qu'il y avait sur la page 2 a été décalé sur la 1 et ainsi de suite pour écrire sur la dernière page qui est pour lui la 3eme ???).
Sinon dans le dernier des cas qu'il m'arrive le prog créer un nouveau classeur avec les 4 pages dans le meme ordre que ci dessus mais la elles sont vide et porte un autre nom que celui que je voulais par exemple classeur1 qui lui (Mon fichier : \application18) s'est enregistré mais avec seulement 3 pages ?
J'espère avoir été clair.
Est ce que quelqu'un pourrait m'aider svp ?
Merci
Jack.
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 28 mai 2008 à 23:23
Salut Mortalino,
Je ne comprenais pas vraiment l'appel d'une page que tu m'as donné : (Sheets("Feuil2").Select, par exemple) mais je viens de découvrir l'enregistreur de macro d'Excel.
Effectivement un tel appel serait la solution, mais il faudrait que je remplace le "Feuil2" par ma VariablePage (par exemple Sheets("VariablePage").Select) mais je ne sais absolument pas comment l'écrire car cette façon ne fonctionne pas.
Est ce que quelqu'un sait si c'est possible d'utiliser une variable à la place du nom de la feuille ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 29 mai 2008 à 00:10
Pour la question que tu m'adresses, relis bien mon message concernant les références.
Si tu crées une référence, utilise NEW et déclare les variables As Excel.blabla
Si tu ne crées pas de référence, utilise CreateObject et déclare les variables As Object
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 29 mai 2008 à 00:18
Dans le code que je viens de relire, tu écris
Set oWh = oExcel.Workbooks.Add
Cette variable n'existe pas, si je ne me trompe...
Tu ne dois pas utiliser Option Explicit en haut de chacune des pages de codes que tu crées... vilain garçon !
Va dans le menu Outils de l'IDE, puis Options
Dans le 1er onglet, décoche le premier item "Vérification automatique de la syntaxe"
et coche le suivant "Déclaration des variables obligatoires"
Dans le premier cas, ça ne popera plus de message irritant quand tu fais une erreur de syntaxe mais va simplement mettre la ligne en couleur, ce qui est suffisant quant à moi.
Dans le 2e cas, tu sauras si tu nommes une variable avec le mauvais nom comme dans le cas que j'ai décrit...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Jacky7
Messages postés63Date d'inscriptionmardi 13 mai 2008StatutMembreDernière intervention22 juin 20113 29 mai 2008 à 15:51
Bonjour MPI,
Désolé je n'avais pas fait attention à l'erreur qui s'est glissé lors de mon copier coller.
Par contre j'ai réussi à me débloquer (enfin presque) voilà le morceau du code que j'ai modifié :
If LigneVide <= 5 Then
oWk.Sheets(VariablePage).Range("A" & LigneVide) = Text2
ElseIf LigneVide >= 5 Then
VariablePage = VariablePage + 1
MsgBox (VariablePage)
Set oSh = Sheets.Add
Sheets.Add.Name = VariablePage Je voudrais donner comme nom à chaque nouvelles pages crées le chiffre qui est présent à ce moment la dans VariablePage.
Sheets(VariablePage).Select
oWk.Sheets(VariablePage).Range("A2") = Text2
End If
Le programme écrit sur des nouvelles pages dans l'ordre en sautant la page 2 et 3 (encore ce n'est pas très grave)? mais il me crée en plus des nouvelles pages avec simplement des numéros sur les onglets qui reste vide, le problème si j'enlève une des deux lignes rouges plus rien ne fonctionne correctement.
Je ne sait plus comment l'écrire...
Est ce que tu aurait une idée ?
Merci d'avance.
Jack.