Transfert de données entre 2 classeurs ouverts ?

Bonjours à tous,

Je voudrais dans un module séparé de mon code principal, en fonction du texte inscrit dans la Combobox "cbo_Post" du "frm_Montant" du classeur "Compta Petouliers-TC", me rendre sur la feuille du même nom pour y inscrire les données au dessus de la ligne total par insertion d'une ligne.

Après quelques heures de lecture et de recherches, je n'y arrive pas...

Pourriez-vous m'aider à le faire ...?

Merci de votre gentillesse...

Mes fichiers joint:

15bilan2018.xlsx (106.87 Ko)

Bonjour,

Si j'ai bien compris ... en voici un bout ...

  • dans le même dossier, il y a un fichier "Bilan2018.xlsx"
  • dans ce fichier bilan, il y a une feuille C.MUTUEL (exemple que j'ai choisi)
  • dans cette feuille, il y a un tableau identique à celui du fichier "Compta ......"

- si j'ai bien compris à chaque écriture, une copie se fait dans le fichier "Bilan....."

À faire ...

  • dans le fichier "Compta ..."
  • ajoute un module et copies-y la macro suivante.
  • à la fin de la macro "btn_Valider_Click" du formulaire "frm_montant", ajoute un appel à la nouvelle macro ci-jointe.

Il ne te restera qu'à adapter pour les autres feuilles ... au besoin ....

Option Explicit

Public xlApp As New Excel.Application ' déclarer Public si dans un module

Sub CopieAuFichierBilan()

Dim BDir As String
   '''Dim xlApp As New Excel.Application ' déclarer Public si dans un module
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim BLig As Long      ' bilan
Dim CLig As Long      ' compta

   BDir = ActiveWorkbook.Path & "\"

   '''Ouvrir le classeur dont on a besoin avec tout le chemin...
   Set xlBook = xlApp.Workbooks.Open(BDir & "Bilan2018.xlsx")
   Set xlSheet = xlBook.Sheets("C.MUTUEL")      ' si on veut utiliser une feuille en particulier
   '''   '   ActiveWindow.Visible = False

   CLig = ActiveWorkbook.Sheets("C.MUTUEL").Range("A1048576").End(xlUp).Row - 1

   With xlSheet
      BLig = .Range("A1048576").End(xlUp).Row
      .Range("A" & BLig & ":G" & BLig).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
      .Range("A" & BLig & ":F" & BLig) = ActiveWorkbook.Worksheets("C.MUTUEL").Range("A" & CLig & ":F" & CLig).Value
   End With

   xlBook.Save
   xlBook.Close

      ' au cas où d'autres classeurs seraient ouvert
   Windows("Compta Petoumiers-TC.xlsm").Activate

End Sub

Ouupppssss! Je viens de remarquer que tu roules sous Excel 2007

La macro n'a été validé que sous Excel 2016

ric

Bonjour,

Ouufff!!!! Ça fonctionne sous Excel 2007, si on inscrit l'appel de la macro ainsi :

Call Mod_Copie_Au_Bilan.CopieAuFichierBilan

"Mod_Copie_Au_Bilan" est le nom du module que j'ai créé.

Pour le reste, une variable pour retenir quelle feuille a été écrite.

Un "Select Case" ou une boucle quelconque pour dynamiser entre les différentes feuilles écrites et leurs écritures au Bilan.

ric

Bonsoir et merci ric pour ton code,

Je l'ai testé et n'ai pas réussi à le faire fonctionner...!

Mais en le relisant, je me suis rendu compte que je m'étais peut-être mal exprimé...

et je te prie de bien vouloir m'excuser si je t'ai induit en erreur...

Le fichier "compta Petouliers" est mon fichier de départ, c'est de la que je veux tout gérer.

La feuille "C.MUTUEL" se trouve dans ce fichier et pas dans le fichier "bilan2018".

Si j'ai bien compris ... en voici un bout ...

  • dans le même dossier, il y a un fichier "Bilan2018.xlsx"
  • dans ce fichier bilan, il y a une feuille C.MUTUEL (exemple que j'ai choisi)

Je rempli déjà la feuille "C.MUTUEL" avec mon UserForm.

UserForm contenant une "cbo_Poste" qui liste toutes les feuilles du classeur "Bilan2018" sauf les 2 dernières.

Je veux me servir de cette liste pour aller sélectionner la feuille correspondante dans le classeur "'Bilan2018" que je ferai ouvrir en masqué par le classeur "Compta Petouliers".

De cette manière, je vais pouvoir entrer ma saisie aux deux endroits en même temps (Dans la feuille "C.MUTUEL" du classeur Compta et la feuille correspondante au poste sélectionné dans la ComboBox "cbo_Poste".

C'est là ou je bute: appeler la feuille dont le "Sheets.name" correspond au nom sélectionné dans la cbo.

En tout cas merci encore mille fois pour le mal que tu te donne à vouloir m'aider...

Bonjour,

Effectivement, j'avais compris autre chose que le but recherché ... désolé.

J'ai passablement avancé. Mais, là j'ai bloqué.

À chaque écriture, comment écrire dans la bonne feuille sans que ça devienne une usine à gaz (expression lue à plusieurs reprises sur les forums).

Si j'écris le nom de la feuille du fichier bilan manuellement, ça passe bien.

Mais ce nom dans une variable ... je suis peut-être trop fatigué (23h20).

ric

Bonjour,

Bon, ça fonctionne.

J'ai ajouté un module "Mod_Copie_Au_Bilan".

Dans ce module, la macro "CopieAuFichierBilan" est appelée à l'ouverture du formulaire.

Le fichier bilan est ouvert et placé en second plan.

En cliquant sur le bouton "Valider", la ligne sélectionnée du combobox "cbo_Poste" est lue, un "select case" dans la macro "InsertLigneB" détermine les paramètres de la feuille à écrire.

Pour l'instant, il y a seulement > Crédit Mutuel > Créditer > Chèque ... qui fonctionne.

Pour les autres, il ne rester à dupliquer les lignes d'écriture et ajouter Fbilan. devant chaque ligne à la macro "btn_Valider_Click".

Exemple ;

            ' Écris la date en colonne A
           Cells(iLig, 1) = Txt_Date   ' écrit dans le fichier source.
    Fbilan.Cells(BLig, 1) = Txt_Date    ' écrit dans le fichier Bilan

Je n'ai pas prévu la feuille "Fin d'année", elle n'a pas de tableau.

J'ai manqué oublier ... la réécriture des formules reste à faire dans Bilan.

Mais étant donné que tu as bien réussi dans le fichier source, la confiance règne.

Je te laisse t'amuser avec cela.

Je reste disponible.

ric

Bonjour ric,

Merci infiniment pour ce travail remarquable, mais dis moi ne serais tu pas VBAddict insomniaque ?

J'ai testé ce matin en coup de vent, ça a l'air de bien fonctionner, je m'y replongerai à mon retour, car m'a l'air plutôt coton.

Je ne m'imaginais pas la complexité du problème et je dois t'avouer que sans toi, j' aurais été bien incapable d'écrire ce code, j'ai encore beaucoup de progrès à faire.

Je m'accroche, je m'accroche...

Je te tiens au courant.

Bonjours ric,

J'espère que tu t'es reposé un peu...

J'ai décortiqué ton code, et je pense l'avoir compris...

Puisque je l'ai reproduit pour les débits.

Avant d'aller plus loin, j'ai essayé de recréer la grille dans la feuille "CONCOURS INTERNE", ainsi que le report de ma formule en Col F, mais je suis encore bloqué après 2 heures d'essais et de tests...

Merci beaucoup pour ton aide...

Je vais créer un au post pour ce nouveau problème que je ,'arrive pas à résoudre.

Bonjour,

Les formules ...

Dans ton classeur source "Compta Pet...." , feuille "C.MUTUEL", le tableau est un TCD (tableau croisé dynamique).

Mais, ce n'est pas le cas des tableaux au classeur Bilan.

La méthode d'écriture des formules doit être différente de celle dans ton module "mod_CopieFormule".

De deux choses l'une,

- ou tu transformes tous les tableaux en TCD dans Bilan et utilise la même méthode au "mod_CopieFormule" Selection.AutoFill Destination:=Fbilan.Range("F4" & ":F" & BLig), Type:=xlFillDefault

- ou on utilise une autre formule qui reprend "F4" du tableau concerné dans Bilan et en copie la formule en "F" de la nouvelle ligne ... toujours dans "mod_CopieFormule" ... Fbilan.Range("F" & BLig) = Fbilan.Range("F4").FormulaR1C1 ... cette solution semble plus simple.

Mais là, il y a une restriction pour conserver la dimension "simplicité" ... la formule devra être lue et écrite dans la colonne F.

Ce qui entraine des modifications mineures aux tableaux de la feuille Bilan ... ils devront être tous de même gabarit.

Exemple : feuille "Subvention" ... il faut y ajouter une colonne en C afin que les formules se retrouvent en F.

Autre point à corriger si tu optes pour la simplicité et l'uniformité ... classeur source, macro Sub InsertLigneB(sh As Byte) ... à la ligne 3e ligne du "Case 3" ... changer colonne E pour G afin de s'adapter à la nouvelle largeur du tableau et ainsi avoir G pour la colonne "Pointage" comme dans les 2 premiers tableaux du classeur Bilan.

La macro modifiée pour ajouter la copie des formules au Bilan ...

Remarque que je ne déclare pas la variable Blig (Bilan ligne), car elle est déjà déclarée Public dans le module "Mod_Copie_Au_Bilan" ... étant publique, sa valeur est conservée d'une macro à l'autre (du même élan > d'un module à l'autre)

Sub CopieFormuleCreditMutuel()
        ' Copie de la formule colonne F feuille C.MUTUEL
   Dim iLig As Long
   iLig = Sheets("C.MUTUEL").Range("A1048576").End(xlUp).Row - 1

   Range("F4").Select
   Selection.AutoFill Destination:=Sheets("C.MUTUEL").Range("F4" & ":F" & iLig), Type:=xlFillDefault
   Fbilan.Range("F" & BLig) = Fbilan.Range("F4").FormulaR1C1

End Sub

Si ça accroche en quelque part, n'hésite pas.

ric

Bonjour ric,

ça y est, c'est en place, j'écris bien en simultané dans mes deux classeurs....

Je vais maintenant essayer de me dépatouiller avec le dispatch des opérations dans les différents postes du classeur "bilan2008".

je sens que mon neurone rescapé va fumer dur...lol

Si je vois que je ne m'en sort pas, je ne manquerai pas de venir poster à nouveau sur le forum.

un grand merci à toi pour l'avancée que tu m'as fait faire dans mon projet...

Bonjour,

Envoie d'autres demandes ... ... c'est du vrai gâteau.

ric

Rechercher des sujets similaires à "transfert donnees entre classeurs ouverts"