Sauvegarde d'un fichier excel

Résolu
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011 - 18 juil. 2006 à 04:53
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011 - 18 juil. 2006 à 06:27
Bonjour a tous, je suis confronte a un pb que je n'arrive pas a resoudre.

dans un des formulaires de mon prog vb2005, j'ai une boucle if / else.
dans chacune de ces boucles, j'ouvre un fichier excel (le meme en plus) avec en option "readonly:=false". Le if principal ajoute des donnees et quand je sauvegarde (fichier.close(savechanges:=true)), j'ai la fenetre "enregistrer sous" qui s'ouvre. Par contre, dans le else, je modifie simplement des cases qui sont deja remplies, et la sauvegarde s'effectue de maniere transparente.

je ne comprends donc pas pourquoi le meme fichier, ouvert de la meme maniere, l'est en lecture seul dans une boucle et pas dans l'autre. Si quelqu'un pet m'eclairer sur ce point je serais ravi.

merci de m'avoir lu (et desole pour la mise en forme, le formulaire ne prends pas les retour chariot sous opera)

Max

5 réponses

mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
18 juil. 2006 à 06:27
j'ai trouve al reponse tout seul, le probleme etait que sur le formulaire precedent, j'ouvrais une appli excel que je ne fermais pas. comme je reouvrais le meme fichier, ce dernier l'etait donc en lecture seule, d'ou le pb

merci pour votre aide

Max
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 juil. 2006 à 05:03
Salut Max,
met nous ton code stp, ce sera plus facile car là, comme ça...




@++



  Mortalino





Le mystérieux chevalier, "Provençal, le Gaulois"





Merci de prendre le temps de répondre à ce sondage

Merci de prendre le temps de lire le Règlement CS
0
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
18 juil. 2006 à 05:16
Salut

alors voici le code de mon formulaire dans son integralite (a noter que dans le else, les textbox et combobox sont remplies a partir du formulaire precedent, en fait ca ferait l'objet d'une autre question qui est "comment initialiser un formulaire, et transmettre la valeur d'une variable d'un formulaire a l'autre ?" je sais faire avec vba, mais je suis debutant sur vb2005, et ca ne marche pas pareil). Bref, voici le code, brut de decoffrage :

Public

Class FormBody

Dim OKMode
As
Boolean

Private
Sub ButtonAnnule_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles ButtonAnnule.Click

Me.Hide()FormAdmin.Show()

End
Sub

Private
Sub ButtonValide_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles ButtonValide.Click

'MODE CREATION MODE CREATION MODE CREATION MODE CREATION MODE CREATION MODE CREATION

'***********************************************************************************

If
Me.Text =
"Nouvelle référence"
Then

Dim index
As
Integer

Dim XlApp
As
Object

Dim DB
As Workbook

Dim j
As
IntegerXlApp = CreateObject(

"Excel.Application")DB = XlApp.Workbooks.Open(

"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\BDdimesionelle\bdDIMENSIONELLE\bin\Debug\BD.xls", ReadOnly:=
False)j = 1

OKMode =

True

While
CStr(DB.Worksheets(1).Cells(j, 1).value) <>
""

'verification de la non existence de cette reference

If
CStr(DB.Worksheets(1).Cells(j, 1).value) = TextBoxRef.Text
ThenMsgBox(

"La référence " & TextBoxRef.Text &
" existe déjà dans la base.", MsgBoxStyle.Exclamation,
"Erreur de référence")OKMode =

False

End
Ifj = j + 1

End
Whileindex = j

'Verification que toutes les cases soient remplies

If ComboBox1.Text =
""
ThenMsgBox(

"Veuillez renseigner la case 'Retainer' s'il vous plait", MsgBoxStyle.Exclamation,
"Données manquantes")OKMode =

False

End
If

If TextBoxColerette.Text =
""
ThenMsgBox(

"Veuillez renseigner le diamètre de la colerette s'il vous plait", MsgBoxStyle.Exclamation,
"Données manquantes")OKMode =

False

