[Résolu] Afficher les plages de colonne identique

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
cyril260
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 29 nov. 2015 16:17

[Résolu] Afficher les plages de colonne identique

Message par cyril260 »

Bonjour à tous,

Savez vous comment faire pour savoir combien de colonne identique se trouvent dans un classeur et si possible d'afficher les résultats en surbrillance ?
J'ai essayer la formule NB.SI mais il s'agit d'une recherche d'un critère dans une plage et je ne trouve pas la formule pour chercher une plage parmi des plages.

Dans le cas ou je n'ai pas été clair, j'ai joint un fichier.

Merci sincèrement pour votre aide

Cordialement,

Cyril
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par cyril260 le 07 nov. 2018 20:37, modifié 1 fois.
OpenOffice 4.1.5 AOO415m1(Build:9789) - Rev. 1817496
2017-12-11 17:25
sous Windows XP Service Pack 3

Obligation de version.
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: Afficher les plages de colonne identique

Message par Jeff »

Bonjour,

Dans le fichier réel, combien y a -til de colonnes à vérifier ?

Parce qu’il va falloir vérifier la colonne :
  • 1 avec la 2
  • 1 avec la 3
  • 1 avec la 4
  • 1 avec la 5
Puis :
  • 2 avec la 3
  • 2 avec la 4
  • 2 avec la 5
etc...

A +
cyril260
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 29 nov. 2015 16:17

Re: Afficher les plages de colonne identique

Message par cyril260 »

Bonjour Jeff et merci pour ta réponse,

