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 !

70classeur1-v1.xlsm (20.74 Ko)

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

40classeur1-v2.xlsm (26.43 Ko)
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 :

avec modification

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é.

Rechercher des sujets similaires à "traduction mes actions langage vba"