> Tous les forums > Forum Bureautique
 Macro Copier ligne vers un autre fichierSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
TheCrow
  Posté le 23/04/2014 @ 17:50 
Aller en bas de la page 
Petit astucien

Bonsoir,

Je suis en train de bâtir un formulaire que je dois envoyer a des gens. Aucun problème pour construire le formulaire mais j'aimerais y apporter un ajout. Lorsque les gens auront remplis le formulaire ils devront me le retourner et j'aimerais que toutes les informations de la ligne 250 aillent ce coller avec un collage spécial/valeur dans un fichier sur mon C:/ (nommé: Recap pour le bien de l'excerice) a la suite des informations déja dans le fichier.

L'entete du fichier Recap serait a la ligne 10 donc lorsque je recevrais le 1er fichier et que je cliquerais sur la macro, les informations de la ligne 250 du fichier recu irait se coller a la ligne 11 du fichier Recap. Au deuxieme fichier ca irait a la ligne 12 et ainsi de suite.

Mais lors du copier/coller des information du fichier recu vers le fichier Recap la macro découvre que l'information se trouvrant dans la colonne A se retrouve deja dans une des colonnes A du fichier Recap alors au lieu de la rajouter a la suite des autres lignes, elle remplace la ligne ou l'information est identique. Normalement la cellule A serait la cellule ou on retrouverait les # de magasins.

Hmmmm...suis-je assez clair?

Merci de votre aide

Publicité
ferrand
 Posté le 23/04/2014 à 23:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

On fait avec tes indications .

Classeur nommé Recap - Classeur formulaire, on ignore le nom, on ne sait d'ailleurs pas si le nom sera le même...

On ne sait si plusieurs feuilles ou non : comme il en faut une et une seule, ce sera la première dans tous les classeurs.

Dans le classeur Recap, mettre la macro ci-dessous dans un module standard :

Sub Récap(frec As String)
Dim n%, i%, lig250 As Range
With ThisWorkbook.Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
If n < 10 Then n = 10
Set lig250 = Workbooks(frec).Worksheets(1).Rows(250)
For i = 11 To n
If .Cells(i, 1).Value = lig250.Cells(1, 1).Value Then
.Rows(i).Value = lig250.Value
Exit Sub
End If
Next i
.Rows(n + 1).Value = lig250.Value
End With
End Sub

Dans le classeur formulaire (le modèle qui sera dupliqué), mettre la macro suivante dans le module ThisWorkbook :

Private Sub Workbook_Open()
On Error Resume Next
Application.Run "Recap.xls!Récap", ThisWorkbook.Name
End Sub

A la réception d'un classeur formulaire en retour, l'ouvrir alors que le classeur Recap est ouvert. L'opération se fera automatiquement à l'ouverture.

Si les classeurs sont au format 2007 et ultérieurs, remplacer Recap.xls par Recap.xlsm dans la macro formulaire.

Il ne sera pas inutile de prévenir les destinataires que le formulaire contient une macro pour le retour et qu'il ne se passera rien pour eux, qu'ils l'activent ou non.

TheCrow
 Posté le 24/04/2014 à 17:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bon...je vais tenter d'être plus clair...car c'est pas facile a expliquer et j'avoue que moi-meme j'ai d'la misere a me comprendre pour cette demande.

-Je recois un formulaire que je vais faire

1-Nom du fichier recu: Formulaire

2-Nom du fichier qui doit recevoir les données: Recap

3-Fonction de la macro: Prendre l'information de la ligne 250 du fichier Formulaire du premier onglet et allez le coller dans le fichier Recap à partir de la ligne 11. Par contre si la macro s'appercoit que l'information contenue dans la cellule "A" du fichier Formulaire se retrouve déja dans le fichier Recap alors au lieu de copier les informations a la suite des autres il remplace l'information déja existante

Est-ce que ca plus d'allure comme ca?

ferrand
 Posté le 24/04/2014 à 17:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Là tu te répètes ! A part le nom du fichier formulaire.

As-tu essayé ? Ou est-à dire que ce n'est pas toi qui émet le fichier formulaire que tu reçois ?

Je conçois que si tu ne l'émets pas, tu ne peux y incorporer une macro !

Dans ce cas tu adaptes la macro : tu supprimes l'argument frec dans la première ligne, et dans la suite du code tu remplaces frec par "Formulaire" (avec les guillemets, si c'est bien le nom du fichier).

Il te faudra la lancer, elle ne se lancera plus toute seule.

