[Résolu][Basic] Copie de fichiers

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

[Résolu][Basic] Copie de fichiers

Message par Podgers_95 »

Bonjour à tous :D

Le post est un peu long car j'essaye de vous détailler mon problème... merci d'avance :wink:

Je souhaite copier certains fichiers d'un dossier et d'un sous-dossier vers un autre dossier, tout en conservant la structure. Je sais... la question commence mal, alors voici un petit exemple de la problématique :

INITIALEMENT :
Dossier-source
1.bmp
11.bmp
1.txt
sous-dossier
2.bmp
22.bmp
2.txt

Dossier-destination-bmp
tata.bmp

Dossier-destination-txt
toto.txt

Et je cherche donc à copier-coller de façon à avoir le schéma suivant
FINALEMENT :
Dossier-destination-bmp
tata.bmp
1.bmp
11.bmp
sous-dossier
2.bmp
22.bmp

Dossier-destination-txt
toto.txt
1.txt
sous-dossier
2.txt

Essai en autonome :
FILECOPY.. mais il faut nommer chaque fichier unitairement c'est trop compliqué j'ai plusieurs sous-dossier et plusieurs dizaines de fichier .bmp
COPYFOLDER... pas tout compris pour faire une MAJ sans tout écraser et pas sûr qu'il existe un filtrage *.bmp et une récursivité

Code : Tout sélectionner

Source = "/home/sebastien/Desktop/Photos NEW/"
Destination = "/home/sebastien/Desktop/Photos OLD/"
CopyFolder Source, Destination, false
--> Mais ressort une erreur car le dossier est non vide

Code : Tout sélectionner

Source = "/home/sebastien/Desktop/Photos NEW/"
Destination = "/home/sebastien/Desktop/Photos OLD/"
CopyFolder Source, Destination
--> Copie mais en écrasant l'existant

ALORS ???
J'ai trouvé une solution de contournement avec :

Code : Tout sélectionner

Source ="""" & Dossier_Photos & "/Temp/." & """"
Destination ="""" & Dossier_Photos & "/Anciens_Fichiers_Chiffres/" & """"
Range("B26")="cd " & Source & "; find . -name ""*.bmp"" -exec cp --parents {} " & Destination & " \;;exit"
Range("B26").copy
Range("B26").clear
Shell("konsole")
Mais je suis obligé de faire un clic-droit coller ... pas super au milieu d'un procédure automatique.

LA QUESTION EST DONC :
1. existe t'il une autre façon de faire des copiers-collers récursif et sélectif ?
OU
1bis. existe t'il le pendant à la commande VBA sendkeys pour aller automatiquement coller et exécuter ma commande en console ?
Dernière modification par micmac le 22 juin 2024 16:37, modifié 3 fois.
Raison : Ajout de la coche verte
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

Salut,
Podgers_95 a écrit : 20 juin 2024 07:051. existe t'il une autre façon de faire des copiers-collers récursif et sélectif ?
La récursivité de répertoires étant une question récurrente, elle fait l'objet d'un suprême de code.
Podgers_95 a écrit : 20 juin 2024 07:051bis. existe t'il le pendant à la commande VBA sendkeys pour aller automatiquement coller et exécuter ma commande en console ?
Nul besoin de faire ça pour exécuter une instruction Shell, il suffit d'écrire le script d'abord.
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Merci de ton retour.

Si je comprends ce que tu propose c'est à moi de coder une recherche récursive avec une grosse boucle for, ressortir le chemin de chaque fichier *.bmp et l'utiliser ensuite dans un filecopy en veillant au préalable à tester si ce fichier n'existe pas déjà dans le répertoire de destination ?

Oui c'est possible de faire ça... mais en console c'est plus simple, plus rapide : find . -name ""*.bmp"" -exec cp --parents {}. Il ne faut quand même pas réinventer la roue à chaque fois ?

D'où l'idée de passer par la console, d'écrire la commande qui va bien, de l’exécuter et c'est tout. Mais sendkeys n'est pas implémenté sur LibreOffice.
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

Podgers_95 a écrit : 20 juin 2024 08:45 mais en console c'est plus simple, plus rapide
Et donc pourquoi vouloir faire ça en Basic ?
C'est bien toi qui fait la demande non ?
Podgers_95 a écrit : 20 juin 2024 08:45D'où l'idée de passer par la console, d'écrire la commande qui va bien, de l’exécuter et c'est tout.
Donc rien à voir avec la copie de fichiers, tu cherches à exécuter une ligne de commande en mode console.
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Et donc pourquoi vouloir faire ça en Basic ?
C'est bien toi qui fait la demande non ?
Oui car je fais d'autres actions dans mon code en basic, cette copie de fichier n'est qu'une partie. Les commandes trouvées filecopy et copyfolder ne répondent pas à la demande d’où l'usage d'une commande en console. Mais il existe peut être des paramètres ou des subtilités à l'usage de ces fonctions, auquel cas plus besoin de console. S'il faut se taper toute la programmation de la récursivité (merci pour le suprême code) c'est quand même pas la bonne solution.
Donc rien à voir avec la copie de fichiers, tu cherches à exécuter une ligne de commande en mode console.
Oui effectivement c'est le pbs que je rencontre mais j'ai détaillé le pourquoi, c'est pour éviter les remarques du genre, c'est un problème xy, utilise un .bat etc... Je veux copier de façon récursive des éléments choisis (*.bmp) d'un dossier vers un autre en conservant l'arborescence du dossier source, sans copier ceux qui existent déjà dans le dossier destination ni écraser l'existant.

