Copies de données de plusieurs classeur

Bonsoir,

Je reviens vers vous pour un petit peu d'aide

Le fichier "rechercher" que je réalise servira à une personne qui dois consulter en "temps reels les données des "enregistrements"réaliser sur d'autre poste, j'ai procéde comme suit :

Voilà je copie des données d'un ou plusieurs classeur préalablement sélectionner au démarrage.

Ses classeurs sont normalement déjà ouvert par un autre utilisateur sur un autre poste.....( option que j'ai pas pu tester pas de" réseau " chez moi)

Pour l'instant j'arrive à ouvrir 1 classeur et à enregistrer, en cellules A1, son adresse pour mes mises à jours ultérieures

Théoriquement je dois pouvoir déjà en ouvrir plusieurs (pas encore tester non plus)

Pour tous les classeurs sélectionner il faudrait pouvoir copier les adresses pour mes mises à jours

Et Copier depuis la cellule "A5" jusqu'à la cellules "B" dernière ligne, Puis coller les donnnées dans "rechercher",en dessous des adresses precedement recuperer.

là macro s’arrête sans rien me demander deplus. Snif peut etres est ce due au verouillage du classeur enregistrement

Ci joint mes deux fichiers

Nb : Le fichier enregistrement "se verrouille" au fur et mesure qu'il s’incrémente et devrai par la suite se sauvegarder également, au fur et çà mesure et tous les fichiers enregistrement utilisés auront la meme structure que l'exemple fourni.

Si vous avez des idées pour résoudre ces quelques problemes

Merci

11enregistrement.xlsm (18.50 Ko)
11rechercher.xlsm (24.17 Ko)

hello,

Déjà pour ce qui est du fichier "enregistrement" il faut le mettre en "partagé" ça me semble une bonne idée, surtout que si tu as un fichier rechercher, je suppose que tous les utilisateurs sont reliés entre eux sur le même réseau.

capture 1

Il y'a des options aussi au niveau des propriétés fichier.

capture 2

Pour le reste j'essaye de regarder.

+

Ok merci il va falloir que je vois avec les systèmes d'informations pour ça mais effectivement. Les fichiers seront dans un répertoire commun.

Si tu as des questions sur le fonctionnement n'hésite pas.

Je reste à ta disposition.

En partageant le fichier enregistrement, il ne doit pas y avoir besoin de plusieurs version du fichier.

ci-joint fichier "rechercher" modifié:

> Au cas où, j'ai prévu pour l'importation des données qu'il puisse le faire sur plusieurs fichiers, le code lit dans la colonne de la cellule chemin, pour boucler l'import autant de fois que nécessaire (ce qui suppose de prévoir alors de créer une procédure d'import de chemin fichier 'enregistrement' différente).

> j'ai changé lors de la recherche de n° dossier, la valeur de scrolling par défaut qui centre l'écran 4 lignes au-dessus, ça me semblait plus lisible.

> j'ai choisi l'option d'enlever la visibilité de l'appli pendant l'import, en cas de boucle trop longue ça peut être pas mal d'empêcher l'utilisateur de toucher les fenêtres d'excel et de créer un bug.

> j'ai aussi enlever l'option modal de l'userform, histoire que l'utilisateur puisse afficher la fenêtre et aller dans le tableur.

+

11enregistrement.xlsm (21.28 Ko)
11rechercher.xlsm (34.66 Ko)

Bonsoir Waard,

Franchement bien ton module, par contre il y a quelques petites subtilités je n'ai pas perçue concernant l'importation des fichiers. manifestement on peut en sélectionner qu'un mais dans ton code tu expliques que tout les chemins saisies sont lu. Ai je bien compris et si oui comment incrémenter le nombre de chemin que la macro va suivre?

De plus de quelle application tu parles

j'ai choisi l'option d'enlever la visibilité de l'appli pendant l'import,

et ce dernier point me semble également obscure

j'ai aussi enlever l'option modal de l'userform

En partageant le fichier enregistrement, il ne doit pas y avoir besoin de plusieurs version du fichier.

le problème est que je vais devoir dédier un fichier par matériel ( centrifugeuse . histoire de savoir sur quelle centrifugeuse est passer le tube. A vu de nez je risque d'avoir 4 voir 5 fichiers Enregistrements dans le même répertoire.

Question con : Ne serais-ce pas plus simple pour l'import de rechercher que les fichier "commençant" par "Enregistrement"? car j'aimerai que les utilisateurs est le moins de marge de' manœuvre possible.

Ou sinon je fais un fichier Enregistrement avec un onglet par matériel.( mais il me semble que ce serai une source d'erreur de saisie plus grande)

Pour toi quel cas de figure te semble le plus gérable?

[Edit] : Petit détail qui a son importance et que je n'avais pas mentionné jusqu'ici...Certains tubes sont centrifugés deux fois et sur la même centrifugeuse.

Du coup je me demandais si le surlignage était pertinent pour ce cas.

A la base je voulais arriver à un résultat proche de ça :

Avec une textebox qui affiche les données. (mais j'avais déjà repiqué le surlignage ^^)

hello,

edlede a écrit :

concernant l'importation des fichiers. manifestement on peut en sélectionner qu'un mais dans ton code tu expliques que tout les chemins saisies sont lu. Ai je bien compris et si oui comment incrémenter le nombre de chemin que la macro va suivre?

Comme je ne savais pas si tu allais faire ou non, n'y comment et où, une sélection multiple de fichiers, j'avais choisi de faire un codage intermédiaire (car c'est plus long de coder une boucle), au début de l'ancien code tu ne peux que choisir un fichier, mais la boucle qui importe les données était prévue pour traiter tous les chemins de la colonne de la cellule "chemin", ce qui m'évitais d'avoir à coder une boucle si tu décidais le choix de choisir plusieurs fichiers.

edlede a écrit :

De plus de quelle application tu parles

Je parle de la visibilité de l'appli. excel qui se désaffiche et se réaffiche à la fin du traitement, mais avec le recul, désafficher le rafraichissement de la fenêtre est mieux.

edlede a écrit :

et ce dernier point me semble également obscure

j'ai aussi enlever l'option modal de l'userform

L'option modal, définit si l'utilisateur une fois l'userform affiché, peut aller ou non dans le tableur excel, je l'ai rétabli.

En plus, tout autre, dans la macro datasel, j'ai corrigé une erreur d'écriture TextBox1 > TextBox1.Value

edlede a écrit :

Enregistrements dans le même répertoire

Ok si c'est tout dans le même répertoire, il y'a 2 solutions:

1/ Choisir soit en dur, soit par fenêtre de dialogue par l'utilisateur le chemin du répertoire.

2/ Choisir le(s) fichier(s) par fenêtre de dialogue par l'utilisateur, par sélection multiple (que j'ai codé)

edlede a écrit :

Ne serais-ce pas plus simple pour l'import de rechercher que les fichier "commençant" par "Enregistrement

Suivant le point du dessus, ça peut aussi se coder, dans la méthode choix répertoire c'est nécessaire, dans la méthode choix fichier ça vérifie et n'importe que les chemin des fichier comportant le nom "nregistrement" sans le "e" au cas où le caractère serait en minuscule ou majuscule, car la différence est prise en compte dans le contrôle IF.

edlede a écrit :

sinon je fais un fichier Enregistrement avec un onglet par matériel

ça m'obligerai à recoder, j'aimerai éviter de tout reprendre depuis le début.

edlede a écrit :

Pour toi quel cas de figure te semble le plus gérable?

A un moment, suivant comment et quand sont remplis les fichiers "enregistrement", il faudrait peut être prévoir une méthode de mise à jour des données du fichier "rechercher" (qui dépendra aussi comment sera utiliser le fichier "rechercher")

edlede a écrit :

Petit détail qui a son importance et que je n'avais pas mentionné jusqu'ici...Certains tubes sont centrifugés deux fois et sur la même centrifugeuse.

Du coup je me demandais si le surlignage était pertinent pour ce cas.

J'ai eu un pb similaire. Il faut créer un colonne créer un identifiant gérant les cas unique, ainsi si quelque chose concerne 1 ou plusieurs lignes, l'identifiant est identique (ce qui implique que dans le code datasel, qu'il faut trier base et rechercher aussi dans cette colonne pour sélectionner les lignes)

capture 1
18rechercher.xlsm (36.30 Ko)

franchement bravo,

ça fait 50 minutes que je suis sur ton code, heureusement que tu as super bien détaillé les commentaires.

Je valide le fait que nous partons sur une base de 4 fichiers enregistrements pour l'instant, et ils seront dans le même répertoire que le fichier rechercher ( qui va peut finir par changer de nom). Les fichiers seront tous dénommé sur le même format "Enregistrement des tubes : Centrifugeuse XXXXX). ( on as pas réussi à faire plus long....)

2/ Choisir le(s) fichier(s) par fenêtre de dialogue par l'utilisateur, par sélection multiple (que j'ai codé)

et ça marche du tonner on garde

ça peut aussi se coder,..., dans la méthode choix fichier ça vérifie

Et bien la vérification me semble être une bonne idée, du coup.

A un moment, suivant comment et quand sont remplis les fichiers "enregistrement", il faudrait peut être prévoir une méthode de mise à jour des données du fichier "rechercher" (qui dépendra aussi comment sera utiliser le fichier "rechercher")

L'idée c'est que le boulet, qui est bac +7 au bas mot, est le moins de marge de manœuvre. J'ai presque envie de supprimer le choix des fichiers de peur qu'il fasse une connerie.... c'est qu'il puisse juste saisir sont numéro de dossier et voir l'heure de passage quand il en besoin

Concernant le la mise à jour des données j'y avais pensée.

Au début je pensais la faire à chaque saisie mais je penses que les données seront vite un peu lourde, du coup le plus sage me semble t-il serait de faire cela par rapport à une durée de temps écoulé, mais je ne sais même pas si c'est possible

Il faut créer un colonne créer un identifiant gérant les cas unique, ainsi si quelque chose concerne 1 ou plusieurs lignes, l'identifiant est identique (ce qui implique que dans le code datasel, qu'il faut trier base et rechercher aussi dans cette colonne pour sélectionner les lignes

j'avais effectivement pensé que le plus simple serai de faire un tri par numéros de dossier. [ du coup pas besoin de faire une colonne en plus?, les deux numeros seront surligner l'un en dessous de l'autre]

Je vais essaye de le tester dans des conditions réel d'utilisation en début de semaine prochaine. ( je suis en déplacement ou en formation cette semaine.)

Encore bravo, et un super MERCI

hello,

edlede a écrit :

J'ai presque envie de supprimer le choix des fichiers

Pour info, au cas où tu change d'avis la méthode par dossier est abordée en détails ici : http://www.info-3000.com/vbvba/fichiers/#BoiteDialogueIntegree Sachant que si modification à faire, pour un choix dossier, il y'a 2 solutions, soit l'utilisateur récupère par le biais d'une boite de dialogue le dossier et ses fichiers enregistrement, soit le chemin est inscrit en dur dans le code.

edlede a écrit :

Au début je pensais la faire à chaque saisie mais je penses que les données seront vite un peu lourde, du coup le plus sage me semble t-il serait de faire cela par rapport à une durée de temps écoulé, mais je ne sais même pas si c'est possible

Comme toujours il y'a des choix à faire, est-ce que les fichiers vont être extrêmement volumineux (ça risque d'allonger les temps de traitements, qui fluctue aussi suivant les ordis), est-ce que l'ordinateur de l'utilisateur qui utilise le fichier rechercher est faible (ça va entrainer des impératifs), combien de fois par jour y'a t'il d'enregistrements (quel va être le degré d'impératif de mise à jour), est-ce que le fichier "rechercher" va être ouvert en permanence dès arrivée le matin...

> Après on peux utiliser la méthode simple par la création d'un bouton qui relance la macro d'import.

> On peut aussi utiliser un timer qui relance périodiquement la mise à jour, toute les x temps (exemples d'impératifs du dessus à résoudre avant, sinon risque d'agacer l’utilisateur, si celui-ci par exemple doit attendre 20s toutes les 2 minutes que le fichier se remette à jour).

> On peut faire les 2 aussi.

J'ai mis un exemple de timer en pj, si tu n'arrive pas à l'adapter indique-le et on regardera.

Ok merci je regarde ça et je reviens vers toi j'ai des problèmes.

Yes un grand merci ça marche du feu de dieu,

[Edit ]

Il me reste 1 petit problème,

Lors de l'import je voudrais qu'il copie les données à partir de la ligne 6 ( je trouve pas où modifier) histoire de pas écraser les titres et avoir une certaine cohérence avec l'autre fichier.

j'ai modifier ceci mais la copie se fait toujours en A5

 ' Copie des valeurs entre les classeurs
       WsCent.Range("A5", "B" & Derlig) = Wb.WsVisual.Range("A6").Value

Et pour la mise à jour des données un timer à 20 minutes serait parfait

13rechercher.xlsm (40.31 Ko)

hello,

j'ai fais des modifications.

edlede a écrit :

Lors de l'import je voudrais qu'il copie les données à partir de la ligne 6 ( je trouve pas où modifier) histoire de pas écraser les titres et avoir une certaine cohérence avec l'autre fichier.

Le code d'import va chercher une cellule qui se nomme "debut_liste" dans le tableur, cette cellule sert à indiquer dynamiquement sans à avoir à modifier dans vba, où se trouve la liste, j'ai déplacé cette cellule en A6 pour que l'adresse soit à nouveau bonne.

capture 1
  • Pour info, le code d'import de données est import_data() du module userform (car j'ai vu qu'il y'avait une autre macro import_data() dans le module module.)
  • Le code que tu indique est une ligne de code dans l'ancienne macro DataCopy qu'il faudra penser à supprimer, qui n'est plus reprise en théorie, mes modifications ont été faites sur import_data()

J'ai modifié la macro import_data() :

- Ajout d'une ligne de code pour enlever la selection de plage après le tri, après ma ligne la cellule sélectionnée est A1

ActiveSheet.Range("A1").Select 'reselection cellule pour ne pas rester sur selection plage colonne A/B

- J'ai corrigé ta correction de la ligne : Workbooks(wb_recherche).Worksheets(1).Range("A" & debligne_fich_recherch, "B" & derligne_fich_enregist).Value si on laisse en dur A6, le problème est que s'il y'a plusieurs fichiers, au fichier suivant la liste sera collé de nouveau à partir de A6

edlede a écrit :

pour la mise à jour des données un timer à 20 minutes serait parfait

J'ai codé les timers alors pour:

1. Le timer de fermeture

  • J'ai ajouté quand fermeture du classeur un code pour désactiver le timer
  • Dans la macro ferme, j'ai ajouté une ligne de code pour fermer l'userform (histoire de parer un éventuel bug)
2. Le timer de maj data
  • Je l'ai codé pour faire des maj de 21 min, histoire qu'il ne chevauche pas le 1er timer histoire d'éviter un éventuel bug
  • ça lance la macro MAJ_DATA toutes les 21 mins, c'est la même macro, il n'y a que le point 1 qui est modifié, toutes les 21mins si un chemin est bien indexé dans le tableur, le tableur se met à jour.
J'ai enlevé la msgbox, ça ne me semble pas utile.

Enfin une fois mis à jour, à partir de cette macro et relancé un timer de 21min.

Beau programme que voilà,

Je test ça mais ça m'a l'air d’être bouclé.

Du coup, je test demain sur le réseau.

Un grand merci pour toutes les explications et le code qui va avec.

A bientôt,


Oup's petit problème on a perdu l'import de plusieurs fichier il ne rapatrie plus qu'un seul fichier, [edit] c'est bizzard j'ai l'impression qui fusionne les deux fichiers en écrasant les lignes du premier fichier sans les mettres à la suite.

Ci joint mes exemples fichier"enregistrementtest" date qui s'incremente de +1 an jusquà la ligne 77 et "enregistrementtes2" qui à 197 ligne mais des dates presque toujours identique.

Merci Waard,

Impeccable je valide,

Bonjour,

Vu que mon sujet est un peu similaire, je viens vers vous pour avoir de l'aide j'ai plusieurs classeurs (4 en tout) nommé Base*.xlsm

J'aimerais récupérer toutes les infos de ces classeurs dans la feuille BASE à partir de la ligne A2 vers un autre classeur avec un copie dans la feuille recap en ligne A2.

Tous ces classeurs ont la même structure.

Merci beaucoup pour votre aide, (je galère un peu sur mon code).

si tu mettre un exemple et ton code ca devrait aider.

Bonjour,

Voici un code que j'avais pour récupérer les infos d'un fichier.

Sub Compilation()
Dim Temp As String
Dim Ligne As Long
Temp = Dir(ActiveWorkbook.Path & "\*.xls")
Application.DisplayAlerts = False
Do While Temp <> ""
If Temp <> "Recap.xls" Then
Workbooks.Open ActiveWorkbook.Path & "\" & Temp
Workbooks(Temp).Sheets(1).Range("A1").CurrentRegion.Copy
Workbooks("Recap.xls").Sheets(1).Activate
Ligne = Sheets(1).Range("A65536").End(xlUp).Row + 1
Range("A" & CStr(Ligne)).Select
ActiveSheet.Paste
Workbooks(Temp).Close
End If
Temp = Dir
Loop
Range("A1").Select
Application.DisplayAlerts = True
End Sub

J'aimerais que celui-ci récupère les informations des fichiers Base_Eco.... dans l'onglet Base à partir de la A2.

Merci.

Rechercher des sujets similaires à "copies donnees classeur"