Création macro Copiage/Collage Cellules

Fermé
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014 - 26 nov. 2014 à 15:59
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014 - 27 nov. 2014 à 08:51
Bonjour à tous,

N'étant pas un expert dans le codage VBA, je vous demande votre aide pour un sujet.

Dans le cadre de mon travail, je souhaiterais créer une macro bien spécifique permettant :
-> D'aller dans plusieurs fichiers .xls prédéfinis
-> De sélectionner des lignes spécifiques dans chaque fichier (correspondant à des demandes)
-> De copier ces lignes
-> D'aller dans un fichier .xls global vierge
-> De coller ces lignes de chaque fichier à la suite sans "se marcher dessus" (pour avoir toutes les demandes des différents services dans un même fichier

La principale contrainte est :
-> l'ajout possible par d'autres utilisateurs de lignes (=demandes) dans les fichiers sources donc prendre en compte des éventuels rajouts de lignes.


En vous remerciant pour vos futures réponses,


Cordialement,
A voir également:

10 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
26 nov. 2014 à 17:24
Bonjour Antonin, bonjour le forum,

Tes explications sont très claire mais une macro demande de la précision. Tout reste à définir chez toi. Je ne me risquerai pas à te proposer une macro qu'il faudra adapter mille fois par la suite.

manquent :
* le dossier (avec le chemin complet) où se trouvent les fichiers "source"
* faut-il rechercher dans tous les onglets de ce fichier ?
* sinon, le nom ou la position de l'onglet dans le fichier source
* la requête qui permet de filtrer les lignes
* le nom du fichier destination
* le nom de l'onglet destination du fichier destiation
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
Modifié par AntoninRav le 26/11/2014 à 18:59
Bonjour ThauTheme,

Merci pour ta réponse !
Je vais essayer d'être clair dans ma réponse :)

- dossier où se trouve les fichiers : Ils se trouvent dans des dossiers différents. On va admettre dossier1, dossier2, ..., dossier8.
- recherche uniquement dans le 2ème onglet de chaque fichier
- nom et position de l'onglet dans le fichier source : onglet2
- ?
- nom du fichier de destination : FichierFinal
- nom de l'onglet de destination : Onglet1


Qu'entends-tu par "requête qui permet de filtrer les lignes ?"
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
26 nov. 2014 à 19:05
Bonsoir Antonin, bonsoir le forum,

voilà ce que j'entends :
-> De sélectionner des lignes spécifiques dans chaque fichier (correspondant à des demandes)

Sinon, impossible de dire à une macro d'ouvrir un fichier sans lui préciser son chemin complet. Donc il faut impérativement les chemins de tous les dossiers des fichier source...
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
26 nov. 2014 à 19:15
D'accord, on va dire que ces dossiers sont tous sur le bureau.

Les lignes vont tout le temps de la ligne 6 jusqu'à une ligne X qui dépendra de chaque fichier. Pour savoir quand s'arrêter, il faut s'arrêter dès que la cellule de la colonne B est rempli par "fin des demandes" (donc sans compter cette dernière).
Donc tant que la ligne n'a pas "fin des demandes" en sa 2nde colonne, on continue.

Je ne sais pas si je suis clair dans mon explication :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/11/2014 à 19:39
Si tu as un réseau avec plusieurs utilisateurs et que tout les fichiers de demande sont dans une locations définie du style

z:\Marc\requetes\demande.xlsx
z:\Roger\requetes\demande.xlsx
z:\Robert\requetes\demande.xlsx
z:\Annie\requetes\demande.xlsx
z:\Roberta\requetes\demande.xlsx

On va pouvoir boucler et trouver les fichiers.

Sinon chaque fichier est dans un endroit perdu et sans logique spécifique.
Il faudrait entrer dans le code VBA l'adresse du fichier, ou mieux, l'entrer dans un onglet sur la feuille qui regroupe les demande
Exemple, un onglet utilisateurs et tu commence à partir de A1
z:\Marc\blabla
Roger
Robert
Annie
Mais on ignore tout pour l'instant. Je suppose et je fabule :)

Après, on boucle sur chaque ligne des fichiers

On trouve la dernière ligne dans ton fichier qui regroupe les demandes et on colle la ligne à la fin et soit on supprime la ligne, ou on inscrit une note dans la ligne pour ne pas la copier deux fois.

On passe au fichier suivant.

Ouvrir un fichier c'est possible,
boucler sur les lignes et copier selon un critère c'est possible
Trouver ou on est rendu dans un autre fichier et copie c'est possible.

Mais on ignore le nom des onglets, des fichiers, du chemin ou trouver les fichiers, la structure des lignes à copier...
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
26 nov. 2014 à 19:49
Merci pour ta réponse PlacageGranby,

C'est plutôt le premier principe, il y a un minimum de logique quand même ;)

J'ai marqué ces informations dans une de mes réponses, en ce qui concerne la structure des lignes, c'est uniquement du texte sur une vingtaine de colonnes.
Pas forcément besoin de garder le format de chaque fichier.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/11/2014 à 20:52
Tiens, je me lance.

Un exemple de code, il n'est pas testé, donc j'ai peut-être des erreurs.
Il y a des choses à adapter, mais au moins ca te donner un exemple pour que tu monte un fichier.
Ensuite, si tu galère sur un bout de code, fourni nous les fichiers pour que l'on puisse mieux s'y retrouver.
Tu peux faire un zip avec les demandes et le fichierfinal et le mettre sur www.cjoint.fr et ensuite nous donner le liens pour y accéder. (enleve toute données confidentielle avant)

Bon, le code maintenant : Les super power user excel vont probablement me corriger au besoin :)
Sub Copier_demande()