TheCrow
 Posté le 24/04/2014 à 18:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui je me repete ca doit etre l'age!

Ca ne fonctionne pas, j'ai tenté des deux facons meme si pour moi le mieux serait que je lance la macro moi-même.

Voici ce que j'ai fait mais ca bloque au niveau du With ThisWorkbook.Worksheets(1)

Dim n%, i%, lig250 As Range
With ThisWorkbook.Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
If n < 10 Then n = 10
Set lig250 = Workbooks(Formulaire).Worksheets(1).Rows(250)
For i = 11 To n
If .Cells(i, 1).Value = lig250.Cells(1, 1).Value Then
.Rows(i).Value = lig250.Value
Exit Sub
End If
Next i
.Rows(n + 1).Value = lig250.Value
End With
End Sub


Sub Macro1()

End Sub

ferrand
 Posté le 24/04/2014 à 20:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Set lig250 = Workbooks(Formulaire).Worksheets(1).Rows(250)

Le nom du fichier est une chaîne, donc guillemets... Et autant pour moi ! l'extension fait partie du nom de fichier.

Set lig250 = Workbooks("Formulaire.xls").Worksheets(1).Rows(250)

TheCrow
 Posté le 25/04/2014 à 13:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ben oui toi...une belle erreur de débutant!

J'ai modifié le tout et ca fonctionne très bien sur mon formulaire test, je vais faire mon vrai formulaire et si tout fonctionne aussi bien je viendrai fermer le sujet!

Merci de ton aide!

TheCrow
 Posté le 29/04/2014 à 16:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Alors tout fonctionne a la perfection..mais comme ca arrive souvent mes collegues ont demandés de changer un truc

Si le nom du fichier formulaire change a chaque envoi mais que dans le nom du fichier le mot formulaire est toujours inscrit

Exemple:

formulaire 101

12 juin formulaire 253

572 formulaire

J'aimerais que la macro fasse les memes étapes pour ces 3 exemples vu que les 3 ont le mots formulaire dans leur nom...est-ce possible?

C'est tout ce qui me manque pour avoir fini mon document, enfin!

ferrand
 Posté le 29/04/2014 à 22:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Reprenons !

Option Compare Text

Sub Récap()
Dim n%, i%, frec$, lig250 As Range, wkb As Workbook
For Each wkb In Application.Workbooks
If wkb.Name Like "*form*" Then
frec = wkb.Name
End If
Next wkb
If frec = "" Then Exit Sub
With ThisWorkbook.Worksheets(1)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
If n < 10 Then n = 10
Set lig250 = Workbooks(frec).Worksheets(1).Rows(250)
For i = 11 To n
If .Cells(i, 1).Value = lig250.Cells(1, 1).Value Then
.Rows(i).Value = lig250.Value
Workbooks(frec).Close False
Exit Sub
End If
Next i
.Rows(n + 1).Value = lig250.Value
End With
Workbooks(frec).Close False
End Sub

en rouge les changements.

Ne pas omettre l'option en tête de module pour que "Form" et "form" soit assimilés comme étant pareils.

Les deux lignes contenant "Close", qui ferment le classeur formulaire après usage sont optionnelles : s'il y a plusieurs classeurs à traiter ouverts en même temps, la macro n'en traitera qu'un, si elle le ferme, il suffira de la relancer pour qu'elle traite le suivant, et ainsi de suite.

On pourrait faire traiter plusieurs classeurs en ne lançant qu'une fois la macro mais il faut alors réorganiser les boucles et faire une petite adaptation...

TheCrow
 Posté le 06/05/2014 à 16:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ca fonctionne a merveilles!!!! Merci beaucoup

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
SSD Interne M.2 NVMe PCIe 4.0 Samsung 980 PRO 2 To à 114,99 €
114,99 € 140 € -18% @Amazon

Amazon fait une promotion sur le SSD Interne M.2 NVMe PCIe 4.0 Samsung 980 PRO 2 To qui passe à 114,99 €. On le trouve ailleurs à partir de 140 €. Ce SSD offre des taux de transfert de 7000 Mo /s en lecture et 5100 Mo/s en écriture. Une bonne affaire.


Voir le bon plan
Boitier PC Fractal Design North Charcoal White (moyen tour, ATX, panneau mesh, façade chêne) à 124,29 € livré
124,29 € 160 € -22% @Amazon Allemagne

