Page 1 sur 1

[Résolu] [Calc] Création dossiers et sous-dossiers

MessagePublié: 05 Août 2019 18:46
par romainsta01

La modération vous a écrit: Suppression de l'icône Image
Les icônes mises à votre disposition ont une signification précise sur ce forum.
Veuillez consulter ce fil pour en savoir plus : ftopic3299.html



Bonjour a tous,

Malgré de nombreuses recherches je n'arrive pas a créer une macro assez compliquée j'en appel aux plus fins connaisseurs !!

Alors le fichier avec infos non confidentielles vous le trouverez ici:

https://www.data.gouv.fr/s/resources/se ... airies.ods

Il faudrait a partir de ce fichier, créer sur windows un dossier par cellule de la colonne B , et dans chacun des dossiers crées y mettre un sous dossier correspondant à la cellule de la meme ligne de la colonne D et mettre dans ce sous dossier créé les infos des colonnes E,F,G,H,I,J dans un fichier .ods

Pour la première ligne du fichier par exemple créer un dossier "01400" à l'intérieur duquel mettre un sous-dossier "L'Abergement-Clémenciat" et mettre dans celui-ci un fichier calc avec les infos de E2,F2,G2,H2,I2 et J2 .

Soit - B1
- ----------D1
-----------------infos de E2,F2,G2,H2,I2,J2.ods

Après je me débrouillerais pour classer par département mais ça serait magnifique déjà de faire ça !!

Est-ce assez clair ?

Merci !

Re: Création dossiers et sous-dossiers

MessagePublié: 05 Août 2019 18:52
par Bidouille
Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

Lisez ce fil pour savoir quelle balise utiliser : http://forum.openoffice.org/fr/forum/su ... html#27295

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 05 Août 2019 19:00
par romainsta01
Bien compris merci !

La modération vous a écrit: Open office 4.1.10 figurant dans votre signature n'existe pas. La dernière version est la 4.1.6. Veuillez corriger votre signature


Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 05 Août 2019 23:48
par OOotremer971
Bonjour,
romainsta01 a écrit:Est-ce assez clair ?

Pour moi oui, mais tu ne dis pas quel nom donner au fichier qui va contenir les infos des colonnes E,F,G,H,I et J de chaque ligne. Infos.ods ?
Peut être préciser aussi dans quel sous répertoire de ton arborescence Windows tu souhaites créer tous ces dossiers.

A tester en attendant + de précisions :
En l'état, un répertoire Mairies est créé dans Mes Documents et seulement les 5 premières lignes du fichier sont traitées pour confirmer le test.
Si c'est Ok, remplacer (ligne 21)
Code : Tout sélectionner   AgrandirRéduire
For i = 1 to 5

par
Code : Tout sélectionner   AgrandirRéduire
For i = 1 to 36117


et dé-commenter les lignes 'fenetre.Enable = False et 'fenetre.Enable = True en retirant l'apostrophe en début de ligne (ligne 16 et 26).
Code : Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****

Option Explicit

Private oDocTemporaire As Object
Private oDoc As Object
Private oSheet As Object

Sub Main
Dim propFich(0) As New com.sun.star.beans.PropertyValue
Dim oSheetTempo As Object
Dim i As Long
Dim fenetre as Object
oDoc = Thiscomponent
fenetre = oDoc.CurrentController.Frame.ContainerWindow
'fenetre.Enable = False
propFich(0).Name = "Hidden"
propFich(0).Value = True
oSheet = Thiscomponent.Sheets(0)
oDocTemporaire = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, propFich())
For i = 1 to 5
   oDocTemporaire.Sheets(0).GetCellRangeByPosition(0,0,5,0).SetDataArray(recupData(i))
   oDocTemporaire.storeToURL(convertToURL(chemin(i)), array())
next
oDocTemporaire.close(True)
'fenetre.Enable = True
End Sub

Function raccourci As String
Dim ps As Object, rep As String
raccourci = CreateUnoService("com.sun.star.util.PathSubstitution").getSubstituteVariableValue("$(work)")
end Function

Function chemin(oRow As Long) As String
Dim aSep As String, cel1 As String, cel2 As String
aSep = getPathSeparator
cel1 = oSheet.GetCellByPosition(1,oRow).String
cel2 = oSheet.GetCellByPosition(3,oRow).String
chemin = raccourci & aSep & "Mairies" & aSep & cel1 & aSep & cel2 & aSep & "infos.ods"
End Function

Function recupData(oRow As Long) As Variant
recupData = oSheet.GetCellRangeByPosition(4,oRow,9,oRow).DataArray
End Function


A+

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 01:31
par Noonours
Bonjour

Une tentative de script qui génère les fichiers au format texte (.odt)
Il y a possibilité de les regrouper aussi par département pour ne pas avoir à le faire "à la main" :wink:
Code : Tout sélectionner   AgrandirRéduire
Sub GenererFichiers()

