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
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
A voir également:
- Excel:".bat"-inverser ligne/colonne automatiq
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
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
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?
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?
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
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,
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,
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
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 :)
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 :)
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
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
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
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
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
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
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
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)
++
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)
++
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
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.
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.
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
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
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
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
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...
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
26 juin 2010 à 11:00
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
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
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
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
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