Il doit avoir environ 520 colonnes sur 14 lignes (oui je sais c'est beaucoup :? )
OpenOffice 4.1.5 AOO415m1(Build:9789) - Rev. 1817496
2017-12-11 17:25
sous Windows XP Service Pack 3

Obligation de version.
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: Afficher les plages de colonne identique

Message par Jean-Louis Cadeillan »

Bonsoir,
Tu pourrais concaténer toute une colonne de données en une seule chaîne et utiliser une formule de type

Code : Tout sélectionner

NB.SI(plage des chaînes; chaîne) >1
dans une MFC.
Tu pourrais aussi t'orienter vers une fonction de hachage... mais il risque d'y avoir des collisions.
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Afficher les plages de colonne identique

Message par OOotremer971 »

Bonjour,
cyril260 a écrit :et si possible d'afficher les résultats en surbrillance ?
Cela risque de poser problème car si il existe plusieurs séries la surbrillance sélectionnera toutes les colonnes de toutes les séries.
cyril260 a écrit :Il doit avoir environ 520 colonnes sur 14 lignes (oui je sais c'est beaucoup :? )
Vu la quantité, il est préférable de gérer cela par macro. Dans ce fil : [Résolu][Calc]Comparer et repérer colonnes identiques je te propose une solution qui nécessite de nommer la plage à traiter ainsi qu'une ligne en dessous pour effectuer un marquage en remplacement de la surbrillance. Il faudra passer par Ctrl+F3 pour nommer ces plages à l'identique dans le fichier final.
cyril260.png
Lorsqu'une série de colonnes identique est trouvée, toutes les cellules de la même séries portent le numéro de la première colonne trouvée dans cette série et ainsi de suite pour toutes les autres nouvelles séries si il y en a. Si une colonne est unique, elle ne reçoit pas de marquage :
cyril260_2.png
Le fichier est dans le fil que je te donne un peu plus haut.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: Afficher les plages de colonne identique

Message par Jean-Louis Cadeillan »

Bonsoir,
Ci-joint une mise en œuvre de ma première solution suggérée plus haut (sans macro ni fonction ajoutée), sur 520 colonnes et 15 lignes (et pas 14, car ton fichier exemple en comportait 15).
Les chaînes sont créées en ligne 17 (masquée), le nombre de plages-colonnes identiques en ligne 18 et la MFC simplifiée se colorant en jaune dès que la cellule correspondante de la ligne 18 est supérieure à 1.
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
cyril260
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 29 nov. 2015 16:17

Re: Afficher les plages de colonne identique

Message par cyril260 »

Bonsoir,

Tout d'abord je tiens à dire un grand Merci pour vos réponse :bravo: ! Je suis même impressionné que ma question est sujet d'un fil tutorial crée par OOotremer971 qui explique de façon si claire

@ OOotremer971:
La macro marche parfaitement et je te remercie, je vais l'enregistrer ! Il suffit simplement de définir les plages:
Plage_a_comparer et Plage_de_marquage et exécuter la macro pour connaître les colonnes identiques à l'aide d'un marquage précisant le numéro de colonne identique !! Merci sincèrement ! :super: :super: :super: ( le niveau est trop élevé pour moi, donc je me contenterais d'appliquer la macro)

@ Jean-Louis Cadeillan: Merci sincèrement également pour tes réponses qui résoud également parfaitement le problème et sans macro.
-J'ai essayé d'appliquer ce que tu as dis dans le premier message, j'ai concaténeé toute une colonne de données en une seule chaîne ( Ctrl+F3 et j'ai défini la plage $Feuille1.$A$2:$A$16 et utiliser une formule dans une MFC de type

Code : Tout sélectionner

NB.SI(A2:E16; nom_de_la_chaine)>1
avec un style de surbrillance de couleur Rouge et malheureusement les colonnes B C D deviennent rouge alors que la colonne D est identique à la colonne A.
-Ensuite j'ai regardé le fichier joint dans le second message, et en effet tout fonctionne parfaitement :super: , mais dans un soucis de compréhension que signifie

Code : Tout sélectionner

=A2&"²"&A3&
(désolé je débute dans Open Office et je trouve cela vraiment passionnant)

Merci encore sincèrement pour votre aide, je vais marquer le sujet [Résolu]
OpenOffice 4.1.5 AOO415m1(Build:9789) - Rev. 1817496
2017-12-11 17:25
sous Windows XP Service Pack 3

Obligation de version.
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5753
Inscription : 02 janv. 2009 23:56

Re: Afficher les plages de colonne identique

Message par Jean-Louis Cadeillan »

cyril260 a écrit :une formule dans une MFC de type

Code : Tout sélectionner

NB.SI(A2:E16; nom_de_la_chaine)>1
Quelques remarques :
  • la plage premier argument de NB.SI() est censée contenir les chaînes, c'est-à-dire des cellules (dans mon exemple, ces cellules se trouvent en ligne 17) dans lesquelles on a concaténé les valeurs d'autres cellules, donc la plage ne peut pas être A2:E16 (ton exemple) qui contient les valeurs initiales et non les chaînes concaténées ;
  • cette plage de chaînes doit être en notation absolue (avec des $) pour ne pas se décaler quand tu recopie le NB.SI() (que ce soit dans la zone de MFC ou dans des cellules) ;
  • en deuxième argument de NB.SI(), il ne faut pas mettre un nom (attribué à une cellule) mais la référence de la cellule elle-même, de manière à pouvoir la recopier.
cyril260 a écrit :que signifie

Code : Tout sélectionner

=A2&"²"&A3&
Imagine que tu aies dans trois cellules consécutives d'une colonne 11, 12, 13, si tu fais une concaténation brute, tu obtiens 111213, mais tu obtiendrais 111213 également à partir des 3 cellules 1, 112, 13 ou des trois cellules 11,121, 3 , etc. : il y a des collisions ! D'où l'idée de séparer chaque valeur par un caractère dont on est sûr qu'il ne sera pas présent en tant que valeur, d'où le choix du ², ainsi même si tes valeurs de cellules étaient alphabétiques, et non numériques, le séparateur ² resterait discriminant.
Remarque : à la place de l'opérateur de concaténation, on pourrait :
  • utiliser la fonction CONCATENER()
  • utiliser une fonction CONCAT() (merci à gerard24 ! Voir ici), embarquée dans le fichier, dont voici le code :

    Code : Tout sélectionner

    REM  *****  BASIC  *****
    
    REM Fonction trouvée sur le forum anglais
    REM J'ai modifié le nom original JOINCELLS en CONCAT
    REM Concatène une plage de cellules avec séparateur en ignorant les cellules vides et les 0
    REM Si la plage est un rectangle, la concaténation se fait ligne par ligne.
    
    Function CONCAT(cells, Optional sep$)
    	If isMissing(sep) then sep = ""
    REM J'ai aussi rendu le séparateur optionnel
    
    on error goto exitErr
       CONCAT = ""
       for row = lBound(cells, 1) to uBound(cells, 1)
          for col = lBound(cells, 2) to uBound(cells, 2)
             if cells(row, col) <> 0 then
                if CONCAT <> "" then
                   CONCAT = CONCAT & sep
                end if
                CONCAT = CONCAT & cells(row, col)
             end if
          next
       next
    exit function
    exitErr:
       REM #VALUE
       CONCAT = Null
    End Function
    Cette fonction ne marche correctement que pour OpenOffice et permet une écriture bien plus ramassée :

    Code : Tout sélectionner

    =CONCAT($A$2:$A$16;"²")
  • Pour LibreOffice uniquement, utiliser la fonction JOINDRE.TEXTE(), de syntaxe voisine de CONCAT() :

    Code : Tout sélectionner

    =JOINDRE.TEXTE("²";;$A$2:$A$16)
Cordialement,
Jean-Louis
LibO 7.6.6.3 (x64 avec Java 1.8.0_411) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: [Résolu] Afficher les plages de colonne identique

Message par OOotremer971 »

Bonjour,

Bien que le sujet soit marqué résolu, je propose un complément sans macro à la solution donnée par Jean-Louis Cadeillan :) que je salue au passage :
cyril260_3.png
1) une ligne de marquage pour repérer les séries identique (C pour première colonne dans la même série, Q pour quantité trouvée dans cette série)

Code : Tout sélectionner

=SI(A18>1;"C"&EQUIV(A17;$A$17:A17;0)&" Q"&A18;"")
2) en A21, un sélecteur qui permet de choisir un des marqueurs générés et ne mettre en surbrillance que les colonnes appartenant à ce même marquage. Les colonnes sans marquage sont uniques.

A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
cyril260
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 29 nov. 2015 16:17

Re: [Résolu] Afficher les plages de colonne identique

Message par cyril260 »

Bonsoir, et désolé pour la réponse tardive


Merci beaucoup Jean-Louis Cadeillan pour ces précisions qui m'ont beaucoup aidé à comprendre ton raisonnement et je dois dire que c'est hyper bien pensé :super: Cette combinaison de 3 formules a résolu parfaitement le problème :bravo:
Là ou je n'ai pas encore réussit c'est d' ajouter la fonction CONCAT dans mon Oo, je l'ai ajouté sous forme de macro et lorsque je l' exécute je reçois une erreur mais je ne vais pas te déranger la dessus, tu m'a déjà beaucoup aidé ! merci encore

Et je tiens aussi à dire un grand Merci à OOotremer971 pour la super macro et également pour l'ajout de fonctions aux fichier de Jean-Louis Cadeillan permettant d'analyser les colonnes en double ! C'est super sympa et bien pensé également, merci encore :D

A très bientôt,

Cyril
OpenOffice 4.1.5 AOO415m1(Build:9789) - Rev. 1817496
2017-12-11 17:25
sous Windows XP Service Pack 3

Obligation de version.