Autres Trouver et copier les cellules d'autres classeurs

sg394

XLDnaute Nouveau
Bonjour,

Je connais encore peu Excel et j'ai besoin de créer quelques fonctions trop complexes pour mes connaissances. Donc j'aimerais bien un petit coup de main. Je comprend bien le principe des macros et je crois bien comprendre ce qu'il est possible de faire avec celles-ci, mais créer une macro complexe est encore hors de ma portée.

Le projet est la préparation d'un horaire de diffusion quotidien. Mon but est de pouvoir remplir une seule cellule d'une ligne et que le reste de cette ligne soit automatiquement rempli en trouvant l'information correspondante à l'intérieur d'autres fichiers excels qui se trouvent dans un autre dossier.

Je vais essayer de détailler un peu mieux...

Fichier devant posséder la macro:
horaire.xlsm
noms des colonnes:
Heure ; Durée ; No Production ; Titre

Je voudrais que pour chaque ligne du fichier horaire, en remplissant la cellule "No Production", les cellules "Durée" et "Titre" soient remplies automatiquement. L'information se trouve dans un des nombreux fichiers de registre.

Fichiers où se trouve l'information:
(Dossier Registre)
T.xlsm, PLAY.xlsm, ID.xlsm, X.xlsm, etc...

La structure des fichiers registres est semblable à celle des fichiers horaires. On y retrouve les mêmes colonnes Durée, No Production et Titre. Avec le temps, de nouveaux fichiers de registre seront ajoutés. Il n'est donc pas possible de faire une liste exhaustive de ces fichiers.

Tous les ordinateurs concernés ont la version 2007 de Excel.

Évidemment, j'ai cherché longtemps la solution avant de demander de l'aide. J'ai testé plusieurs macros et aucune ne fonctionne ou n'est adaptable à mes besoins. Quant à écrire moi-même une macro, c'est encore hors de ma portée. Alors y aurait-il ici quelques experts à la hauteur de cette tâche?

Merci!
 
Solution
Comme il y a de nombreux fichiers de registre il n'est pas question de les ouvrir un par un.

On les laissera donc fermés, voyez les fichiers zippés joints et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
Dim chemin$, fichier$, feuille$, adr$, fich$, form$, i As Variant
chemin = ThisWorkbook.Path & "\Registre\" 'à adapter
fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
feuille = "Feuil1" 'nom des feuilles sources, à adapter
If fichier = "" Then MsgBox "Aucun fichier .xlsm trouvé...": Exit Sub
adr = Target.Address(, , xlR1C1, True)
Do While fichier <> ""
    fich = Replace(fichier, "'", "''") 's'il y a une apostrophe dans le nom
    form = "'" &...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour sg394, le forum

Bienvenue sur XLD
Pour ton information, si tu veux augmenter tes chances d'avoir une réponse, je te conseille de préparer et poster des fichiers de test. Pour ma part, j'aime bien coder mais absolument pas monter des tableaux de données pour les autres. De plus, les codes montés sans fichier support du demandeur ont de fortes chances de ne pas correspondre à la demande et, même si j'aime le bénévolat, je n'aime pas perdre mon temps.

Bien Cordialement.
 

job75

XLDnaute Barbatruc
Bonjour sg394, Yeahou,

La structure des fichiers étant très simple on peut s'en passer.

Mais il faudrait une précision.

Un N° Production déterminé se retrouve-t-il dans un ou plusieurs fichiers de registre ?

Si plusieurs lequel retient-on ?

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Comme il y a de nombreux fichiers de registre il n'est pas question de les ouvrir un par un.

