Problème ouverture fichier.xls
gatoune78
Messages postés
46
Statut
Membre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
J'ai développé une petite application pour un export de fichier excel , en VB.NET
J'arrive à ouvrir ces fichiers excel avec Excel 2010 mais absolument pas avec excel 2003 alors que mon fichier s'appelle "fichier.xls"
wbExcel.SaveAs("fichier.xls")
Quelqu'un a t il une idée pour me permettre d'ouvrir ce fichier avec Excel 2003?
Cordialement
J'ai développé une petite application pour un export de fichier excel , en VB.NET
J'arrive à ouvrir ces fichiers excel avec Excel 2010 mais absolument pas avec excel 2003 alors que mon fichier s'appelle "fichier.xls"
wbExcel.SaveAs("fichier.xls")
Quelqu'un a t il une idée pour me permettre d'ouvrir ce fichier avec Excel 2003?
Cordialement
A voir également:
- Problème ouverture fichier.xls
- Page d'ouverture google - Guide
- Prochaine ouverture magasin action 2025 - Guide
- Ouverture de session gmail - Guide
- Ouverture automatique application windows - Guide
- Www.yahoo.fr ouverture de session - Guide
27 réponses
Bonjour,
J'ai trouver pour la mise en forme de tes cellules, c'est un peu plus compliquer que je ne pensais...
A l'endroit où tu a...
Tu supprime ces lignes que tu remplace par
Ensuite tu colle les 3 routines ci-dessous
Tu va avoir des lignes en erreur mais ça n'influence pas, sur le 2010 ce seront les 2 sub Cadre2003 et Cadre et sur 2003 ce sera Cadre2010
Y aurais eu plus simple avec de la compilation conditionnelle mais je n'ai pas trouver la constante d'excel2010 ni d'un autre Excel d'ailleur.
mais ton OS il est en 32 ou 64byte, ça pourrais servir
2ém problème
Tu à suivi le déboguage que je t'ai dis pour trouver où ça plante ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
J'ai trouver pour la mise en forme de tes cellules, c'est un peu plus compliquer que je ne pensais...
A l'endroit où tu a...
'wsExcel.Range("B54:C54").BorderAround2()
'wsExcel.Range("C54:D54").BorderAround2()
'wsExcel.Range("D54:E54").BorderAround2()
'wsExcel.Range("E54:F54").BorderAround2()
'wsExcel.Range("F54:G54").BorderAround2()
'wsExcel.Range("G54:H54").BorderAround2()
Tu supprime ces lignes que tu remplace par
Dim V
'pour prendre en compte les mises à jour
V = Split(Application.Version, ".")
If Val(V(0)) < 14 Then 'merci chossette9
Cadre2003
Else
Cadre2010
End If
Ensuite tu colle les 3 routines ci-dessous
Sub Cadre2010()
Dim TB, i As Byte
TB = Array("B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54")
For i = 0 To UBound(TB)
wsExcel.Range(tb(i)).BorderAround2()
Next
End Sub
Sub Cadre2003()
Dim TB, i As Byte
Dim Plage As Range
TB = Array("B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54")
For i = 0 To UBound(TB)
Set Plage = wsExcel.Range(TB(i))
Cadre Plage
Next
End Sub
Sub Cadre(Plage As Range)
With Plage.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub
Tu va avoir des lignes en erreur mais ça n'influence pas, sur le 2010 ce seront les 2 sub Cadre2003 et Cadre et sur 2003 ce sera Cadre2010
Y aurais eu plus simple avec de la compilation conditionnelle mais je n'ai pas trouver la constante d'excel2010 ni d'un autre Excel d'ailleur.
mais ton OS il est en 32 ou 64byte, ça pourrais servir
2ém problème
Tu à suivi le déboguage que je t'ai dis pour trouver où ça plante ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Mon OS est en 64 Bytes et les autres, je n'en ai aucune idée...
je ne peux pas faire de débogage sur les postes clients car il n'y pas de visual studio installé mais j'ai mis plein de try...catch afin de pouvoir trouver les erreurs, que je pourrai mettre ici dès que je les aurais ;-)
Concernant le code que vous m'avez donné, il y a plein d'erreur
déjà, tous les xl... ne sont pas pris en comtpe
De plus, le
Dim Plage As Range renvoie une erreur sur le Range
et
TB = Array("B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54")
For i = 0 To UBound(TB)
cette ligne ne fonctionne pas non plus...
Cdt
je ne peux pas faire de débogage sur les postes clients car il n'y pas de visual studio installé mais j'ai mis plein de try...catch afin de pouvoir trouver les erreurs, que je pourrai mettre ici dès que je les aurais ;-)
Concernant le code que vous m'avez donné, il y a plein d'erreur
déjà, tous les xl... ne sont pas pris en comtpe
De plus, le
Dim Plage As Range renvoie une erreur sur le Range
et
TB = Array("B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54")
For i = 0 To UBound(TB)
cette ligne ne fonctionne pas non plus...
Cdt
Un peu plus calme et plus claire Svp..
quel xl.. et OU
L'array y fonctionne pas OU dans quel sub ? dans les deux je suppose.
Beh oui, avec le 2010 c'est
Mais là... t'a un GROS problème, tu est en 64bytes avec le FrameWork 4 et les autre sont au maximum avec un 32Bytes et voir quel FrameWork ?
quel xl.. et OU
L'array y fonctionne pas OU dans quel sub ? dans les deux je suppose.
Beh oui, avec le 2010 c'est
dim TB() As String = {"B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54"}
Mais là... t'a un GROS problème, tu est en 64bytes avec le FrameWork 4 et les autre sont au maximum avec un 32Bytes et voir quel FrameWork ?
pour les xl... je parlais de ceux de la Sub Plage
mais je les ai définis en constante et ca semble fonctionner (sauf que je n'ai surement pas les bonnes valeurs de constantes mais ça n'est pas grave)
pour le dim TB... , merci, ca fonctionne très bien !!
Alors moi, je suis en 64 bytes, framework 4
et les autres postes, c'est du 32 bytes, framework 3.5
Cela a t il une incidence ?
mais je les ai définis en constante et ca semble fonctionner (sauf que je n'ai surement pas les bonnes valeurs de constantes mais ça n'est pas grave)
pour le dim TB... , merci, ca fonctionne très bien !!
Alors moi, je suis en 64 bytes, framework 4
et les autres postes, c'est du 32 bytes, framework 3.5
Cela a t il une incidence ?
Essaye ceci..
supprimer les 3 routines et les remettre comme ça
Voir si VB veux bien compiler
Tu dis
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
supprimer les 3 routines et les remettre comme ça
#If Win32 Then
Sub Cadre2003()
Dim TB, i As Byte
Dim Plage As Range
TB = Array("B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54")
For i = 0 To UBound(TB)
Set Plage = wsExcel.Range(TB(i))
Cadre Plage
Next
End Sub
Sub Cadre(Plage As Range)
With Plage.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Plage.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub
#Else
Sub Cadre2010()
Dim i As Byte
dim TB() as String = {"B54:C54", "C54:D54", "D54:E54", "E54:F54", "F54:G54", "G54:H54"}
For i = 0 To UBound(TB)
wsExcel.Range(tb(i)).BorderAround2()
Next
End Sub
#End If
Voir si VB veux bien compiler
Tu dis
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Dois je laisser ca ?
Dim V
'pour prendre en compte les mises à jour
V = Split(appExcel.Version, ".")
If Val(V(0)) < 14 Then
Cadre2003()
Else
Cadre2010()
End If
Si oui, il y a un problème, il me dit que Cadre2003 n'est pas déclaré....
Dim V
'pour prendre en compte les mises à jour
V = Split(appExcel.Version, ".")
If Val(V(0)) < 14 Then
Cadre2003()
Else
Cadre2010()
End If
Si oui, il y a un problème, il me dit que Cadre2003 n'est pas déclaré....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai essayé certains trucs, j'ai enlevé la sauvegarde (qui plantait aussi donc)...
et en fait, en attendant votre réponse, j'avais fait ca :
Dim V
'pour prendre en compte les mises à jour
V = Split(appExcel.Version, ".")
If Val(V(0)) < 14 Then
#if win32 then
Cadre2003()
#end if
Else
Cadre2010()
End If
j'avais fait ca pour enlever l'erreur selon laquelle Cadre2003 n'est pas déclaré
Mais j'ai remarqué que en fait, ca ne passe pas dans la boucle
#if win32...
Alors que c'est bien un 32 Bytes...
;-)
et en fait, en attendant votre réponse, j'avais fait ca :
Dim V
'pour prendre en compte les mises à jour
V = Split(appExcel.Version, ".")
If Val(V(0)) < 14 Then
#if win32 then
Cadre2003()
#end if
Else
Cadre2010()
End If
j'avais fait ca pour enlever l'erreur selon laquelle Cadre2003 n'est pas déclaré
Mais j'ai remarqué que en fait, ca ne passe pas dans la boucle
#if win32...
Alors que c'est bien un 32 Bytes...
;-)
Désolé pour le tâtonnement mais je n'ai pas TES configurations bien évidemment.
Essaye en..
Supprimer ces lignes ou les mettre en rem et changer les 2 titres des sub par MetCadre par exemple, je dis bien la sub Cadre2010 et la sub Cadre2003 à renommer en MetCadre
Je viens de tester sur VB2010 et ça ça va, le seul problème c'est que je ne suis pas certain de la constante (j'ai pas un 64) essaye aussi avec Win64 ?
éventuellement inverser les sub
EDIT : et en remplacement des lignes que tu montre plus haut tu met simplement
Call MetCadre
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Essaye en..
Supprimer ces lignes ou les mettre en rem et changer les 2 titres des sub par MetCadre par exemple, je dis bien la sub Cadre2010 et la sub Cadre2003 à renommer en MetCadre
Je viens de tester sur VB2010 et ça ça va, le seul problème c'est que je ne suis pas certain de la constante (j'ai pas un 64) essaye aussi avec Win64 ?
éventuellement inverser les sub
EDIT : et en remplacement des lignes que tu montre plus haut tu met simplement
Call MetCadre
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
J'ai renommée les procédures en MetCadre
et ca me met une erreur HRESULT 0x8002003 sur le poste en 32 bytes
et aucune erreur sur le mien
dans la procédure
j'ai rajouté un message pour voir si le programme passait dans la boucle
#win32
et je n'ai aucun message sur le poste mais j'en ai un sur le mien...
(j'ai écrit un message pour le if et un autre message pour le else)
cdt
et ca me met une erreur HRESULT 0x8002003 sur le poste en 32 bytes
et aucune erreur sur le mien
dans la procédure
j'ai rajouté un message pour voir si le programme passait dans la boucle
#win32
et je n'ai aucun message sur le poste mais j'en ai un sur le mien...
(j'ai écrit un message pour le if et un autre message pour le else)
cdt
tu a mis les messages au début des sub ou en fin ?
J'ai déjà du debuger en "aveugle" et ce que j'ai fais c'est pas mettre des TRY mais des MsgBox avec simplement l'endroit où il est situer
Principalement avant et après les appel de procédure.
Ca permet de situer le problème petit à petit.
Faut juste de la patience, ça peu être long.!!
J'ai tester sur un 64 (oui, j'en ai un mais je ne l'ai que depuis 2 jours et il n'est pas encore bien configurer) et malheureusement le Win32 est à true sur les deux system donc faut ABSOLUMENT trouver la constante du Win à 64 bytes tant qu'on n'aura pas ça et beh.. ça marchera pas.
J'ai déjà du debuger en "aveugle" et ce que j'ai fais c'est pas mettre des TRY mais des MsgBox avec simplement l'endroit où il est situer
Principalement avant et après les appel de procédure.
Ca permet de situer le problème petit à petit.
Faut juste de la patience, ça peu être long.!!
J'ai tester sur un 64 (oui, j'en ai un mais je ne l'ai que depuis 2 jours et il n'est pas encore bien configurer) et malheureusement le Win32 est à true sur les deux system donc faut ABSOLUMENT trouver la constante du Win à 64 bytes tant qu'on n'aura pas ça et beh.. ça marchera pas.
Même au début du sub, je n'ai aucun message, j'en déduis donc que c'est le #if win32 qui ne fonctionne pas...
je me pose d'ailleurs la question, entre le #if win32 et le else, le texte est en gris alors que apres, le texte est en noir, comme si mon programme ne prenait pas en compte la première partie du test
est ce normal ou pas ?
je me pose d'ailleurs la question, entre le #if win32 et le else, le texte est en gris alors que apres, le texte est en noir, comme si mon programme ne prenait pas en compte la première partie du test
est ce normal ou pas ?
C'est justement ce que je suis en train de chercher; je viens de voir dans l'assembly de VB que c'est aussi Win32 donc pas de différence.
Concernant le code en gris et en noir C'EST NORMAL, tu va voir
Met au dessus
#Const Win32 = 14
Et tu met a la place du #If actuel
#If Win32=14 Then
ensuite tu change la constante...
C'est ce qui devrais se passer quand on change d'OS Grrrrrr
Concernant le code en gris et en noir C'EST NORMAL, tu va voir
Met au dessus
#Const Win32 = 14
Et tu met a la place du #If actuel
#If Win32=14 Then
ensuite tu change la constante...
C'est ce qui devrais se passer quand on change d'OS Grrrrrr