oDoc = thisComponent
oFeuil = oDoc.sheets.getByName("Mairies")

LesDonnees    =   oFeuil.getCellRangeByName("B2:J36118").DataArray

   For i = 0 to 36117
    Dossier = Environ("USERPROFILE") & "\" & LesDonnees(i)(0) & "\" & LesDonnees(i)(2) & ".odt\" 'USERPROFILE sous Windows trouve la racine utilisateur, à modifier éventuellement ;)
    LeTexte = ""
    Open Dossier For Output As #1
      for t = 3 to 8
       LeTexte = LeTexte & LesDonnees(i)(t) & chr(10)
      next t
    Print #1, Letexte
    Close #1
   next i
End Sub


Je suis preneur de remarques (positives, hein? :wink: ) pour améliorer ces lignes de code, il existe surement plus élégant ou fonctionnel que ça...

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 07:27
par romainsta01
Merci OOotremer971 !!

J'ai éssayé ta macro mais ca me donne le message d'erreur suivant au niveau de la ligne 23 " oDocTemporaire.storeToURL(convertToURL(chemin(i)), array())":

Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.io.IOException
Message: SfxBaseModel::impl_store <file:///C:/Users/nina6/OneDrive/Documents%5CMairies%5C01400%5CL'Abergement-Cl%C3%A9menciat%5Cinfos.ods> failed: 0x507.

Je ne comprends pas ce qui peut clocher !!

Le fichier peut s'appeler info.ods pas de soucis et le sous-répertoire est C:\B

Merci !!

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 07:34
par romainsta01
Noonours a écrit:Bonjour

Une tentative de script qui génère les fichiers au format texte (.odt)
Il y a possibilité de les regrouper aussi par département pour ne pas avoir à le faire "à la main" :wink:
Code : Tout sélectionner   AgrandirRéduire
Sub GenererFichiers()

oDoc = thisComponent
oFeuil = oDoc.sheets.getByName("Mairies")

LesDonnees    =   oFeuil.getCellRangeByName("B2:J36118").DataArray

   For i = 0 to 36117
    Dossier = Environ("USERPROFILE") & "\" & LesDonnees(i)(0) & "\" & LesDonnees(i)(2) & ".odt\" 'USERPROFILE sous Windows trouve la racine utilisateur, à modifier éventuellement ;)
    LeTexte = ""
    Open Dossier For Output As #1
      for t = 3 to 8
       LeTexte = LeTexte & LesDonnees(i)(t) & chr(10)
      next t
    Print #1, Letexte
    Close #1
   next i
End Sub


Je suis preneur de remarques (positives, hein? :wink: ) pour améliorer ces lignes de code, il existe surement plus élégant ou fonctionnel que ça...




Merci Noonours !!

je vais la tester dès que la macro pour la création des dossiers fonctionnera je te dirais ca , merci encore pour ton aide !!

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 12:06
par OOotremer971
Bonjour,

Je n'ai pas Windows sous la main pour tester et je ne reproduis pas le dysfonctionnement dans mon environnement :(
essaye de remplacer :
Code : Tout sélectionner   AgrandirRéduire
oDocTemporaire.storeToURL(convertToURL(chemin(i)), array())

par
Code : Tout sélectionner   AgrandirRéduire
oDocTemporaire.storeToURL(chemin(i), array())


Je vais essayer de comprendre sur poste équipé de Windows.

A+

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 12:37
par romainsta01
Merci beaucoup !

Effectivement j'ai modifié la ligne comme tu me l'as indiqué mais ça me fait exactement la même erreur ....

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 13:19
par Dude
Salut,

romainsta01 a écrit:mais ça me fait exactement la même erreur ....

Faisons un minimum d'analyse...
Rien ne te choque dans le chemin du document que tu tentes de créer ?
romainsta01 a écrit:Message: SfxBaseModel::impl_store <file:///C:/Users/nina6/OneDrive/Documents%5CMairies%5C01400%5CL'Abergement-Cl%C3%A9menciat%5Cinfos.ods> failed: 0x507.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 13:50
par romainsta01
Bonjour!

Si le One drive me choque, après le reste étant débutant je ne sait pas encore bien l'analyser....

Eclaire moi !

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 13:59
par Dude
Hors programmation, tu peux faire un 1er test.
Créer un classeur
Aller à l'emplacement C:/Users/nina6/OneDrive/
L'enregistrer sous le nom Documents%5CMairies%5C01400%5CL'Abergement-Cl%C3%A9menciat%5Cinfos.ods

Rappel : une macro ne peut rien de plus que ce que fait l'utilisateur, ce n'est qu'une automatisation de commandes.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 14:10
par romainsta01
Merci !

