Problème ouverture fichier.xls

gatoune78 Messages postés 46 Statut Membre -  
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

27 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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...
'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.
0
gatoune78 Messages postés 46 Statut Membre
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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

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 ?
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
pour le Server 2003 il faut au moins le SP2
Pour XP il faut au moins le SP3
Mais attend un peu, je revois avec la compilation conditionnelle parce j'ai pas penser mais VB va pas vouloir compiler avec des erreurs de "build"
0
gatoune78 Messages postés 46 Statut Membre
 
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 ?
0
gatoune78 Messages postés 46 Statut Membre
 
L'erreur HRESULT: 0x800A03EC se fait au moment de la sauvegarde pour information (j'ai testé les try...Catch)
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Essaye ceci..
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.
0
gatoune78 Messages postés 46 Statut Membre
 
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é....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gatoune78 Messages postés 46 Statut Membre
 
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...

;-)
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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.
0
gatoune78 Messages postés 46 Statut Membre
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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.
0
gatoune78 Messages postés 46 Statut Membre
 
je les avais mis à la fin, je vais retester au début :)
0
gatoune78 Messages postés 46 Statut Membre
 
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 ?
0
gatoune78 Messages postés 46 Statut Membre
 
je viens de me rendre compte que malgré le #if win32, et peut importe le poste, le programme passe par le #else
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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
0