Dim wb As Workbook
Dim i, Derligne_Ori, Derligne_Dest, Derligne_User As Integer
Dim Fichier, Utilisateur As String

'Trouve le nombre de ligne donc le nombre d'utilisateurs
Derligne_User = Sheets("utilisateurs").Range("A1").End(xlDown).Row
'Trouve à quel ligne nous sommes rendu dans le fichier de destination FICHIERFINAL dans ONGLET1
Derligne_Dest = Workbook("FichierFinal").Worksheet("Onglet1").Range("A1").End(xlDown).Row + 1

' pour chaque utilisateur
For i = 1 To Derligne_User
    ' Ici on ouvre le fichier de demande,
    ' À ADAPTER, ICI JE SUIS DANS LE NÉANT,  j'ignore ta structure, 
    ' Je suppose que dans un onglet utilisateur tu vas mettre les liens à utiliser.
    Utilisateur = Sheets("utilisateurs").Range("A" & i).Value
    Fichier = "Z:\" & Utilisateur & "\Demandes.xlsx"
    wb = Workbooks.Open(Fichier)
    
    
    'On trouve le nombre de ligne dans le fichier de demande
    Derligne_Ori = wb.Sheets("onglet2").Range("A1").End(xlDown).Row
    
    'On boucle sur chaque ligne
    For i = 1 To Derligne_Ori
        ' Ici, on cherche si la ligne doit être copié, disons qu'on utilise la colonne Z pour mettre notre flag
        If wb.Sheets("onglet2").Range("Z" & i).Value <> "X" Then
            'On entre dans la boucle si il n'y a pas de X en Z,  et on en met un maintenant.
            wb.Sheets("onglet2").Range("Z" & i).Value = "X"
            'on copie
            wb.Sheets("onglet2").Rows(i).Copy
            Workbook("FichierFinal").Worksheet("Onglet1").Rows(Derligne_Dest).PasteSpecial
            'on incrémente notre variable car on a copié une ligne
            Derligne_Dest = Derligne_Dest + 1
        End If
    Next 'ligne suivante
    
    'on a fini de copier toute les ligne d'un utilisateur, on ferme et enregistre
    wb.Close SaveChanges:=True

