Copier coller d'un ficher vers un autre

Bonjour à tous,

je suis loin d'être un expert VBA, je vous explique mon problème (je suis dessus depuis deux semaine )

J'utilise un classeur Excel pour suivre des demandes de prestations (qui sont également sous Excel.)

je souhaite en automatiser la prise en compte en créant une macro permettant d'ouvrir la demande de prestation et d'en copier le contenu vers mon fichier de suivi.

l'action est donc:

Depuis mon fichier de suivi

Ouvrir la demande de prestation (fichier pouvant changer de nom mais pas de forme du contenu) (ça va)

copier les éléments de mon formulaire vers mon fichier de suivi sur la première ligne vide. (ça non..)

Pour compliquer le tout : plusieurs prestation peuvent être dans le formulaire et il faut créer une ligne par "prestation" saisie dans la colonne "prestation" (en y renseignant à chaque fois les autres champs)

Je galère donc depuis deux semaine pour copier les éléments du fichier ouvert vers ma premières ligne vide par prestation

ensuite réaliser le test pour s'arrêter à la fin de la dernière prestation du formulaire.

Pour palier mon manque de compétence j'ai créé un UserForm dans mon fichier de suivi pour saisie manuelle des données (mais c'est long à remplir...) qui traduit approximativement mon besoin d'automatisation. le raccourci clavier pour lancer le UserForm est (Ctrl+maj+N)...

Merci d'avance pour vos conseils (ci dessous mes quelques lignes de "code" et en PJ mes fichiers de travail) si je ne suis pas assez clair dites le moi.

Sub CopierDonnees()

Dim Entree As Workbook

Nomfichierentree = Application.GetOpenFilename("Fichier Excel (*.xlsx), (*.xls)")

' On verifie que l'on a selectionné un nom de classeur

If Nomfichierentree <> False Then

' On ouvre le classeur

Set Entree = Workbooks.Open(Nomfichierentree)

Set Sortie = ThisWorkbook

If MsgBox("Etes-vous certain de vouloir Enregistrer ce Bon pour prestation ?", vbYesNo, "Demande de confirmation") = vbYes Then

L = Sheets("Générale").Range("a65536").End(xlUp).Row + 1

Range("B" & L).Value = Entree.Sheets("FACS").Cells(N, 6)

Range("E" & L).Value = Entree.Sheets("FACS").Cells(C, 9)

'et à suivre....

End If

' On ferme le fichier d'entrée

'Entree.Close

End If

End Sub

Bonjour et bienvenue sur le forum

J’avoue ne pas bien suivre tes explications.

Tu parles de ‘’demandes de prestation’’ et de ‘’fichier de suivi’’

Et tu joins deux fichiers : ‘’Suivi réalisation’’ et ‘’Bon pour réalisation’’.

Puis tu demandes que depuis le ‘’fichier de suivi’’ ( ?) on puisse ouvrir la ‘’demande de prestation’’ : où est-elle ? de quoi s’agit-il ? du’’bon pour réalisation’’ ?

Tu indiques enfin avoir fait un userform pour ‘’pallier à ton manque de compétence’’ mais tu regrettes que ce soit long à remplir…Donc tu n’en veux pas ?

Je suis un peu perdu …

Pourrais-tu reformuler plus précisément ce que tu attends comme aide du forum ?

Bye !

Bonjour,

Après quelques recherches sur le forum j'ai progressé. Mais je pense que mon code est simplifiable. Dans la macro import BPC contenu dans le fichier de suivi ci-joint je réalise un teste de présence d'autres prestations ligne par ligne pour à nouveau copier un certain nombre de cellule afin de créer une ligne par prestation. Auriez-vous une solution plus simple?

Merci d'avance

Effectivement je ne suis par très claire.

les demande de prestation sont effectuées au travers du "bon pour réalisation". (plusieurs prestation possible par bon)

mon fichier de suivi est bien le "suivi réalisation"

mon besoin est de sélectionner un "bon pour réalisation" afin d'en importer le contenu dans le "fichier suivi réalisation"

avec pour contrainte de créer une ligne par prestation (tel que réalisé dans mes nouvelles pièces jointes. mais je pense que cela peut être fait plus simplement.

concernant mon formulaire. j'étais content d'avoir créer un formulaire au départ mais vu la quantité de prestation que j'ai à traiter le formulaire n'est plus la bonne solution.

Nounours928 a écrit :

Auriez-vous une solution plus simple?

Plus simple ?

Pas vraiment.

Peut-être aurais-tu pu appeler WB la feuille ‘’Suivi réalisation’’ :

Set WB2 = ThisWorkbook.Sheets("Générale")

Cela t’aurais permis d’économiser un peu de saisie, exemple :

WB2.Cells(derlig + 1, 5).PasteSpecial Paste:=xlValues

Au lieu de :

WB2. Sheets("Générale").Cells(derlig + 1, 5).PasteSpecial Paste:=xlValues

Pour la saisie d’une prestation, je ne vois pas comment simplifier.

Mais comme il y en a plusieurs sur un bon, on peut faire une boucle de ce que tu as écris pour la première et la parcourir autant de fois qu’il y a de prestations sur le bon.

La version ci-jointe, à tester, tient compte de ces remarques. La macro en est sensiblement raccourcie.

Cela te convient-il ?

Bye !

Je te remercie pour ta réponse.

Concernant ta "version ci-jointe" il me semble que tu ne l'as pas ajouté.

Concernant la réalisation de la boucle n'ayant pas vu ta version, la difficulté que j'y vois c'est qu'il ne faut pas simplement répéter la première phase de copier/coller. En effet, les cellules correspondantes aux dates de début, fin et cible prestation doivent correspondre à la prestation concernée. (je ne sais pas si je suis très clair.)

en tous cas encore merci pour ta réponse.

maintenant je vais continuer mon codage car il faut que j'insère d'autres données issues d'un autre formulaire mais en relation avec chaque prestation existante dans mon fichier de suivi... il n'y a plus qu'à...

bye

Nounours928 a écrit :

il me semble que tu ne l'as pas ajouté.

Quel étourdi ne suis-je pas !

Heureusement que je n'avais pas vidé ma corbeille ...

Voilà qui va être réparé.

A ta disposition.

Bye !

Juste un petit oubli de définition de WB2, mais après ajout: well done.

Merci beaucoup, je n'hésiterai pas si je galère trop dans la suite de mon projet.

bye

Rechercher des sujets similaires à "copier coller ficher"