[Calc] Empêcher les doublons en fusionnant les données
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
[Calc] Empêcher les doublons en fusionnant les données
Bonjour,
Je poursuis mon projet de gestion d'une petite bédéthèque. Voici le lien vers le sujet précédent consistant à centraliser les données saisies dans des fichiers différents :
viewtopic.php?t=66658
J'essaye maintenant de mettre en place un système qui empêcherait de saisir des doublons (en fonction du numéro ISBN), et permettrait de compléter / modifier une ligne dont l'ISBN existe déjà.
Il faudrait en gros que la macro fusionne les données de deux lignes dont l'ISBN serait identiques dans la plage "A2:E150000" de la feuille "Centralisation".
Je ne sais pas si c'est possible, mais j'espère ^^
Je vous remets en pièce jointe le document "Principal" avec aussi un fichier Secondaire pour qu'au besoin vous ayez un exemple de la structure final du projet.
Je poursuis mon projet de gestion d'une petite bédéthèque. Voici le lien vers le sujet précédent consistant à centraliser les données saisies dans des fichiers différents :
viewtopic.php?t=66658
J'essaye maintenant de mettre en place un système qui empêcherait de saisir des doublons (en fonction du numéro ISBN), et permettrait de compléter / modifier une ligne dont l'ISBN existe déjà.
Il faudrait en gros que la macro fusionne les données de deux lignes dont l'ISBN serait identiques dans la plage "A2:E150000" de la feuille "Centralisation".
Je ne sais pas si c'est possible, mais j'espère ^^
Je vous remets en pièce jointe le document "Principal" avec aussi un fichier Secondaire pour qu'au besoin vous ayez un exemple de la structure final du projet.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10
-
- PassiOOnné
- Messages : 692
- Inscription : 20 déc. 2017 14:45
Re: [Calc] Empêcher les doublons en fusionnant les données
Bonjour,
Pourquoi vouloir faire ça avec un tableur alors qu'empêcher une saisie de doublon se fait sans problème sous Base ?
Pourquoi vouloir faire ça avec un tableur alors qu'empêcher une saisie de doublon se fait sans problème sous Base ?
OpenOffice 4.1.15 - Windows 10
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
Re: [Calc] Empêcher les doublons en fusionnant les données
C'est une contrainte, là où je souhaiterais utiliser ce projet on ne peux utiliser que Calc et pas Base.
En plus, Base est "mono-utilisateur" si on ne fait pas de modifs, et quand bien même il y aurait accès à Base, je n'aurais pas moyen de faire les modifs nécessaires pour le transformer en multi-utilisateurs
En plus, Base est "mono-utilisateur" si on ne fait pas de modifs, et quand bien même il y aurait accès à Base, je n'aurais pas moyen de faire les modifs nécessaires pour le transformer en multi-utilisateurs
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10
-
- Grand Maître de l'OOffice
- Messages : 17084
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: [Calc] Empêcher les doublons en fusionnant les données
Bonjour,
Comme il s'agit de fusionner de données, le fichier Principal ne permet pas de voir ce qui doit être fusionné, peut-être parce que les liens externes sont désactivés.
Je constate qu'un nom d'emprunteur est saisi plusieurs fois. Que faudrait-il alors fusionner ?
Comme il s'agit de fusionner de données, le fichier Principal ne permet pas de voir ce qui doit être fusionné, peut-être parce que les liens externes sont désactivés.
Je constate qu'un nom d'emprunteur est saisi plusieurs fois. Que faudrait-il alors fusionner ?
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
Re: [Calc] Empêcher les doublons en fusionnant les données
Salut Jeanmimi !
Alors effectivement normalement les données sont liées entre les fichiers "Principal" et "Secondaire1" à "Secondaire10".
Les données contenues sur les feuilles "Données" de chaque fichier "Secondaire" (plage de données "A2:E15000") sont rapatriées sur le fichier "Principal" sur la feuille dédiée à chaque fichier "Secondaire". Ensuite, une macro sur le fichier principal récupère les plages "A2:E15000" (via un collage spécial des données sans les formules) de chaque feuille (de "Secondaire1" à "Secondaire10") et regroupe le tout dans la plage "A2:E150000" de la feuille "Centralisation".
Dans l'idéal, ce que je souhaiterais faire, c'est qu'à chaque fois que les feuilles "Secondaire1" à "Secondaire10" (du fichier "Principal") sont alimentées par tous les fichiers secondaires, alors les feuilles "Données" de ces fichiers secondaires soit vidées.
Ensuite, que la macro agisse sur la feuille "Centralisation" du fichier "Principal" pour repérer les doublons éventuels (doublons en fonction du numéro "ISBN"), et fusionner leurs données sur une seule ligne.
Par exemple, si sur un fichier "Secondaire1" quelqu'un rentre les infos suivantes :
ISBN : 1592634871591
Emprunteur : Marc
Date d'emprunt : 15/01/2022
Date de retour :
Synopsis : Blablabla
Et sur un autre fichier "Secondaire2" (par exemple) quelqu'un rentre ces infos là :
ISBN : 1592634871591
Date d'emprunt :
Date de retour : 31/12/2022
Synopsis : Blablabla
Alors sur le fichier "Principal", sur la feuille "Secondaire1" on aura les infos saisies sur le fichier "Secondaire1", et sur la feuille "Secondaire2" les infos saisies sur le fichier "Secondaire2". Alors,ces données sont rapatriées dans la plage "A2:E150000" de la feuille "Centralisation", mais il y a deux lignes avec le même ISBN. il faudrait donc que la macro détecte ces doublons, et fusionne les données de ces lignes ayant le même ISBN éventuellement dans une nouvelle plage de cette feuille) :
ISBN : 1592634871591
Emprunteur : Marc
Date d'emprunt : 15/01/2022
Date de retour : 31/12/2022
Synopsis : Blablabla
Je sais pas si je suis très clair
Alors effectivement normalement les données sont liées entre les fichiers "Principal" et "Secondaire1" à "Secondaire10".
Les données contenues sur les feuilles "Données" de chaque fichier "Secondaire" (plage de données "A2:E15000") sont rapatriées sur le fichier "Principal" sur la feuille dédiée à chaque fichier "Secondaire". Ensuite, une macro sur le fichier principal récupère les plages "A2:E15000" (via un collage spécial des données sans les formules) de chaque feuille (de "Secondaire1" à "Secondaire10") et regroupe le tout dans la plage "A2:E150000" de la feuille "Centralisation".
Dans l'idéal, ce que je souhaiterais faire, c'est qu'à chaque fois que les feuilles "Secondaire1" à "Secondaire10" (du fichier "Principal") sont alimentées par tous les fichiers secondaires, alors les feuilles "Données" de ces fichiers secondaires soit vidées.
Ensuite, que la macro agisse sur la feuille "Centralisation" du fichier "Principal" pour repérer les doublons éventuels (doublons en fonction du numéro "ISBN"), et fusionner leurs données sur une seule ligne.
Par exemple, si sur un fichier "Secondaire1" quelqu'un rentre les infos suivantes :
ISBN : 1592634871591
Emprunteur : Marc
Date d'emprunt : 15/01/2022
Date de retour :
Synopsis : Blablabla
Et sur un autre fichier "Secondaire2" (par exemple) quelqu'un rentre ces infos là :
ISBN : 1592634871591
Date d'emprunt :
Date de retour : 31/12/2022
Synopsis : Blablabla
Alors sur le fichier "Principal", sur la feuille "Secondaire1" on aura les infos saisies sur le fichier "Secondaire1", et sur la feuille "Secondaire2" les infos saisies sur le fichier "Secondaire2". Alors,ces données sont rapatriées dans la plage "A2:E150000" de la feuille "Centralisation", mais il y a deux lignes avec le même ISBN. il faudrait donc que la macro détecte ces doublons, et fusionne les données de ces lignes ayant le même ISBN éventuellement dans une nouvelle plage de cette feuille) :
ISBN : 1592634871591
Emprunteur : Marc
Date d'emprunt : 15/01/2022
Date de retour : 31/12/2022
Synopsis : Blablabla
Je sais pas si je suis très clair
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10
-
- Grand Maître de l'OOffice
- Messages : 17084
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: [Calc] Empêcher les doublons en fusionnant les données
En passant par le Menu :
Données > Plus de filtres > Filtre spécial
tu devrais pouvoir sélectionner les ISBN sans doublons.
Voir ici pour une Macro :
viewtopic.php?p=25857#p25857
Données > Plus de filtres > Filtre spécial
tu devrais pouvoir sélectionner les ISBN sans doublons.
Voir ici pour une Macro :
viewtopic.php?p=25857#p25857
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
Re: [Calc] Empêcher les doublons en fusionnant les données
Merci, je vais éplucher ce lien après le boulot. Par contre, j'ai un peu peur (en l'ayant survolé vite fait) que cela ne "fusionne" pas les données des lignes en doublon... Mais je vais déjà tester ce système via les filtres spéciaux
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Empêcher les doublons en fusionnant les données
Salut,
Et si un 3e rentre des infos, tu fais quoi ?
Je ne vois aucune règle claire qui indique que la donnée est à conserver ou à écraser?
Et si un 3e rentre des infos, tu fais quoi ?
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
Re: [Calc] Empêcher les doublons en fusionnant les données
Salut !
Alors effectivement j'avais pas envisagé une troisième saisie pour un même ISBN. Je m'étais dis qu'un livre ne pouvait être prêté qu'une fois, donc au pire, un départ et un retour, donc deux lignes avec juste la date de départ et la date de retour qui seraient à fusionner.
Mais effectivement, si pour une raison ou une autre une troisième personne saisie venait à être effectuée pour le même ISBN, ca se complique effectivement bcp.
Du coup, je songe à une macro anti-doublon qui s'appliquerait en deux temps/endroits :
1) au niveau des fichiers "Secondaires", lors de la "Saisie". En mettant par exemple un bouton "Rechercher" qui devra être activé après avoir saisie un ISBN dans la case B5 (de la feuille "Saisie") et qui fera cette manip' d'aller rechercher si cet ISBN est présent dans la plage "A2:E150000" de la feuille "DonnéesPrincipal". Si y a déjà une ligne avec cet ISBN, alors les cases D5, F5, H5 et B8 se pré-rempliraient automatiquement avec les données existantes, et la personne qui saisie pourrait compléter les données manquantes. En validant cet enregistrement "complété", il y aura un doublon ensuite dans le fichier principal, mais les données qui y étaient déjà présentes ne seront pas différentes, ce sont juste les cellules qui étaient vides qui seraient alors complétées.
2) Au niveau du fichier "Principal", sur la feuille "Centralisation", il faudrait trouver les lignes en doublon en juste les fusionner. Si l'étape 1 sur les fichiers secondaires a bien été remplie, alors il ne devrait y avoir aucune données à écraser lors de la fusion des doublons, mais juste des cases vides qui auront été complétées éventuellement. Et si pour une raison inconnue des anciennes données venaient à avoir été modifiées, il faudrait garder uniquement la saisie la plus récente. Pour ça, j'peux rajouter à ma "table de données" une colonne avec la date du jour de la saisie afin que la macro sache quelle est la saisie la plus récente.
Je sais pas si je suis clair , et si c'est réalisable
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10
-
- Grand Maître de l'OOffice
- Messages : 17084
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Re: [Calc] Empêcher les doublons en fusionnant les données
rollmops a donné la solution un peu plus haut pour ce que tu veux faire et qui s'apparente à une gestion de stock avec des entrées et des sorties de produits, ici des livres, qui peuvent avoir le même ISBN si plusieurs exemplaires sont proposés au prêt.
Avec Calc, on voit que ce n'est pas simple.
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- IdOOle de la suite
- Messages : 25602
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Empêcher les doublons en fusionnant les données
Toujours dans le cadre des tableaux mémoires et d'une recherche dans ses éléments, tu peux te servir de PartStringInArray
Relire : https://beaussier.com/sections/viewtopi ... 3&start=15
Relire : https://beaussier.com/sections/viewtopi ... 3&start=15
C'est toujours réalisable mais au prix de contorsions qui me font rejoindre l'avis général de rollmops et jeanmimi.
-
- Membre lOOyal
- Messages : 40
- Inscription : 16 sept. 2014 13:46
Re: [Calc] Empêcher les doublons en fusionnant les données
Désolé pour le retour un peu tardif.
Alors déjà merci pour vos infos. Je suis d'accord avec Rollmops et Jeanmimi pour le fait que Base est bien mieux adapté, mais les contraintes font que je ne peux pas utiliser Base pour ce projet. C'est soit Calc, soit rien du tout...
Du coup, j'ai quand même regardé toutes les pistes données (et chercher encore de nouvelles) pour essayer de contourner les problèmes, et une qui pourrait être intéressante serait celle là (indiquée par Dude ) :
https://beaussier.com/sections/viewtopi ... dca1#p2066
Ca permettrait effectivement de fusionner toutes les lignes dont l'ISBN est en doublon, et de reporter chacune des données différentes contenues dans la case adjacente à la suite vers la droite. Pour décomplexifié le truc, je vais partir du principe qu'il ne pourra y avoir que 2 lignes avec le même ISBN (tant pis si pour une raison incompréhensible il venait à y avoir 3 "enregistrement différents pour un seul bouquin, j'improviserais à ce moment là ^^).
Du coup, si j'applique la macro ci-dessus, je vais avoir potentiellement un tableau centralisateur qui devra être de la forme suivante :
ISBN | EMPRUNTEUR | EMPRUNTEUR | DATE D'EMPRUNT | DATE D'EMPRUNT | DATE DE RETOUR | DATE DE RETOUR | SYNOPSIS | SYNOPSIS
Il faudra que je trouve la formule pour que le formulaire de la feuille "Consultation" aille bien récupérer les infos dans les bonnes cases (on va dire les plus récentes, donc logiquement dans la deuxième colonne de chacun des champs autre qu'ISBN). Ca c'est pas bien compliqué je pense en soit.
Ma question concerne donc la macro indiquée plus haut... Comment faire en sorte qu'elle transpose les enregistrements de chaque "champ" (colonne autre qu'ISBN) et pas juste celui du 1er champ (colonne B en l'occurrence) ?
Pour info, voilà le code de la macro que je devrais utiliser pour cette question de gestion des doublons (qui n'est pas encore adapté à mon fichier) :
J'y comprends quasiment rien à ce code le début ça va, puis dès qu'on passe à " ' Déclaration du tableau de regroupement" là je suis perdu
Alors déjà merci pour vos infos. Je suis d'accord avec Rollmops et Jeanmimi pour le fait que Base est bien mieux adapté, mais les contraintes font que je ne peux pas utiliser Base pour ce projet. C'est soit Calc, soit rien du tout...
Du coup, j'ai quand même regardé toutes les pistes données (et chercher encore de nouvelles) pour essayer de contourner les problèmes, et une qui pourrait être intéressante serait celle là (indiquée par Dude ) :
https://beaussier.com/sections/viewtopi ... dca1#p2066
Ca permettrait effectivement de fusionner toutes les lignes dont l'ISBN est en doublon, et de reporter chacune des données différentes contenues dans la case adjacente à la suite vers la droite. Pour décomplexifié le truc, je vais partir du principe qu'il ne pourra y avoir que 2 lignes avec le même ISBN (tant pis si pour une raison incompréhensible il venait à y avoir 3 "enregistrement différents pour un seul bouquin, j'improviserais à ce moment là ^^).
Du coup, si j'applique la macro ci-dessus, je vais avoir potentiellement un tableau centralisateur qui devra être de la forme suivante :
ISBN | EMPRUNTEUR | EMPRUNTEUR | DATE D'EMPRUNT | DATE D'EMPRUNT | DATE DE RETOUR | DATE DE RETOUR | SYNOPSIS | SYNOPSIS
Il faudra que je trouve la formule pour que le formulaire de la feuille "Consultation" aille bien récupérer les infos dans les bonnes cases (on va dire les plus récentes, donc logiquement dans la deuxième colonne de chacun des champs autre qu'ISBN). Ca c'est pas bien compliqué je pense en soit.
Ma question concerne donc la macro indiquée plus haut... Comment faire en sorte qu'elle transpose les enregistrements de chaque "champ" (colonne autre qu'ISBN) et pas juste celui du 1er champ (colonne B en l'occurrence) ?
Pour info, voilà le code de la macro que je devrais utiliser pour cette question de gestion des doublons (qui n'est pas encore adapté à mon fichier) :
Code : Tout sélectionner
sPlage = "A1:B12"
oDoc = ThisComponent ' Le classeur
oFeuil = oDoc.Sheets(0) ' La 1ere feuille qui est indexée à 0
oPlage = oFeuil.getCellRangeByName(sPlage)
oTab = oPlage.DataArray
' Déclaration du tableau de regroupement
m = UBound(oTab) ' valeur maximum
Dim oRgp(0 To m) as variant
For o = 0 to m
oRgp(o) = DimArray(m)
Next o
While i <= Ubound(oTab)
l = 1
oRgp(k)(0) = oTab(i)(0)
' Complete le sous-tableau à vide
For j = 1 to m
oRgp(k)(j) = ""
Next j
For j = i to m
if (oRgp(k)(0) = oTab(j)(0)) then
oRgp(k)(l) = oTab(j)(1)
l = l + 1
else
exit for
endif
Next
k = k + 1
i = j
Wend
Redim Preserve oRgp(0 To k-1)
oFeuil = oDoc.Sheets(1) ' La 2e feuille
i = UBound(oRgp)
j = UBound(oRgp(i))
oPlage = oFeuil.getCellRangeByPosition(0,0,j,i)
oPlage.DataArray = oRgp
Obligation de version : LibreOffice 6.2.7.1lin1 (x64)
Windows 10
Windows 10