Mais si il est inutile d'expliquer le pourquoi, veux-tu que je ferme ce post et que j'en ouvre un autre en ne considérant que l'aspect "exécuter une ligne de commande en mode console" ?
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

Je ne comprends pas ton histoire avec ton mélange de VBA et tes instructions Range("B26").
Il faut arrêter de croire qu'on peut utiliser le langage de Microsoft avec OpenOffice ou ses dérivés.
Dude a écrit : 20 juin 2024 08:24 Nul besoin de faire ça pour exécuter une instruction Shell, il suffit d'écrire le script d'abord.
Un truc du genre :

Code : Tout sélectionner

sSource = """" & Dossier_Photos & "/Temp/." & """"
sDest = """" & Dossier_Photos & "/Anciens_Fichiers_Chiffres/" & """"
sScript = "cd " & sSource & "; find . -name ""*.bmp"" -exec cp --parents {} " & sDest & " \;;exit"
sBash = ConvertToURL("/bin/bash")
Shell(sBash, 2, sScript)
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Ce mélange est dû au fait que j'avais d'abord fais ce script sous VBA Excel et sous Windows (et il tournait sans pbs)... et j'ai depuis décidé de passer sous linux kubuntu et avec LO. J'ai été surpris de ne pas avoir à tout ré-écrire (et tant mieux) ce qui explique le mélange de code.

Dû fait du manque de la fonction sendkeys pourtant bien utile :

Je mets en B26 ma commande, je la copie dans le presse papier, puis j'efface la cellule (oui ok il y a avait peut être plus simple pour envoyer vers le presse papier... quoique c'est parfois imbuvable, pas essayer sur LO)

Elle est ensuite prête à être copié dans la console (clic droit - coller)

Je teste ta solution cet AM, et je reviens dire quoi :)
Libroffice 24.2 sous Linux Kubuntu 64 bits
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

J'ai testé, j'ai pas réussi la compilation :cry: (voir PJ)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 10110
Inscription : 28 août 2010 08:45

Re: [Basic] Copie de fichiers

Message par micmac »

Lorsque votre message n'est pas suivi d'une réponse, merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton MODIFIER Image en haut à droite de chaque message et d'un autre bouton ajoutImage si vous désirez ajouter un complément.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Ce n'est pas le problème, c'est juste que j'ai mis une forme sur la page excel pour lancer la macro en cliquant dessus.

J'ai le même problème en mettant "Sub truc()".
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

Podgers_95 a écrit : 20 juin 2024 15:03 j'ai mis une forme sur la page excel pour lancer la macro en cliquant dessus.
Pourquoi parles-tu d'Excel ? Si tu fais des macros, il faut un classeur au format natif ODS.
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Oui pardon dans mon fichier ODS, c'est une habitude, je suis sous LO depuis peu de temps :)
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

Plutôt que d'appeler le binaire et lui passer des paramètres.
Exécute directement la ligne avec un bash -c
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Je ne connais pas la structure de la commande

Code : Tout sélectionner

bash -c
J'ai essayé mais j'ai toujours une erreur
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libroffice 24.2 sous Linux Kubuntu 64 bits
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26209
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Copie de fichiers

Message par Dude »

demo.gif
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Podgers_95
Fraîchement OOthentifié
Messages : 9
Inscription : 20 juin 2024 06:08

Re: [Basic] Copie de fichiers

Message par Podgers_95 »

Yes !!!!!!!!!!!!!!!!! :bravo:

Merci @Dude, c'est nickel.

Je n'ai pas encore compris le (chr34) qui est l'équivalent d'une double ", mais c'est à priori indispensable.

Ça fonctionne super, même pas d'ouverture de fenêtre de console, c'est transparent dans le script :D

Je passe en "RESOLU"

EDIT : j'ai dans mes chemins de dossier des espaces. J'avais doublé les quotes mais maintenant ça ne passe pas

par exemple :

Code : Tout sélectionner

sSource = "/home/sebastien/Desktop/dossier test"
Une idée pour que le bash accepte cet espace ? Pas de message d'erreur mais il n'exécute pas la commande.

Ben oui bien sûr "\" :D j'avais testé mais omis le chr(34)
Libroffice 24.2 sous Linux Kubuntu 64 bits