Ouverture en lecture seule: Problème

infogeo

XLDnaute Nouveau
Salut!

Alors voila j ai créé un programme qui permet de copier certaines colonnes d un fichier a l autre et je voudrais donner le choix a l utilisateur d'afficher ou non le nouveau fichier.

L'emplacement, le nom et l extension de ce nouveau fichier est choisi par l utilisateur.

Le probleme est que lorsqu il copie les colonnes, le nouveau fichier est créé et ouvert en lecture seule et donc il ne peut ni enregistrer ni fermer un fichier en lecture seule.

J'ai essayé quelque chose de ce genre la :

Code:
Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = Workbooks.Open(file)
    Set ws = wb.Worksheets(1)
    Dim DateArray() As String
  
' on copie tout le tableau : "tablo" dans le nouveau fichier
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range("A1:" & Workbooks("Trainingcheck_update2_macro.xlsm").Sheets("training").Cells.SpecialCells(xlCellTypeLastCell).Address) = tablo

' on supprime toutes les colonnes qui n'ont pas de titre à la premiere ligne (ou leur titre a la valeur NULL)
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Rows(1).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
If Parametres.AffTexte.Value = False Then
ActiveWorkbook.SaveAs FileName:=file, FileFormat:=xlCSV
ActiveWorkbook.Close
End If



mais cela ne marche pas

File contient l adresse complete du nouveau fichier: "d:/xxxx/xxxx/xxx/xxx.csv"

pour simplifier j ai voulu test en imaginant que l utilisateur choisisse que l extension : csv, d'ou : "FileFormat:=xlCSV"


Si vous pourriez m aider ca serait sympa =) le gros probleme ici est qu il l ouvre en lecture seule

- geo
 

WUTED

XLDnaute Occasionnel
Re : Ouverture en lecture seule: Problème

Bonjour Geo,

Du peu d'ouvertures de fichier que j'ai utilisé, quelques raisons qui font qu'un fichier s'ouvre en lecture seule si tu ne lui demandes pas explicitement de le faire étaient :

  • Les propriétés du fichiers ont été modifiées pour qu'ils soient automatiquement ouvert en lecture seule
  • Le fichier est déjà ouvert

Pour le deuxième point, il est possible qu'il y ait eu un problème lors du précédente fermeture de fichier par VBA.
 

infogeo

XLDnaute Nouveau
Re : Ouverture en lecture seule: Problème

Merci de ta réponse

hum .... bah je sais pas, j ai pas fait en sorte qu'il souvre en lecture seule, sinon je pense que oui il est deja a moitier ouvert mais c'est un peu ibliger si je veux mettre les données dedans non ?

Voila mon module

______________________________________________________________________________________________

Sub MiseEnForme()

'_________variables_____________
Dim i, j As Long
Dim extension, Champs As String
Dim tablo
'________________________________

With Parametres
If .BoxExtension.Text = ".csv (recommandé)" Then
extension = ".csv"
Else
extension = .BoxExtension.Value
End If
file = .FolderAddress.Text & "\" & .FileName.Text & extension
End With

Open file For Append As #2

' on copie tout le tableau dans la feuille training dans le tableau : "tablo"
tablo = Sheets("training").Range("A1:" & Sheets("training").Cells.SpecialCells(xlCellTypeLastCell).Address)

' ensuite on écrase la premiere ligne de ce tableau avec le titre des colonnes qu'on a choisit
' si ce n'est pas un titre de colonne voulu on écrase le titre précédent avec une valeur NULL

For i = 1 To UBound(tablo, 2)
Select Case Trim(tablo(1, i))
Case "Learner Area", "Learner Sub-Area", "Learner Country", "Learner Company", _
"Type", "Job", "Certification Level", "Release", "Reference", "Title", "Start Date"
tablo(1, i) = Replace(tablo(1, i), " ", "_")
tablo(1, i) = Replace(tablo(1, i), ":", "")
tablo(1, i) = Replace(tablo(1, i), "/", "_")
Case "Classroom Duration (Trainee Days)"
tablo(1, i) = "Classroom_Duration_Days"
Case "E-learning Duration (Hours)"
tablo(1, i) = "Elearning_Duration_Hours"
Case "Internal/External"
tablo(1, i) = "Int_Ext"
Case Else
tablo(1, i) = ""
End Select
Next

Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open(file)
Set ws = wb.Worksheets(1)
Dim DateArray() As String

' on copie tout le tableau : "tablo" dans le nouveau fichier
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range("A1:" & Workbooks("Trainingcheck_update2_macro.xlsm").Sheets("training").Cells.SpecialCells(xlCellTypeLastCell).Address) = tablo

' on supprime toutes les colonnes qui n'ont pas de titre à la premiere ligne (ou leur titre a la valeur NULL)
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Rows(1).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete


tablo = Sheets(Parametres.FileName.Text).Range("A1:" & Sheets(Parametres.FileName.Text).Cells.SpecialCells(xlCellTypeLastCell).Address)

' Lorsqu'une copie des colonnes est effectuée du fichier de base au fichier créé par l utilisateur, le format de la date change tout seul et passe de yyyy-mm-dd à dd/mm/yyyy
' C'est pour cela qu'on rechange le format pour le remettre comme à l'origine:

For i = 1 To UBound(tablo, 2)
If tablo(1, i) = "Start_Date" Then
For j = 2 To UBound(tablo, 1)
DateArray() = Split(tablo(j, i), "/")
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range(Chr(64 + i) & j).NumberFormat = "yyyy-mm-dd"
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range(Chr(64 + i) & j).Value = DateArray(2) & "-" & DateArray(1) & "-" & DateArray(0)
Next
End If
Next

' permet à l'utilisateur de ne pas afficher le fichier et donc de le fermer et sauvegarder
' If Parametres.AffTexte.Value = False Then
' ActiveWorkbook.SaveAs FileName:=file, FileFormat:=xlCSV
' ActiveWorkbook.Close
'End If


Unload Parametres
Close #2

End Sub


______________________________________________________________________________________________


le probleme viendrait de la ligne que j'ai mis en rouge d'apres toi ? je vois pas comment faire autrement ... je suis pas un As en VBA ^^
 

WUTED

XLDnaute Occasionnel
Re : Ouverture en lecture seule: Problème

Re,

Je comprends pas trop, à quoi sert ta ligne en rouge justement ?
  • Tu ouvres ton fichier en mode Append
  • Tu ouvres ton fichier "normalement"
  • tu fermes le processus qui avait ouvert en mode append ton fichier

Essaye d'enlever la ligne rouge et de remplacer
Code:
Close #2
Par
Code:
wb.Close

Tu peux aussi remplacer tous les
Code:
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text).Range( Chr(64 + i) & j).
Par
Code:
ws.
Si tu remplis la première feuille du fichier ouvert.
 

infogeo

XLDnaute Nouveau
Re : Ouverture en lecture seule: Problème

merci pour ta réponse

sinon j ai remplacé
Workbooks(Parametres.FileName.Text & extension).Sheets(Parametres.FileName.Text) par ws., oui, si tu veux =)

sinon remplacé close #2 par wb.close, ne résout pas mon problème ca revient au meme que activeworkbook.close, et j ai pas envie de le fermer sans l avoir enregistré.
 

Discussions similaires

Statistiques des forums

Discussions
312 297
Messages
2 086 972
Membres
103 412
dernier inscrit
antoire