On les laissera donc fermés, voyez les fichiers zippés joints et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
Dim chemin$, fichier$, feuille$, adr$, fich$, form$, i As Variant
chemin = ThisWorkbook.Path & "\Registre\" 'à adapter
fichier = Dir(chemin & "*.xlsm") '1er fichier du dossier
feuille = "Feuil1" 'nom des feuilles sources, à adapter
If fichier = "" Then MsgBox "Aucun fichier .xlsm trouvé...": Exit Sub
adr = Target.Address(, , xlR1C1, True)
Do While fichier <> ""
    fich = Replace(fichier, "'", "''") 's'il y a une apostrophe dans le nom
    form = "'" & chemin & "[" & fich & "]" & feuille & "'!"
    i = ExecuteExcel4Macro("MATCH(" & adr & "," & form & "C2,0)") 'formule de liaison
    If IsNumeric(i) Then
        Target(1, 0) = ExecuteExcel4Macro("INDEX(" & form & "C1," & i & ")")
        Target(1, 2) = ExecuteExcel4Macro("INDEX(" & form & "C3," & i & ")")
        Exit Do 'on sort à la 1ère occurrence
    End If
    fichier = Dir 'fichier suivant
Loop
If IsError(i) Then Union(Target(1, 0), Target(1, 2)) = "" 'RAZ
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    29.5 KB · Affichages: 16

sg394

XLDnaute Nouveau
Merci pour l'accueil Yeahou!

Toutes mes excuses pour ma réponse tardive job75. Merci beaucoup pour ton aide. Je vais répondre même si je n'ai pas encore testé ta macro, ce que je vais faire d'ici une heure.

Je joins une copie de mes fichiers, épurés au maximum. En effet, la structure des fichiers est très simple. Le numéro de production recherché se trouve dans l'un des nombreux fichiers excel qui se trouvent dans un dossier précis mais impossible de savoir à l'avance quel fichier contient le numéro de production recherché. Ce sont des numéros parfaitement uniques, constitués en général d'une suite de caractères dont voici quelques exemples:
FAUX001, FAUX001B, T023C-1_2, DIRECT

Le numéro recherché ne se trouve qu'à un seul endroit. Mais la correspondance doit être exacte car comme vous pouvez le voir ci-haut, des numéros de production semblables peuvent exister lorsqu'un fichier existe en plusieurs versions ou s'il y a eu découpage du fichier (FAUX001, FAUX001B, FAUX001B-1_2).
 

Pièces jointes

  • FAUX.xlsm
    9.7 KB · Affichages: 4
  • horaire quotidien.xlsm
    14.8 KB · Affichages: 5

job75

XLDnaute Barbatruc
Les colonnes dans vos fichiers ne sont pas disposées comme indiqué au post #1.

Mais il est facile d'adapter la macro, ce sera un bon exercice pour vérifier que vous avez compris :)

N'hésitez pas à revenir si vous n'y arrivez pas.
 

sg394

XLDnaute Nouveau
Je commençais à avoir confiance en moi après avoir fait une première macro il y a deux semaines, mais cette fois je n'y arrive pas malgré votre aide. Il y a surement quelque chose que je ne comprend pas. J'ai appris à programmer en batch et j'ai codé 400 lignes en deux semaines et j'arrive même pas à utiliser une macro qu'on me livre déjà faite!

J'ai ajouté la macro au fichier, adapté le chemin d'accès sans oublier le \ à la fin, mais la macro n'apparaît même pas dans la liste des macros. Qu'est-ce que je n'ai pas compris?
 

job75

XLDnaute Barbatruc
Il s'agit d'une macro évènementielle.

Elle se déclenche automatiquement quand on valide ou modifie un N° Production.

Avant de modifier quoi que ce soit testez les fichiers que j'ai joints.

Et ne modifiez qu'après avoir compris ce qui se passe.
 

sg394

XLDnaute Nouveau
Tu m'as beaucoup aidé! J'ai réussi à comprendre comment fonctionne une macro événementielle. En fait, je croyais que tu m'avais créé une macro qu'il fallait activer manuellement.

Je suis en train d'étudier ton code. Je crois que je pourrais l'adapter à la structure de mes tableaux. C'est vraiment parfait! Merci!
 

Discussions similaires

Statistiques des forums

Discussions
312 213
Messages
2 086 307
Membres
103 174
dernier inscrit
OBUTT