[Calc] Combinaison

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: 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 !

[Calc] Combinaison

Messagepar Philips » 13 Oct 2018 12:55

Bonjour,

Une image vaut mieux que de grands discours.

Image

Avez-vous une idée ?
Pièces jointes
excel.png
Libre office 5.3 sous Windows
Philips
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 13 Oct 2018 11:58

Re: [Calc] Combinaison

Messagepar micmac » 13 Oct 2018 13:03

Bonjour et bienvenue sur le forum,

< [Calc] Combinaison >
Le titre de votre question n'est pas assez explicite :

Lors d'une recherche, ce sujet risque de passer inaperçu et donc de ne pas aider d'autres personnes ayant le même problème que vous.

Ce titre doit synthétiser votre question et donner envie d'y répondre. Un titre clair et précis augmente vos chances d'obtenir des réponses plus rapidement. Des termes comme, aide, bogue, problème ou OpenOffice étant implicites, n'ont pas besoin d'être mentionnés, de même que macro en section éponyme.

Voici des astuces pour avoir un titre optimum : https://forum.openoffice.org/fr/forum/v ... 1002#p1002

Merci donc de le modifier au plus tôt. Si cela n'est pas fait avant votre prochain passage, le sujet sera verrouillé.

Dans votre signature il y a écrit: Libre office 5.3 sous Windows

Votre signature indique une version de OpenOffice qui n'est plus maintenue.
Est-ce une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".

Pour connaître la version que vous possédez : https://forum.openoffice.org/fr/forum/v ... 582#p11582

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version

Dans votre signature il est nécessaire d'indiquer :
1- La version exacte de AOO ou LibO (AOO 4.1.5, LibO 6.0.6 par exemple) ;
2- La version exacte du système d'exploitation (Windows XP SP3, Vista SP2, Windows 7 SP1, Win 8.1, Win 10, Ubuntu 18.04, MacOS 10.13.6 par exemple).
Accès direct à votre signature pour la corriger.

Cordialement.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 5172
Inscrit le : 28 Août 2010 09:45

Re: [Calc] Combinaison

Messagepar Jean-Louis Cadeillan » 13 Oct 2018 16:10

Bonjour,
Tu peux régler cela avec la fonction INDEX(). Soit tab ta plage d'entrée (C3:E5 dans ton exemple)
Pour la première colonne (en B10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;1;ENT((LIGNE(A1)-0,1)/9+1))
à recopier 26 fois vers le bas.
Pour la deuxième colonne (en C10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;2;MOD(ENT((LIGNE(A7)-0,1)/3+1);3)+1)
à recopier 26 fois vers le bas.
Pour la troisième colonne (en D10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;3;MOD(LIGNE(A3);3)+1)
à recopier 26 fois vers le bas.

Si tu ne veux pas avoir à recopier vers le bas, tu peux passer à des formules matricielles :
Pour la première colonne (en B10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;1;ENT((LIGNE(A1:A27)-0,1)/9+1))
à valider par Ctrl+Maj+Entrée.
Pour la deuxième colonne (en C10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;2;MOD(ENT((LIGNE(A7:A33)-0,1)/3+1);3)+1)
à valider par Ctrl+Maj+Entrée.
Pour la troisième colonne (en D10 dans ton exemple):
Code : Tout sélectionner   AgrandirRéduire
=INDEX(tab;3;MOD(LIGNE(A3:A29);3)+1)
à valider par Ctrl+Maj+Entrée.

Cordialement,
Jean-Louis
LibreOffice 6.1.1.2 (x64) et Apache OpenOffice 4.1.5, Windows 7 Édition Intégrale 64 SP1, Java (x64) 1.8.0_181 (Domicile)
LibreOffice 5.4.1.2 (x86) sous Linux Karoshi 5.0 (Ubuntu LTS 16.04.1, noyau 4.4.0-93) et Xfce 4.12, Java (x86) 1.8.0_131 (Travail)
Avatar de l’utilisateur
Jean-Louis Cadeillan
ManitOOu
ManitOOu
 
Message(s) : 3792
Inscrit le : 03 Jan 2009 00:56

Re: [Calc] Combinaison

Messagepar Philips » 13 Oct 2018 19:06

Super Jean-Louis ça marche. Merci pour ton aide !

Micmac, je vais mettre mon logiciel à jour et changer le titre.
Libre office 5.3 sous Windows
Philips
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 13 Oct 2018 11:58

Re: [Calc] Combinaison

Messagepar micmac » 13 Oct 2018 22:07

Philips a écrit:je vais mettre mon logiciel à jour et changer le titre

Sans oublier de déclarer le sujet comme résolu.
Comment clore un sujet correctement lorsqu'il est résolu
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 5172
Inscrit le : 28 Août 2010 09:45

Re: [Calc] Combinaison

Messagepar Churay » 14 Oct 2018 11:10

Yeap

J'adore toujours autant les formules de Jean-Louis, mais je n'ai pas changé : la question étant posée en section macro, on peut répondre aussi par macro...

Une première solution consiste à balayer les cellules pour les réécrire réordonnées comme souhaité :
Code : Tout sélectionner   AgrandirRéduire
Option Explicit

Sub Combi1
Dim oSheet AS Object
Dim iX AS Long, iY AS Long, iZ AS Long, nRow AS Long

   oSheet = thisComponent.CurrentController.ActiveSheet
   nRow = 9
   FOR iX = 2 TO 4
      FOR iY = 2 TO 4
         FOR iZ = 2 TO 4
            oSheet.getCellByPosition(1,nRow).Value = oSheet.getCellByPosition(iX,2).Value
            oSheet.getCellByPosition(2,nRow).Value = oSheet.getCellByPosition(iY,3).Value
            oSheet.getCellByPosition(3,nRow).Value = oSheet.getCellByPosition(iZ,4).Value
            nRow = nRow + 1
         NEXT iZ
      NEXT iY
   NEXT iX
End Sub


Une seconde version identique dans la logique mais plus rapide s'il y a un grand nombre de données, consiste à récupérer la plage de données dans un ARRAY, puis à balayer l'ARRAY pour les réécrire réordonnées comme souhaité.

Code : Tout sélectionner   AgrandirRéduire
Option Explicit

Sub Combi2
Dim oSheet AS Object, aDatas(8)
Dim iX AS Long, iY AS Long, iZ AS Long, nRow AS Long

   oSheet = thisComponent.CurrentController.ActiveSheet
   aDatas = oSheet.getCellRangeByName("C3:E5").DataArray
   nRow = 38
   
   FOR iX = 0 TO 2
      FOR iY = 0 TO 2
         FOR iZ = 0 TO 2
            oSheet.getCellByPosition(1,nRow).Value = aDatas(0)(iX)
            oSheet.getCellByPosition(2,nRow).Value = aDatas(1)(iY)
            oSheet.getCellByPosition(3,nRow).Value = aDatas(2)(iZ)
            nRow = nRow + 1
         NEXT iZ
      NEXT iY
   NEXT iX

End Sub
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
 
Message(s) : 2653
Inscrit le : 30 Avr 2009 05:54
Localisation : CATALUNYA


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité