Excel:".bat"-inverser ligne/colonne automatiq

Fermé
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 - 24 juin 2010 à 12:07
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 - 28 juin 2010 à 09:14
Bonjour tout le monde !!

Je me permets de demander votre aide car je suis comme qui dirait coincé.... (generalement, avec un peu de recherche je trouve des forums deja existant repondant à mes problemes, cependant dans ce cas je pense que c'est trop "ciblé"...)

En effet, je souhaite "automatiser" l'inversement ligne/colonne d'un fichier excel lors de son transfert d'un pda vers un pc.
Je pense que l'utilisation d'un ".bat" devrait convenir a mon projet :
du style, execution du copier/coller, puis execution de l'inversement ligne/colonne.

Pour cela, il faudrait donc que je connaisse les processus qui entrent en jeu lors de ces 2 operations.

Je vous remercie d'avance pour vos reponses (et vos lumieres!!) et vous souhaite une agreable journée de ce beau temps d'été !!!

Cordialement,

ps: je suis un novice en ".bat" donc dur dur ...



A voir également:

9 réponses

Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
Modifié par Krysstof le 24/06/2010 à 12:11
ben ce n'est pas le .BAT qui pourra t'aider, mais le VBScript (VBS)

avec VbScript, tu peux automatiser des opération excel, comme tu le ferais dans une macro VBA, mais sans faire la macro dans le fichier excel lui meme.

c'est assez compliqué, donc avant de me lancer dans le sujet, connais-tu VBScript?
0
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 1
24 juin 2010 à 12:18
Bonjour Kryssof et merci de ta reponse rapide.

Non malheuresement je ne connais pas le VBScript (j'ai essayé un peu de VBA excel mais trop compliqué pour moi, je prefere le C par exemple car plus intuitif au niveau des ligne de commande...).

Sinon, pourquoi le ".bat" ne conviendrait pas ?
Car cela me permettrait de creer un p'tit ".exe" sur mon bureau qui ferait les 2 operations ... (copier/coller et inversement ligne/colonne).

Sinon, je suis tout de meme tout oui, pour ecouter tes reponses (meme en VBScript, car ce n'ai jamais perdu bien au contraire....)

Voilou,
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
24 juin 2010 à 12:23
pourquoi pas le BAT?

simplement car le Bat ne sert pas à manipuler des applications. un batch lance des programme, manipule des fichier et des dossier (copie, supprime, déplace...)

ce que tu veux faire, c'est appeler des fonctionnalité excel, donc passer par l'API excel.

pour utiliser l'API, il te faut un vrai langage de programmation qui te permet de le faire, et BAT n'est pas un langage de programmation a proprement parler

si tu sait faire du C, dans ce cas tu peux essayer d'appeler l'api Excel mais c'est assez tordu.

le plus simple reste le VBS qui appellera les api excel (en vba, c'est la meme chose)


pour la conversion en EXE, je vois pas l'utilité, tu peux double cliquer sur un EXE, un BAT, ou VBS, cela fera la meme chose : ca se lancera :)
0
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 1
24 juin 2010 à 12:36
Krysstof,

Ok pour le ".BAT", je comprends.

Cependant, peux-tu developper un peu plus la demarche au niveau du VBS car je suis un peu novice (par exemple, est-il possible que je trouve sur le net la "ligne de code" VBS qui me permettra d'effectuer cette action)(et surtout aussi le debut du code car comme je te l'ai dis plus haut je suis "tres" novice un VBS ce qui signifie en clair que je ne suis pas foutu de creer 2 lignes de code dans ce langage..... :(.... trop triste.
De plus, faut-il un IDE particulier pour programmer en VBS ou est-ce directement integré a Windows?

Merci encore pour tes reponses et de te prendre sur ton temps pour te pencher sur mon probleme.

Amicalement

nunu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
24 juin 2010 à 14:42
pour faire du vbs, un simple notepad suffit, ce n'est pas compilé.

voila un exemple pour ouvrir un classeur excel
'--------
'crée un objet excel
Set objXL = CreateObject("Excel.Application")

'crée un objet représentant le classeur, WB pour WorkBook
Set WB=objXL.Workbooks.open("c:\temp\monfichier.xls")

'affiche excel (par défaut il est masqué)
objXL.Visible=True

'crée un objet représentant la 1ere feuille du classeur
Set mafeuille=objXL.ActiveWorkBook.WorkSheets(1)

'ici tu rajoute du code que tu veux faire, comme tu le ferais en VBA dans excel
'directement , exemple

mafeuille.cells(1,1).value = "bonjour" ' <-- ca écrit bonjour dans la cellule A1

'c'est ici que tu mettra donc le code pour ta manipulation


'pour finir tu enregistre et tu ferme
WB.Save
WB.Close

'et tu ferme excel
objXL.quit
Set objXL = Nothing
'--------

ce bout de code ouvre un fichier excel existant et modifie la cellule A1 de la 1ere feuille.

ce n'est qu'un exemple.


pour faire ce que tu veux faire, tu enregistre la macro (outil--> macro --> Nouvelle macro) de ce que tu veux faire

dans l'éditeur de macro d'excel (alt+F11) tu auras du code représentant ta manipulation.

ce code devrait etre facilement intégrable dans le script VBS, mais il y a un peu d'adaptation à faire.

Vu que tu n'as pas décrit assez précisément ce que tu voulais faire, je ne peux pas faire plus pour l'instant
0
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 1
24 juin 2010 à 15:12
Krysstof,

Tout d'abord, merci pour ta reponse une fois de plus.

Deuxièmement, je pense avoir compris (en utilisant la fonction "nouvelle macro") en partie la demarche (soit dit en passant je n'aurai jamais pu ecrire moi meme le debut et la fin du code (pas tres comprehensible pour moi...donc sympa de ta part :)) a effectuer.

Cependant, plus clairement je dois recuperer un fichier issu d'un pda (relier par usb et gerer avec activesync). Le but serait de creer un petit bouton (".exe ou autres ducoup :))sur laquelle j'appuierai qui integrerai a la fois le principe de copier/coller mais qui dans le meme temps effectuerai l'inversement ligne/colonne.

Ce qui me chagrine maintenant, c'est comment gerer la fonction copier/coller.

Mais a mon avis, je vais effectuer le copier/coller manuellement, et simplement utiliser ton petit bout de code pour effectuer l'inversement.

Enfin, une petite derniere question et pi promis je te laisse travailler :) :
mes fichiers excel seront composés de plusieurs feuillets et je voudrais appliquer l'inversement sur toutes sauf sur la premiere. La creation d'une macro (intra excel) qui prend en compte toutes les manipulations (c-a-d plusieurs inverssements successifs sur differents feuillets) puis exporté dans ton bout de code peut-elle convenir ? (je pense que oui mais je prefere avoir ton avis a ce sujet.

Merci d'avance encore une fois.

Bon courage (il faut que je bouge en deplacement donc je ne risque pas de te repondre aussitot... mais merci quand meme)

++
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
24 juin 2010 à 15:24
hum, j'ai pas tout compris, mais j'ai pas eu mon café ;)

sinon, quand tu copie, essaye de faire un collage spécial --> Transposé

normalement cela switch les ligne et le colonne.

si ca te convient, enregistre ce copier/collage spécial dans une macro, et on verra comment l'appliquer sur toutes tes feuilles...


pour ce qui est du PDA, alors la... le transfert PDA->PC ou PC->PDA je sais pas faire.
0
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 1
25 juin 2010 à 09:35
Bonjour (Krystof....peut-etre ;))

Tout d'abord, desolé pour le retard de cette reponse....

Premierement: Dans le cas du transfert pda->pc et inversement y a pas de soucis (j'y ai passé 2 jours pour gerer la perte de macro (a cause de windaub mobile) et tout et tout .... solution: utilisation de SoftMaker (planmaker exactement pour excel) pour garder les macro et fonctions (remplissage automatique des cellules, liste deroulante, etc...) utilisables sur mon fichier excel sur le pda.

Deuxiemement:: Oui le collage speciale "transposer"fonctionne. Ce qui est problematique pour moi, c'est de pouvoir selectionner le fichier excel issu du pda (qui, du coup, est sur le pc apres transfert) et d'automatiser ce collage special (sans oublier le fait que le premier feuillet ne doit pas etre inversé).
C-a-d que je voudrai simplement (pas sur que le terme convienne ;) ...) selectionner le fichier excel sur le bureau par exemple et le transferer dans un dossier (c'est exactement a ce moment precis qu'il faudrait que l'inversement s'effectue).

J'espere avoir été plus clair ce coup-ci (et pi peut-etre que t'as au ton café entre temps :) ).

Merci d'avance pour vos reponses.

Cordialement

nunu
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
25 juin 2010 à 16:01
bon, on va dire que tu gère par un processus quelconque la copie du PDA vers l'ordinateur, ok.

on va dire que ta copie pose les fichier dans un dossier XXXX (tu choisira ou tu veux), et par simplicité pour le code, il n'y aura QUE les fichier excel que tu veux bidouiller dans ce dossier, et uniquement ces fichier, pas d'autre. (donc pas le bureau, ou un sous-dossier si tu veux.)

on va dire que tu veux enregistrer les fichier transposer dans le dossier YYYYY

et pour finir, on va dire que tous les fichier doivent subir la meme manipulation


il y a un objet windows qui d'appelle le "File System Object" qui permet dans VBS de manipuler les fichiers, parcourir les dossier, etc...

'-----------
dim dossier_src
dossier_src="XXXX"   'chemin complet avec \ a la fin  ex: c:\temp\
dim dossier_dst
dossier_dst="YYYY"  'chemin différent de la source, avec \ a la fin, ex c:\temp\sortie\

Set objXL = CreateObject("Excel.Application") 
'décommente la ligne suivant pour afficher excel (par défaut il est masqué) 
'objXL.Visible=True 

set objFSO = CreateObject("Scripting.FileSystemObject")
set list_fichier =  objFSO.GetFolder("XXXX").Files
For Each f In list_fichier
      traite_fichier f.name
Next

objXL.quit false
Set objXL = Nothing 

sub traite_fichier(nom)
    Set WB=objXL.Workbooks.open(dossier_src & nom) 

    'manip feuille 1
    'manip feuille 2
    'etc...

    WB.SaveAs  dossier_dst & nom
    WB.Close 

end sub

'----------------



ce petit code impose que tous les fichiers aient le meme nombre de feuille, avec le meme nom, le meme format.

il est possible de mettre une boucle "for each" qui énumere la collection de feuille
for each feuille in WB.sheets
'faire la meme manip
next

tu peux tester le nom de la feuille (feuille.name) dans la boucle pour éviter une feuille qui a un nom particulier...

bref, tu est libre de faire ce que tu veux, mais faut que tu te mette un peu au code vbs :D
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 juin 2010 à 11:00
Bonjour tout le monde,

Une suggestion :
Puisque de toute façon dans le vbs il faut mettre du vba, pourquoi ne pas mettre directement la macro de transposition dans le classeur avec un bouton en feuil1 pour l'appeler.
Et tant qu'à faire la mettre dans Workbook_Open, récupérer l'OS avec Application.OperatingSystem et, en connaissant le contenu d'une cellule invariable, transposer si nécessaire à l'ouverture
eric
0
nunnu27 Messages postés 20 Date d'inscription jeudi 24 juin 2010 Statut Membre Dernière intervention 22 août 2010 1
28 juin 2010 à 09:14
Bonjour tout le monde,

Krisstof, j'ai donc regardé (avec attention ) le code que tu me propose... Bon il est clair que je ne comprends pas tout, mais vais essayer de le mettre en application.

Il est clair que je suis obligé de me mettre au VBS comme tu me le dis, car je ne vois pas l'interet de recopier "betement" un code si je ne le comprends pas (c'est quand meme plus gratifiant de comprendre le code que j'emplois). Par consequent, je me lance dans ce "fabuleux" monde de la programmation VBS (aie!, je sens que ca va me piquer...).

Sinon, dans tous les cas un grand merci krisstof (eriic egalement meme si tu as été un peu "vite" pour moi) pour ton aide (et le temps passé pour me repondre :) ).

Je garde donc precieusement ton code afin de pouvoir le mettre en application rapidement.

Je cloture donc ce topic par une derniere question (quand meme !!!):

Etant completement novice dans le VBS, selon vous combien de temps me faudra -t-il pour comprendre ton code et pouvoir le mettre en apllication (sachant que j'en ferait 3 heures tous les soirs et que je compte partir des bases afin de tout bien comprendre).

Merci encore une fois pour votre aide.

Cordialement
0