Effectivement j'arrive à créer un fichier Documents%5CMairies%5C01400%5CL'Abergement-Cl%C3%A9menciat%5Cinfos.ods dans le dossier C:\Users\nina6\OneDrive sans aucun probleme .

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 15:32
par Dude
romainsta01 a écrit:Effectivement j'arrive à créer un fichier [...] sans aucun probleme .

Fais nous une copie écran du dialogue Fichier > Propriétés que l'on se rende compte de la situation.

On t'a donné deux solutions.
Comme on ne sait pas quel script tu utilises, commence par fournir un document embarquant la macro.
Merci de fournir quelque chose d'exhaustif et qui provoque l'erreur chez toi.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 16:07
par romainsta01
Alors j'utilise la macro suivante :

Code : Tout sélectionner   AgrandirRéduire
Option Explicit

Private oDocTemporaire As Object
Private oDoc As Object
Private oSheet As Object

Sub Main
Dim propFich(0) As New com.sun.star.beans.PropertyValue
Dim oSheetTempo As Object
Dim i As Long
Dim fenetre as Object
oDoc = Thiscomponent
fenetre = oDoc.CurrentController.Frame.ContainerWindow
fenetre.Enable = False
propFich(0).Name = "Hidden"
propFich(0).Value = True
oSheet = Thiscomponent.Sheets(0)
oDocTemporaire = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, propFich())
For i = 1 to 5
   oDocTemporaire.Sheets(0).GetCellRangeByPosition(0,0,5,0).SetDataArray(recupData(i))
   oDocTemporaire.storeToURL(convertToURL(chemin(i)), array())
next
oDocTemporaire.close(True)
fenetre.Enable = True
End Sub

Function raccourci As String
Dim ps As Object, rep As String
raccourci = CreateUnoService("com.sun.star.util.PathSubstitution").getSubstituteVariableValue("$(work)")
end Function

Function chemin(oRow As Long) As String
Dim aSep As String, cel1 As String, cel2 As String
aSep = getPathSeparator
cel1 = oSheet.GetCellByPosition(1,oRow).String
cel2 = oSheet.GetCellByPosition(3,oRow).String
chemin = raccourci & aSep & "Mairies" & aSep & cel1 & aSep & cel2 & aSep & "infos.ods"
End Function

Function recupData(oRow As Long) As Variant
recupData = oSheet.GetCellRangeByPosition(4,oRow,9,oRow).DataArray
End Function




Je te mets en pièces jointe la capture d'écran de ce qui se passe quand j'éssaie de l'éxecuter en espérant que cela t'aide.

Merci

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 16:23
par Dude
Sur ce forum, tu as affaire à des bénévoles.
Donc, on évite de leur faire perdre du temps à jouer aux devinettes. :evil:

D'abord, on ouvre ses petits yeux et on répond à la demande :
Dude a écrit:commence par fournir un document embarquant la macro

En clair, tu joins le classeur mairies(1).ods

Ensuite, tu indiques utiliser :
Dans ta signature, il y a écrit:Open office 4.1.6 sous windows 10

Et lorsque j'ouvre ton ODG qui contient une copie écran, je vois :
no_problemo.PNG

Là encore, une mauvaise information.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 17:14
par romainsta01
Merci Dude pour tes précieux conseils !

Tu vois je ne plaisante pas quand je dis que je suis un vrai débutant :D

J'ai modifié ma signature de façon adéquate.

Je te transmettrais bien le fichier mais il fait plus de 2 Mo ça ne me l'accepte pas en PJ .... :evil:

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 17:23
par tintin
Bonjour,

Lorsque le fichier dépasse les 500 ko acceptés vous pouvez le joindre en passant uniquement par le site http://www.cjoint.com/
Vous placez dans votre message le lien que vous donne cjoint après votre téléversement.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 17:25
par romainsta01
Yes super merci Tintin !!

Voici le lien du coup !

https://www.cjoint.com/c/IHgqzdnNNTj

Merci !!

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 17:56
par OOotremer971
Re,

Ne cherchez plus ! Je viens de trouver un poste sous Windows et après quelques tests, je constate que c'est le getPathSeparator qui fait des siennes
remplace :
Code : Tout sélectionner   AgrandirRéduire
aSep = getPathSeparator

par
Code : Tout sélectionner   AgrandirRéduire
aSep = "/"

et là ça marche

A+

Désolé.

Re: [Calc] Création dossiers et sous-dossiers

MessagePublié: 06 Août 2019 18:59
par romainsta01
OOotremer971 a écrit:Re,

Ne cherchez plus ! Je viens de trouver un poste sous Windows et après quelques tests, je constate que c'est le getPathSeparator qui fait des siennes
remplace :
Code : Tout sélectionner   AgrandirRéduire
aSep = getPathSeparator

par
Code : Tout sélectionner   AgrandirRéduire
aSep = "/"

et là ça marche

A+

Désolé.


Merci beaucoup OOtremer971 et les autres ca marche parfaitement !! Merci à tous !!!