Microsoft 365 Report de lignes entières dans un autre fichier en fonction du contenu d'une cellule

ddavid237

XLDnaute Nouveau
Bonjour, Dans le 1er fichier ( arbitres), j'aimerais recopier automatiquement dans d'autres fichiers (soit 13 fichiers, partagés avec les personnes concernées) toutes les lignes d'après la colonne y avec modification automatique.
Dans le deuxième fichier (indexation), j'aimerais que s'incrémentent automatiquement les lignes correspondantes en fonction de la colonne C de la feuille 1 dans les autres feuilles.
Est ce que quelqu'un peut m'aider, cela fait 3 jours que je recherche des solutions mais n'étant pas expert, je patauge un peu.
En vous remerciant d'avance
 

Pièces jointes

  • ARBITRES.xlsm
    12.9 KB · Affichages: 5
  • Indexation des documents.xlsm
    60 KB · Affichages: 2

Robert

XLDnaute Barbatruc
Bonsoir David, bonsoir le forum,

Je te conseille de séparer tes deux problèmes dans deux fils différents puisque visiblement ils n'ont rien à voir l'un avec l'autre...
Pour le premier, ça manque cruellement de précision. Où se trouvent les 13 fichiers (chemin d'accès), quel est leur extension et leur nom (ça j'ai une petite idée...).

Quant au second, ce n'est guère mieux :
1. tous signifie qu'il faut copier la ligne dans tous les onglets ?
2. Pas d'onglet GENERAL ?
3. COMPTE-RENDUS
dans la liste colonne Dossiers et l'onglet se nomme COMPTES-RENDU (sans le S final)
4. Idem avec DOCUMENTS ET FORMULAIRES dans la liste et l'onglet qui se nomme DOCUMENT ET FORMULAIRE
Les lignes dispatchées sont-elles supprimées de l'onglet Index ? Si non dans ce cas il faudra un marqueur pour éviter qu'elle de soient copiées chaque fois que tu lancera la macro. Si la colonne H, Supprimé ne sert à rien on pourrait l'utiliser pour y écrire X qand elle est copiée la première fois.
Bref, commence par préparer un fichier cohérent, avec des explications claires, sur lequel on puisse se pencher et te proposer une solution...
 

ddavid237

XLDnaute Nouveau
Bonjour Robert,
N'étant pas expert (je pense que cela se voit) effectivement mes demandent sont floues et je n'ai pas encore le réflexe de regarder si mes éléments sont correctement orthographiés.
Je te remercie déjà pour toutes ces réflexions qui vont me permettre d'être plus exigeant.
Je vais corriger tous ces élément et ferai un deuxième fils de discussion pour le deuxième sujet.
Je remet les éléments ici rapidement pour le 1er sujet.
Merci

Daniel
 

ddavid237

XLDnaute Nouveau
Rebonjour Robert

J'ai renommé le fichier Arbitres en Validations 2022-2023.
J'ai tenu compte vos remarques et vous resoumets mon souci:
Je souhaite que toutes les lignes comprenant le mot "STRASBOURG" à la colonne "Y" se reportent automatiquement dans le fichier nommé STRASBOURG et que toutes les modifications apportées à l'un des deux fichiers (ajout de lignes, suppressions de lignes ou modifications des données dans les lignes) se modifient également dans l'autre fichier.
Je souhaite la même chose pour les autres fichiers nommés selon les bassins de la colonne "Y". J'aurai en tout 20 fichiers de destinations.
J'espère être assez clair dans mes explications et apporter les éléments nécessaires (liens dans le doc)
Merci de votre aide.

Daniel
 

Pièces jointes

  • Validations 2022-2023.xlsm
    15.6 KB · Affichages: 5

Robert

XLDnaute Barbatruc
Bonsoir David, bonsoir le forum,

Tu n'as visiblement pas tenu compte de mes remarques... Tu ne fournis aucune indication concernant le chemin d'accès des fichiers. Il leur faudra une extension .xlsm car ils contiendront des macros...
Une modification automatique d'un fichier (source ou destination) répercutée dans l'autre fichier (destination ou source) serait une vrai usine à gaz. Il faudrait dans ce cas un code ou un numéro unique pour chaque ligne qui permettrait de repérer la ligne modifiée dans l'un des fichiers et reporter cette modif dans l'autre...
Le code, à adapter puisque tu manques de précision, pour copier les lignes dans leur fichier respectif :

