Traduction de mes actions en langage VBA
Bonjour le forum !
J'ai une suite d'actions en tête que j'aimerais programmer avec une macro mais je ne sais pas comment traduire cela en langage VBA.
Premièrement il faut que sur mon classeur 1, onglet 1 j'ai un bouton qui me permet, quand je clic dessus, d'ouvrir une boite de dialogue me proposant d'ouvrir un fichier.
Deuxièmement il faut que dans le fichier chargé je fasse un Ctrl+F pour remplacer les "," par des "."
Troisièmement il faut que dans le fichier chargé je fasse un Ctrl+A, Ctrl+C
Quatrièmement il faut que dans le classeur 1, onglet 1, la feuille que j'ai copié se colle.
J'ai effectué toutes ces actions en utilisant l'enregistreur de macro mais le problème est que le code VBA ne marche que pour le fichier que j'ai chargé et je ne sais pas comment avoir une boite de dialogue me proposant d'ouvrir n'importe quel fichier.
Un grand merci à ceux qui me lirons
Bonjour
Voilà pour le 1.
Pour le reste, tu devrais joindre un fichier montrant sur une feuille ce que tu as au départ et ce que tu veux obtenir sur une autre.
Bye !
bonjour
salut gmb
le besoin est-il de faire une macro ou bien d'importer un fichier de type csv ou Excel dans un fichier Excel ?
99% des imports se font sans VBA
Merci beaucoup pour le fichier c'est exactement ce que je voulais !!
Maintenant je veux que la feuille que je vais charger passe par un remplacement des virgule par des points et qu'elle s'insère la ou est placé le bouton "ouvrir"
Comme sur le fichier ci joint
jmd a écrit :bonjour
salut gmb
le besoin est-il de faire une macro ou bien d'importer un fichier de type csv ou Excel dans un fichier Excel ?
99% des imports se font sans VBA
Mon besoin est d'automatiser ces actions (d'ouvrir un fichier, changer les virgules par des points et l'insérer dans mon nouveau classeur) car le fichier sera utilisé par d'autres personnes.
Si ça avait été juste pour moi j'aurais simplement fait un import sans VBA mais je trouve qu'il est plus simple d'automatiser ca par une macro pour les autres personnes travaillant sur mon fichier
En testant différentes action avec la méthode simple enregistreur de macro j'ai effectué les actions que je souhaitais pour visualiser leur code VBA et en couplant cela avec votre code vba pour ouvrir un fichier j'obtiens cette macro :
Option Explicit
Dim f
Sub Ouvrir()
f = Application.GetOpenFilename(, , , , True)
Workbooks.Open (f(1))
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Select
Selection.Copy
Windows("Classeur1 v1.xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
End Sub
Elle a l'air de marché mais je voulais avoir votre avis
Après mise en forme du fichier je voudrais coller ma feuille a partir de la cellule A13 mais lorsque je modifie le code VBA A1 par A13 j'ai un message d'erreur qui arrive et qui me dit "Pour coller toutes les cellules d'une feuille de calcul Excel dans la feuille de calcul active, vous devez coller dans la première cellule (A1 ou L1C1)
Je vous joins le fichier avec la présentation que j'ai fait pour que vous puissiez visualiser..
Aussi dans le code VBA :
"Sub Ouvrir()
f = Application.GetOpenFilename(, , , , True)
Workbooks.Open (f(1))
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Select
Selection.Copy
Windows("Fichier monotone.xlsm").Activate
Range("A13").Select
ActiveSheet.Paste
End Sub"
Le fait que le code identifie le nom de fichier ou coller la feuille me gène car si quelqu'un appelle le fichier "Fichier monotone Paris" la macro ne marchera plus. Existe-t-il un moyen pour que la macro sache qu'il faut coller la feuille importée dans le fichier contenant la macro et non pas dans le fichier portant le nom "Fichier monotone"
Bonjour,
Qu'est-ce que tu ne comprend pas dans ce message ?
C'est pourtant clair. Dans des feuilles de 10 lignes tu ne peux pas en copier 10 pour les coller à partir de la 3e, ça ne rentre pas,
Si tu chausses du 44 tu ne rentreras pas dans du 36, même en forçant...
Et supprime les.select inutiles dans 99% des cas.
Remplace :
Cells.Select
Selection.Copy
par :
[A1].currentregion.copy
eric
Bonjour
ThomasP a écrit :jmd a écrit :...changer les virgules par des points...
Cela doit se faire via le paramétrage d'ouverture de fichier en paramétrant le format des dates et/ou nombres (séparateur de milliers et séparateur décimal notamment) de la source.
Le faire après par un remplacement n'est pas une bonne pratique car dans nombre de cas le fichier résultant n'est pas conforme...
eriiic a écrit :Bonjour,
Qu'est-ce que tu ne comprend pas dans ce message ?
C'est pourtant clair. Dans des feuilles de 10 lignes tu ne peux pas en copier 10 pour les coller à partir de la 3e, ça ne rentre pas,
Si tu chausses du 44 tu ne rentreras pas dans du 36, même en forçant...
Et supprime les.select inutiles dans 99% des cas.
Remplace :
Cells.Select Selection.Copy
par :
[A1].currentregion.copy
eric
Comment je peux faire dans ce cas ? Car je fais Ctrl+A pour sélectionner les données mais celles-ci varie en fonction du nombre de jour choisi, il peut y avoir deux ans donc 730 jours ou bien seulement 30 jours. La solution pourrait être d'écrire le code VBA pour faire (Ctrl+A - les 13 lignes du bas). Qu'en penses tu ?
Du coup actuellement voici mon code :
Option Explicit
Dim f
Sub Ouvrir()
f = Application.GetOpenFilename(, , , , True)
Workbooks.Open (f(1))
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Select
Selection.Copy
Windows("Fichier monotone.xlsm").Activate
Range("A13").Select
ActiveSheet.Paste
End Sub
Que dois-je modifier pour :
- Enlever l'action qui remplace les virgules par des points
- Faire en sorte que la macro sache qu'il faut coller la feuille importée dans le fichier contenant la macro et non pas dans le fichier portant le nom "Fichier monotone" (car si je nom du fichier change la macro ne marche plus)
Comment je peux faire dans ce cas ?
Ben commencer par essayer ce que je te proposais par exemple
eriiic a écrit :Comment je peux faire dans ce cas ?
Ben commencer par essayer ce que je te proposais par exemple
J'ai effectué les modifications comme vous l'avez proposé mais ca ne fonctionne pas. Voici ce que j'obtiens :
voici mon code VBA :
Option Explicit
Dim f
Sub Ouvrir()
f = Application.GetOpenFilename(, , , , True)
Workbooks.Open (f(1))
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
[A1].currentregion.copy
Windows("Fichier monotone.xlsm").Activate
Range("A13").Select
ActiveSheet.Paste
End Sub
Comment je peux faire pour que ma feuille l'intègre en dessous de la ligne bleu (Cellule A13) ?
Et que dois-je modifier pour enlever le remplacement des virgules par des points ?
Ben si c'est A13 ce n'est donc pas A1.
Mais ça a l'air bien vide vers A13, ça n'ira pas non plus.
Par contre ton code n'est pas agréable à lire, on ne le regarde même pas.
Prend l'habitude de l'indenter, et d'utiliser la balise 'Code'.
Et si tu veux intéresser du monde, vu qu'on est sur un forum Excel et pas Paint, met un xls et non une image dont on a que faire.
eriiic a écrit :Ben si c'est A13 ce n'est donc pas A1.
Mais ça a l'air bien vide vers A13, ça n'ira pas non plus.
Par contre ton code n'est pas agréable à lire, on ne le regarde même pas.
Prend l'habitude de l'indenter, et d'utiliser la balise 'Code'.
Et si tu veux intéresser du monde, vu qu'on est sur un forum Excel et pas Paint, met un xls et non une image dont on a que faire.
T'es obligé d'être désagréable dans tes messages eric ?
Je suis venu demandé de l'aide sur ce forum car je n'ai aucune connaissance en VBA et je souhaitais créer une macro pour le boulot, tout simplement. J'ai écris ce que je souhaitais faire, j'ai eu une première réponse de "gmb" qui m'a envoyé la première partie de la macroet j'ai ensuite essayé de me débrouiller en faisant bêtement des enregistrements de macro et en les ajoutant au code VBA de "gmb" tout simplement car je ne sais pas faire autrement.
J'ai posté plusieurs question et tu es arrivé comme un seigneur en dénigrant chacune de mes questions. Si le sujet ne t’intéresse pas c'est pas la peine de répondre pour n'ajouter aucune plus value à mon problème.
Depuis hier j'ai bidouillé le code comme j'ai pu et je suis arrivé à ca,
Pour ma question qui portais sur le fait de charger le fichier que à partir de la cellule A13, à la place de faire un Ctrl+A sur le fichier à charger j'ai sélectionné un Range("A1:H6793"). Ce qui me permet de l'intégrer en cellule A13.
Mon dernier problème concerne le code VBA :
Option Explicit
Dim f
Sub Ouvrir()
' Ouverture d'un feuille annexe à intégrer dans le fichier contenant la macro
f = Application.GetOpenFilename(, , , , True)
Workbooks.Open (f(1))
Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Select
Selection.Copy
' Sélection d'une zone suffisament large contenant les données de la feuille a intégrer
Range("A1:H6793").Select
Selection.Copy
' Collage des données de la feuille annexe dans le fichier contenant la monotone
Windows("Fichier monotone.xlsm").Activate
Range("A13").Select
ActiveSheet.Paste
End Sub
la ligne
Windows("Fichier monotone.xlsm").Activate
limite l'action de cette macro à ce son de fichier or il est fort probable que ce nom varie. Je voudrais trouver une solution pour que la macro sache qu'il faut coller la feuille annexe dans l'onglet contenant la macro, quelque soit le nom du fichier qui la contient.
Pas bonjour non plus,
Si mes conseils pour faire des posts que les helpers vont lire (au lieu de refermer tout de suite) t'ont parus désagréables je me retire donc et prendrais bien garde à ne plus te déranger, pas de soucis...
Bonne continuation.
eric
Les conseils ? Pardon mais à part me dire d'utiliser Code, qui je l'avoue est bien vu ! Le reste de tes commentaires n'a été d'aucune aide ! Cf la leçon comme quoi un 44 ne rentre pas dans du 36, il aurait été bien de me dire ca et ensuite m'expliquer comment faire mais à par faire la leçon tu ne m'as pas apporté ton savoir et c'est dommage pour un passionné d'excel.
Si en plus te ne comprends pas l'humour non plus...
Et tu ne manques pas de toupet.
Je t'ai expliqué pourquoi ton .paste ne pouvait pas pas fonctionner avec cells.copy, je t'indique une alternative pour ne copier que la zone en cours ce qui fonctionne dans la majeure partie des cas et :
Le reste de tes commentaires n'a été d'aucune aide !
C'est surtout que tu as copié bêtement l'exemple sans même chercher à comprendre, ni bien sûr à adapter à ton cas concret.
Tu n'as pas été en capacité d'exploiter l'aide, ce qui est totalement différent.
Un dernier conseil désagréable : l'aide excel et très bien faite et facilement accessible par F1 pour ceux qui veulent comprendre ce qu'ils font.
Au fait, tu peux retirer les 36 fillettes ça te décrispera.
J'ai essayé de remplacer, comme tu me l'as indiqué :
Cells.Select
Selection.Copy
par :
[A1].currentregion.copy
Mais ca n'a pas marché. Je t'ai fais en retour en te montrant un screen de ce que m'affichais excel et je t'ai joins mon code VBA pour que tu puisses me dire ce qui n'allait pas et voici ta réponse :
Ben si c'est A13 ce n'est donc pas A1.
Mais ça a l'air bien vide vers A13, ça n'ira pas non plus.
Par contre ton code n'est pas agréable à lire, on ne le regarde même pas.
Prend l'habitude de l'indenter, et d'utiliser la balise 'Code'.
Et si tu veux intéresser du monde, vu qu'on est sur un forum Excel et pas Paint, met un xls et non une image dont on a que faire.
Copié bêtement l'exemple oui tout à fait, je n'ai aucune expérience en programmation c'est ma première macro alors oui j'ai pris ton conseil pour argent comptant et j'ai remplacé ce que tu m'avais demandé de remplacé.