End
If

If TextBoxHauteur.Text =
""
ThenMsgBox(

"Veuillez renseigner la hauteur du body s'il vous plait", MsgBoxStyle.Exclamation,
"Données manquantes")OKMode =

False

End
If

If OKMode =
True
ThenDB.Worksheets(1).cells(index, 1).value = TextBoxRef.Text
DB.Worksheets(1).cells(index, 2).value "BODY"DB.Worksheets(1).cells(index, 4).value TextBoxColerette.Text

DB.Worksheets(1).cells(index, 5).value = TextBoxHauteur.Text

If ComboBox1.Text =
"OUI"
Then DB.Worksheets(1).cells(index, 3).value =
"True"

If ComboBox1.Text =
"NON"
Then DB.Worksheets(1).cells(index, 3).value = "False"DB.Close(SaveChanges:True)DB

NothingXlApp.Quit()

'Une fois que tu en fini avec excel

'Déclare un tableau de process

Dim myProcesses()
As Process

'Délcare un process

Dim myProcess
As Process

'Récupère dans le tableau de process tous les processus EXCEL (même ceux qui ne sont pas ouvert avec VB)myProcesses = Process.GetProcessesByName(

"EXCEL")

'Pour tous les processus récupérer

For
Each myProcess
In myProcesses

'on les tuemyProcess.Kill()

Next

Me.Hide()FormAdmin.Show()

End
If 

'MODE MODIFICATION MODE MODIFICATION MODE MODIFICATION MODE MODIFICATION MODE MODIFICATION

'*****************************************************************************************

Else

Dim index
As
Integer

Dim XlApp
As
Object

Dim DB
As Workbook

Dim j
As
IntegerXlApp = CreateObject(

"Excel.Application")DB = XlApp.Workbooks.Open(

"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\BDdimesionelle\bdDIMENSIONELLE\bin\Debug\BD.xls", , ReadOnly:=
False)j = 1

While
CStr(DB.Worksheets(1).Cells(j, 1).value) <>
""

If
CStr(DB.Worksheets(1).Cells(j, 1).value) =
Me.Text
Thenindex = j

End
Ifj = j + 1

End
While

If ComboBox1.Text =
"OUI"
ThenDB.Worksheets(1).Cells(index, 3).value =

"True"

ElseXlApp.Workbooks(1).Worksheets(1).Cells(index, 3).value =

"False"

End
IfDB.Worksheets(1).Cells(index, 4).value = TextBoxColerette.Text

DB.Worksheets(1).Cells(index, 5).value = TextBoxHauteur.Text
DB.Close(SaveChanges:True)DB

NothingXlApp.Quit()

'Une fois que tu en fini avec excel

'Déclare un tableau de process

Dim myProcesses()
As Process

'Délcare un process

Dim myProcess
As Process

'Récupère dans le tableau de process tous les processus EXCEL (même ceux qui ne sont pas ouvert avec VB)myProcesses = Process.GetProcessesByName(

"EXCEL")

'Pour tous les processus récupérer

For
Each myProcess
In myProcesses

'on les tuemyProcess.Kill()

Next

Me.Hide()FormAdmin.Show()

End
If

End
SubEnd

Class
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
18 juil. 2006 à 05:42
Bah je vois pas (pas expert en vb2005).
Par contre, si je peux te donner un conseil, c'est de créer une procédure d'ouverture, et une de fermeture : cela t'économisera quelques lignes, je pense, et ton code sera plus lisible !

@++

  Mortalino
Le mystérieux chevalier, "Provençal, le Gaulois"

Merci de prendre le temps de répondre à ce sondage
Merci de prendre le temps de lire le Règlement CS
0

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

Posez votre question
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
18 juil. 2006 à 05:47
Bon ben tant pis..... ca resoud pas mes pb pour l'instant alors, c'est vraiment etrange comme phenomene.... merci en tout cas d'y avoir jete un oeil, je vais attendre un peu, d'autres auront certainement des idees...

merci

Max
0
Rejoignez-nous