Next 'Utilisateur suivant

End Sub
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
26 nov. 2014 à 20:59
Merci beaucoup pour le temps passé à cette rédaction.

Je vais tester ça si j'ai le temps ce soir.


Juste pour information, c'est impossible pour moi de transmettre les fichiers originaux car confidentiels.
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
26 nov. 2014 à 22:30
J'ai regardé un peu ton programme et je n'arrive pas vraiment à cerner...
As-tu pris en compte les réponses que j'ai apporté à ThauTheme ?


Si d'autres personnes veulent participer, ne pas hésitez !
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/11/2014 à 22:47
Non, en effet j'ai manquer une de tes réponses.

Pour le fichier qui commence à la ligne 6, il faut seulement remplacer For i = 1 to derligne remplace le 1 par 6.

Je comprend que tu as une ligne avec fin des commandes en position X qui designe la fin ?
J'avais utiliser un compteur pour trouver la dernière ligne, donc pas besoin de trouver la mention fin des commandes.

En gros, il y a le code pour ouvrir un fichier.
J'ai pris la liberté d'inclure une feuille fictive Utilisateur ou tu entre une ligne pour chaque fichier a ouvrir.
Tu peux mettre le nom du dossier, ou le nom de l'utilisateur, tu entre ce qu'il faut pour trouver le fichier de demande.
Ensuite, une boucle for qui regarde chaque ligne de la feuille utilisateur et qui ouvre le fichier de demande.

Les Variable Derligne sert a compter. 3x variables
Compter dans la feuille fictive utilisateur pour savoir combien de fichier ouvrir.
compter dans le fichier ouvert combien de ligne il faut copier
compter dans le fichierfinal, a quel ligne on est rendu.

On ouvre, on boucle, et j'ai mis du code pour copier coller les lignes.

Selon moi, il y a tout les éléments que tu veux, il faut seulement que le modifier selon tes besoins.
Il ya tout les morceaux, et il faut l'adapter à tes noms de fichier et onglets.

Nous n'avons pas les fichiers donc on travaille à l'aveugle.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
26 nov. 2014 à 22:53
Bonsoir le fil, bonsoir le forum,

Quand Antonin répond : D'accord, on va dire que ces dossiers sont tous sur le bureau. Alors qu'on lui demande d'être précis, je rigole doucement quand il dit que ton code ne fonctionne pas PlacageGranby...
J'avais dans l'idée de lui proposer une code assez similaire au tien mais j'attendais qu'il daigne nous fournir les réponses qu'on lui demande. Mais cela semble tellement l'ennuyer...
Bon courage !
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
26 nov. 2014 à 22:54
Pour améliorer mon exemple, il manque

Le nom des fichiers des fichier de demande. quoi.xls
L'emplacement des fichiers de demande c:\utilisateur\bureau\etc

Savoir si c'est seulement l'ouverture de fichier qui bug, ou si c'est toute la logique des boucles.

Je pensais que mes commentaires étaient relativement clairs, c'est donc dire que c'est facile de penser qu'on a donner des bonnes explications et qu'il en est rien.

Donc, on a vraiment besoin d'un max d'info, car habituellement on réussi à s'en sortir en travaillant sur les fichiers originaux.
Mais si c'est impossible, il faut vraiment être très précis dans les explications.
0
AntoninRav Messages postés 7 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 27 novembre 2014
27 nov. 2014 à 08:51
Placagegranby, merci pour toutes ces réponses complètes.
Je vais essayer de faire comme tu m'as dis !

ThauTheme, ca ne m'ennuie pas du tout, c'est juste que je ne peux pas donner les emplacements précis ainsi que les fichiers car ce sont des données appartenant à l'entreprise.
C'est pour ça que j'emprunte des raccourcis car je ne peux pas en dire tellement plus...

Mais mon intention n'est pas d'attendre comme ça !
0