VB:
Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim CD As Workbook 'déclare la variable DD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Validations 2022-2023") 'définit l'onglet source OS
CA = CS.Path & "\" 'définit le chemin d'accès CA
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 25)) = "" 'alimente le dictionnaire D avec les données en colonne 25 (=> colonne Y)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublonds (les clés)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les élement du teblaeu temporaire TMP (les villes de la colonne Y)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 25) = TMP(J) Then 'condition : si la donnée ligne I colonne 25 de TV est égale à l'élément J de TMP (la même ville)
            Set CD = Application.Workbooks.Open(CA & TMP(J) & ".xlsm") 'définit le classeur destination (à adapter car tu n'a rien précisé !...)
            Set OD = CD.Worksheets(1) 'définit l'onglet de destination (ici le premier...)
            Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            OS.Rows(I).Copy DEST 'copie la ligne I de l'onglet source et la colle dans DEST de l'onglet destination
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    CD.Close True 'ferme le classeur destination CD en enregistrant les modifications
    Set CD = Nothing 'vide la variable CD
Next J 'prochain élément de la boucle 1
End Sub
Pour répercuter les modifs d'un fichier dans l'autre j'attends que tu fournisses les renseignements demandés et une numérotation (ou code) des lignes...
 

ddavid237

XLDnaute Nouveau
Bonsoir David, bonsoir le forum,

Tu n'as visiblement pas tenu compte de mes remarques... Tu ne fournis aucune indication concernant le chemin d'accès des fichiers. Il leur faudra une extension .xlsm car ils contiendront des macros...
Une modification automatique d'un fichier (source ou destination) répercutée dans l'autre fichier (destination ou source) serait une vrai usine à gaz. Il faudrait dans ce cas un code ou un numéro unique pour chaque ligne qui permettrait de repérer la ligne modifiée dans l'un des fichiers et reporter cette modif dans l'autre...
Le code, à adapter puisque tu manques de précision, pour copier les lignes dans leur fichier respectif :

VB:
Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim CD As Workbook 'déclare la variable DD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set CS = ThisWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Validations 2022-2023") 'définit l'onglet source OS
CA = CS.Path & "\" 'définit le chemin d'accès CA
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 25)) = "" 'alimente le dictionnaire D avec les données en colonne 25 (=> colonne Y)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublonds (les clés)
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les élement du teblaeu temporaire TMP (les villes de la colonne Y)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes éditées I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 25) = TMP(J) Then 'condition : si la donnée ligne I colonne 25 de TV est égale à l'élément J de TMP (la même ville)
            Set CD = Application.Workbooks.Open(CA & TMP(J) & ".xlsm") 'définit le classeur destination (à adapter car tu n'a rien précisé !...)
            Set OD = CD.Worksheets(1) 'définit l'onglet de destination (ici le premier...)
            Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            OS.Rows(I).Copy DEST 'copie la ligne I de l'onglet source et la colle dans DEST de l'onglet destination
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    CD.Close True 'ferme le classeur destination CD en enregistrant les modifications
    Set CD = Nothing 'vide la variable CD
Next J 'prochain élément de la boucle 1
End Sub
Pour répercuter les modifs d'un fichier dans l'autre j'attends que tu fournisses les renseignements demandés et une numérotation (ou code) des lignes...
Bonjour Robert,

En fait j'ai un autre souci dont je n'avais pas conscience, j'utilise Excel office 365 sur mon ordinateur, mais mes fichiers sont enregistrés sur le "cloud" pour le partage et malheureusement le "cloud" utilise Excel web qui n'est pas compatible avec les Macros. Donc en fait je n'ai pas d'autre solution que de faire du copié/collé.
Je suis vraiment désolé de vous avoir fait perdre du temps pour ce problème insoluble et vous remercie sincèrement d'avoir essayé de m'aider.
Cordialement
Daniel
 

Discussions similaires

Statistiques des forums

Discussions
299 847
Messages
1 979 551
Membres
206 771
dernier inscrit
Charles Fabre