Sauvegarde d'un fichier excel [Résolu]

Messages postés
48
Date d'inscription
mardi 28 mars 2006
Dernière intervention
22 septembre 2011
- 18 juil. 2006 à 04:53 - Dernière réponse :
Messages postés
48
Date d'inscription
mardi 28 mars 2006
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
48
Date d'inscription
mardi 28 mars 2006
Dernière intervention
22 septembre 2011
- 18 juil. 2006 à 06:27
3
Merci
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

Merci mfaure 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de mfaure
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
- 18 juil. 2006 à 05:03
0
Merci
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
Commenter la réponse de mortalino
Messages postés
48
Date d'inscription
mardi 28 mars 2006
Dernière intervention
22 septembre 2011
- 18 juil. 2006 à 05:16
0
Merci
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
Commenter la réponse de mfaure
Messages postés
6812
Date d'inscription
vendredi 16 décembre 2005
Dernière intervention
21 décembre 2011
- 18 juil. 2006 à 05:42
0
Merci
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
Commenter la réponse de mortalino
Messages postés
48
Date d'inscription
mardi 28 mars 2006
Dernière intervention
22 septembre 2011
- 18 juil. 2006 à 05:47
0
Merci
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
Commenter la réponse de mfaure

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.