Amazon Allemagne fait une promotion sur le beau boitier PC Fractal Design North Charcoal White qui passe à 108,80 € (avec la TVA ajustée). Comptez 15,49 € pour la livraison en France soit un total de 124,29 € livré au lieu de 160 €. Le boitier Fractal Design North doit son originalité, à l'introduction de matériaux naturels comme le chêne et des détails sur mesure pour intégrer élégamment ce boitier à votre espace de vie. Alliant design épuré et ingénierie avancée du flux d'air, le boîtier est doté d'un panneau latéral et d'un dessus en mesh mais aussi d'une façade ouverte avec de véritables panneaux en chêne. Le design est complété par des détails élégants et une languette intégrée pour un accès facile au-dessus du boîtier. À l'intérieur, le boitier North de Fractal Design offre un aménagement intérieur intuitif et une compatibilité généreuse.


Voir le bon plan
PC Portable 16 pouces HP Victus (FHD 144 Hz, Ryzen 7 7840HS, 16Go/512Go, RTX 4070 8 Go) à 1249,99 €
1249,99 € 1599 € -22% @RueDuCommerce

RueDuCommerce fait une promotion sur le PC Portable 16 pouces HP Victus 16-s0010nf qui passe à 1249,99 € avec le code RDC50. On le trouve habituellement à 1599 €.

Il comporte un écran IPS Full HD de 16.1 pouces IPS, un processeur AMD Ryzen 7 7840HS (8 coeurs), 16 Go de RAM DDR5, un SSD de 512 Go, une carte graphique dédiée GeForce RTX 4070 8 Go, un clavier rétro éclairé,. Il possède aussi le WiFi 6, le bluetooth 5.2, 2 ports USB 3.1 type C, un port USB 3.2 Gen 2, un port HDMI 2.1 et un port Ethernet.

L'ordinateur est livré sans OS mais vous pouvez facilement installer Windows 10/11 pour quelques euros.

Une bonne affaire pour un portable performant dernière génération : bureautique, Internet, multimédia et gros jeux.


Voir le bon plan
Lot de 2 prises connectées Wi-Fi TP-Link Tapo P110 avec suivi de la consommation à 19,90 €
19,90 € 28 € -29% @Amazon

Amazon fait une promotion sur le lot de 2 prises connectées Wi-Fi TP-Link Tapo P110 qui passe à 19,90 € alors qu'on la trouve habituellement à 28 €.

Ces prises peuvent être contrôlée à distance en utilisant l'app gratuite Tapo sur votre smartphone (iOS ou Android). Vous pouvez créer des planifications horaires pour allumer ou éteindre automatiquement et quand vous le souhaitez, les appareils qui y sont branchés.

Vous pourrez même contrôler les prises via des commandes vocales avec Alexa ou Google Assistant. Cette version offre le suivi de la consommation. Pratique pour trouver les appareils énergivores.


Voir le bon plan
Carte graphique Sapphire Radeon RX 7700 XT Pulse 12 Go à 454 €
454 € 500 € -9% @Materiel.net

Cdiscount fait une promotion sur la carte graphique Sapphire Radeon RX 7700 XT Pulse 12 Go qui passe à 454 € avec le code 50DES499 au lieu de 500 €. 

Avec le jeu en 1440p en ligne de mire, la carte graphique Sapphire Radeon RX 7700 XT Pulse apporte performances, fluidité et précision. Grâce à l'architecture AMD RDNA 3, le saut générationnel par rapport à la génération précédente, 12 Go de mémoire GDDR6 et l'Infinity Cache, vous permettront de créer une configuration PC gaming performante.


Voir le bon plan
Lego Technic 42123 McLaren Senna GTR à 34,39 €
34,39 € 49,99 € -31% @Amazon

Amazon fait une promotion sur le Lego Technic 42123 McLaren Senna GTR qui passe à 34,39 € grâce à un coupon à activer sur la page du produit. On le trouve ailleurs à 49,99 €. 


Voir le bon plan

Sujets relatifs
(Macro) Copier onglet sur autre fichier Excel (2007)
Copier plage de celules vers autre feuille sous condition
Copier tableaux vers autre feuille sous condition
EXCEL RECHERCHEV pour autre fichier. Macro?
copier un dd externe vers un autre dd externe
macro excel copier collage special vers word
Transférer donnée excel vers un autre fichier exce
Copier-Coller Cellule vers fichier Txt
Ouvrir avec macro un fichier dans autre classeur
Lien hypertexte vers autre fichier ppt et retour
Plus de sujets relatifs à Macro Copier ligne vers un autre fichier
 > Tous les forums > Forum Bureautique