jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
9 oct. 2006 à 15:37
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
12 oct. 2006 à 20:00
Bonjour à toutes et tous,
Récemment, JMO ( jean-marc) m'a écrit un super code pour traiter, pour standardiser des fichiers xls avnt de les importer en Access2002.
Super code qui marche du tonnerre auquel je voudrais juste ajouter une commande en plus.
Je viens de m'apaercevoir que certains fichiers xls que je reçois, ont des entêtes ( 1er ligne) en anglais ou en français. Hélas, pour l'importation dans Access, c'est toujours en français ou toujours en anglais.
Ma demande :
J'ai créé un classeur en xls qui sera toujours C:\aa\modèles\feuilles_modèles.xls dans lequel j'ai une feuille "mod1".
Quelqu'un pourrait-il m'écrire le code pour
1- copier la ligne 1 de la feuille"mod1" de mon classeur feuilles_modèles.xls
2- coller cette ligne en ligne 1 dans la feuille "ident" .
Merci d'avance.
JL
********************
Function ShowFolderListmobi(path)
'présentation originale: 1 feuille appelée req...
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim Dossiers: Set Dossiers = fso.GetFolder(path)
Dim fichiers: Set fichiers = Dossiers.Files
Dim fichier, f, strListe
For Each fichier In fichiers
DoCmd.Hourglass True
Set f = fso.GetFile(fichier)
If fso.GetExtensionName(fichier) = "xls" Then
Dim objExcel, objClasseur
Set objExcel = CreateObject("Excel.Application")
Set objClasseur = objExcel.Workbooks.Open(fichier)
'MsgBox objClasseur.Sheets(1).Name,,"Nom de la Feuil1 avant modification"
If objClasseur.Sheets(1).Name <> "Référence" Then
objClasseur.Sheets(2).Name = "ident"
End If
'Renommer la derniere feuille
If objExcel.ActiveWorkbook.Sheets(1).Name <> "Référence" Then
objExcel.ActiveWorkbook.Sheets.Add
objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count - 1).Name = "Référence"
End If
'écriture du nom du fichier dans la 1ère cellule de "Référence"
objExcel.ActiveWorkbook.Sheets("Référence").Select
objExcel.Cells(1, 1).Value = fichier
objExcel.ActiveWorkbook.Sheets("ident").Select
'suppression des colonnes vides
Dim LastLine, I
LastLine = objExcel.ActiveSheet.UsedRange.Row - 1
LastLine = LastLine + objExcel.ActiveSheet.UsedRange.Columns.Count
For I = LastLine To 1 Step -1
If objExcel.Application.WorksheetFunction.CountA(objExcel.Columns(I)) = 0 Then objExcel.Columns(I).Delete
Next
'Coupe les lignes 1 à 12 de la feuille "ident"
objExcel.ActiveWorkbook.Sheets("ident").Select
If objExcel.Cells(1, 1).Value = "User" Then
objExcel.ActiveWorkbook.Worksheets("ident").Rows("1:11").Cut
'Insert la selection coupé a partir de la ligne 2
'(la ligne 2 se retrouvera donc APRES la selection insérée
objExcel.ActiveWorkbook.Worksheets("Référence").Rows("2:2").Insert Shift:=xlDown
objExcel.ActiveWorkbook.Worksheets("ident").Rows("1:12").Delete
'copier la ligne 1 de ma feuille"modèle1" qui se trouve dans C:\aa\modèles\modèles_feuilles.xls ( sera toujours à cet emplacement)
'coller en ligne 1 de ma feuille "ident" (du classeur actif )
End If
'WScript.Sleep "500"
'MsgBox objClasseur.Sheets(1).Name,,"Nom de la Feuil1 après modification"
objExcel.ActiveWorkbook.SaveAs fichier 'sauvegarde sous le même nom
objExcel.ActiveWorkbook.Saved = True 'sauvegarde true=oui false=non
'objExcel.DisplayAlerts=True 'remet l'alerte
'objExcel.Application.Visible=True 'remet la visibilité
objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
Set objExcel = Nothing
Set objClasseur = Nothing
End If
Next
Set f = Nothing
Set fichiers = Nothing
Set Dossiers = Nothing
Set fso = Nothing
DoCmd.Hourglass False
End Function
A voir également:
Copier une ligne d'une feuille d'un fichier et la coller dans une feuille d'un a
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 12 oct. 2006 à 20:00
Bonsoir,
en fait dans le code, il y a moyen de forcer le nom des colonnes ( à condition d'être certains de l'ordre de cette-ci.
il suffit de :
objExcel.ActiveWorkbook.Sheets("ident").Select
objExcel.Cells(1, 1).Value = "nom"
objExcel.Cells(1, 2).Value = "prénom"
objExcel.Cells(1, 3).Value = "date"
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 oct. 2006 à 15:51
Salut,
'Copie la ligne 1 de la feuille Mod1 du classeur actif
objExcel.ActiveWorkbook.Worksheets("mod1").Rows("1:1").Copy
'Selectionne la cellule A1 de la feuille ident du classeur actif
objExcel.ActiveWorkbook.Worksheets("ident").Range("A1").Select
'Colle le contenu
objExcel.ActiveSheet.Paste
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 9 oct. 2006 à 17:02
Effectivement, si tu veux copier une ligne d'un classeur dans un autre, tu es obligé d'ouvrir auparavant le classeur.
Mais vu ton besoin, il y a peut être plus simple à faire : Tu crées une liaison dans ton fichier Excel.
Par ex, tu voulais copier la ligne 1 de la feuille "Mod1" dans la ligne 1 d'une feuille "Ident" de ton 2ème classeur.
Il te suffit de faire une égalité : A:='[NomClasseur]Ident!A1' (c'est un truc comme ça, le plus simple, c'est encore d'ouvrir les 2 classeurs, taper "=" et sélectionner la cellule .
L'avantage, c'est que ta liaison te permet d'avoir le contenu de la ligne sans être obligé de forcer l'ouverture du classeur, puis de le refermer.
Tant que ton fichier cible ne change pas de nom (si tu le remplaces, mais que tu l'écrases avec un fichier portant le même nom), la liaison reste.
Ce n'est qu'une idée, mais vu ce que tu dis, à mon avis ça doit suffire
Molenn
Vous n’avez pas trouvé la réponse que vous recherchez ?
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 9 oct. 2006 à 19:02
Bonjour Julien,
1-Est ce que au moment ou tu veux copier la ligne, le
classeur C:\aa\modèles\modèles_feuilles.xls est ouvert? NON
2 - Par ex, tu voulais copier la ligne 1 de la feuille "Mod1" dans la ligne 1 d'une feuille "Ident" de ton 2ème classeur.
Il te suffit de faire une égalité : A:='[NomClasseur]Ident!A1' (c'est un truc comme ça, le plus simple, c'est encore d'ouvrir les 2 classeurs, taper "=" et sélectionner la cellule .
Et çà, je dois le mettre où dans le code ?
.
A:='[C:\aa\modèles\modèles_feuilles.xls]Ident!A1'
Parce que je ne comprends pas où il va aller lire la ligne 1 de la feuille "modèle1" de C:\aa\modèles\modèles_feuilles.xls ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 10 oct. 2006 à 09:42
Salut,
Tiens essaie ceci j'espere que ca t'aidera
Dim ClsOrigin
objExcel.DisplayAlerts = False
'Memorise le nom du classeur actif
ClsOrigin = objExcel.ActiveWorkbook.Name
'Ouvre le classeur ou ce trouve la ligne a copier
'et copie la ligne 1 de la feuille mod1
Call objExcel.Workbooks.Open("C:\B.xls").Worksheets("mod1").Rows("1:1").Copy
'Rends actif ton classeur d'origine (moi test.xls)
Call objExcel.Workbooks(ClsOrigin).Activate
'Selectionne la cellule A1 de la feuille ident du classeur actif
Call objExcel.ActiveWorkbook.Worksheets("ident").Range("A1").Select
'Colle le contenu
Call objExcel.ActiveSheet.Paste
'Ferme l'autre classeur
Call objExcel.Workbooks("B.xls").Close
objExcel.DisplayAlerts = True
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007 12 oct. 2006 à 13:03
Bonjour Julien,
Je suis toujours avec mon problème de titres de colonnes.
Suggestion, plutôt que d'essayer de copier la ligne 1 de la feuille modèle pour la coller dans la feuille active(ident), n'y aurait-il pas moyen de forcer le nom des colonnes de ma feuille active sans modifier le format des colonnes ( date / texte etc..)
colonne 1 = date
colone 2 = numero
colonne 3 = nom
colonne 4 = adresse
Mais comment écrire tout çà ?
Encore merci pour ton aide précieuse.
Jl