Macro pour tableau

Bonjour,

J'ai réalisé un dispositif de tirage au sort aléatoire, destiné àdes parties de pétanque. J'ai réfléchi pendant des mois pour arriver à ce système, après bien des essais et tâtonnements, quelquefois acrobatiques.

Il y a quelques macros enregistrées mais je bute sur la réalisation d'une macro qui ferait ceci :

1) Copier les valeurs des listes des colonnes H et I, sélectionnées préalablement et, avec "Collage spécial", coller verticalement en colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I, mais, comme ci-dessus, seulement les nombres.
3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la liste de la colonne K ; décalés d'une cellule à chaque ligne (il s'agit des parties à effectuer pour chacune des équipes, en correspondance avec chacune des équipes de la liste de la ligne 7).

Le tableau de droite récapitule les parties à effectuer par les équipes engagées.

Ci-dessous le fichier Calc réalisé (c'est une maquette) :
_http://www.cjoint.com/?3CnmchuLHC1_

Correction : voici la bonne adresse du fichier :
http://www.cjoint.com/data3/3CnmchuLHC1.htm

En cliquant sur le bouton "Initialiser" un tri par ordre numérique est effectué,
en cliquant sur le bouton "Trier", un tri aléatoire est effectué (tri sur la colonne A).

Si quelqu'un peut réaliser cette macro, il aura droit à ma considération.

En compensation, pour ceux que cela intéresse, je leur fait cadeau du principe, qui est le suivant :
A) on effectue un tri aléatoire sur la totalité des équipes engagées (en nombre pair obligatoirement),
B) on scinde en deux groupes d'équipes d'égale importance (Équipes Aet équipes B),
C) Chacune des équipes A rencontrera 5 fois 5 équipes B différentes. Sans risque de doublon.

Environnement :

    - LinuxMint Cinnamon 13,
    - LibreOffice 3.6.2.2

Merci par avance.

Bonjour Michel

Michel ANDREU-2 wrote

une macro qui ferait ceci :

1) Copier les valeurs des listes des colonnes H et I, sélectionnées
préalablement et, avec "Collage spécial", coller verticalement en
colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I,
mais, comme ci-dessus, seulement les nombres.
3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la
liste de la colonne K ; décalés d'une cellule à chaque ligne (il s'agit
des parties à effectuer pour chacune des équipes, en correspondance avec
chacune des équipes de la liste de la ligne 7).

Je m'y mettrais entre deux... mais avant j'ai deux questions.

1. Pourquoi copier par macro alors qu'il me semble que tu pourrais
alimenter K8:K22 et L7:AD7 par formule ?

Par exemple K8 = H7 puis "tirer" vers le bas
Par exemple L7 =DECALER($I7;(COLONNE(L7)-12);0) puis "tirer" vers la
droite.

Ceci résoudrait tes questions 1 et 2.

2. Pourquoi mettre par macro 1,2,3,4,5 puisqu'il semble que ces
valeurs ne changent pas ?

J'ai peut-être regardé un peu vite ton classeur mais en fait je
me demande : pourquoi des macros ?

Cordialement
Pierre-Yves

stop

Bonjour Michel

Michel ANDREU-2 wrote

une macro qui ferait ceci :

1) Copier les valeurs des listes des colonnes H et I, sélectionnées
préalablement et, avec "Collage spécial", coller verticalement en
colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I,
mais, comme ci-dessus, seulement les nombres.
3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la
liste de la colonne K ; décalés d'une cellule à chaque ligne (il s'agit
des parties à effectuer pour chacune des équipes, en correspondance avec
chacune des équipes de la liste de la ligne 7).

Je m'y mettrais entre deux... mais avant j'ai deux questions.

1. Pourquoi copier par macro alors qu'il me semble que tu pourrais
alimenter K8:K22 et L7:AD7 par formule ?

Par exemple K8 = H7 puis "tirer" vers le bas
Par exemple L7 =DECALER($I7;(COLONNE(L7)-12);0) puis "tirer" vers la
droite.

Ceci résoudrait tes questions 1 et 2.

2. Pourquoi mettre par macro 1,2,3,4,5 puisqu'il semble que ces
valeurs ne changent pas ?

J'ai peut-être regardé un peu vite ton classeur mais en fait je
me demande : pourquoi des macros ?

Cordialement
Pierre-Yves

Bonsoir Pierre-Yves,

Merci de tes suggestions. Je m'y colle dès les jours prochains pour te donner des réponses cohérentes.
Premier élément de réponse : simplement je ne sais pas tout faire avec Calc parce que autodidacte, il y a forcément des lacunes importantes dans mon savoir.
Les questions posées sur cette liste, et les réponses qui y sont apportées, sont souvent source d'apprentissage, quant elles me concernent.
À très bientôt.
Michel

stop

Bonsoir Lucie,
"stop" !!!!
Michel

Bonjour Lucile

lucile aspe wrote

stop

Je suppose que vous souhaitez vous désabonner de cette liste ?
Si c'est bien le cas la procédure est décrite avec des exemples ici :
http://fr.libreoffice.org/forums/#desabonnement

Cordialement
Pierre-Yves

Bonjour Michel

Michel ANDREU-2 wrote

une macro qui ferait ceci :

1) Copier les valeurs des listes des colonnes H et I, sélectionnées
préalablement et, avec "Collage spécial", coller verticalement en
colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I,
mais, comme ci-dessus, seulement les nombres.
3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la
liste de la colonne K ; décalés d'une cellule à chaque ligne (il s'agit
des parties à effectuer pour chacune des équipes, en correspondance avec
chacune des équipes de la liste de la ligne 7).

Je m'y mettrais entre deux... mais avant j'ai deux questions.

1. Pourquoi copier par macro alors qu'il me semble que tu pourrais
alimenter K8:K22 et L7:AD7 par formule ?

Par exemple K8 = H7 puis "tirer" vers le bas

Oui mais je souhaite une valeur numérique et pas une formule (pour constituer le tableau final de droite).

Par exemple L7 =DECALER($I7;(COLONNE(L7)-12);0) puis "tirer" vers la
droite.

Même raison que ci-dessus.

Ceci résoudrait tes questions 1 et 2.

2. Pourquoi mettre par macro 1,2,3,4,5 puisqu'il semble que ces
valeurs ne changent pas ?

J'ai peut-être regardé un peu vite ton classeur mais en fait je
me demande : pourquoi des macros ?

Cordialement
Pierre-Yves

Je pense que les informations du premier courriel sont insuffisantes. La procédure de gestion est la suivante :

    1) Saisie des noms des équipiers. Les numéros attribués à chaque
    équipe sont automatiques et dans l'ordre des inscriptions.
    2) Saisie de "f" si c'est une équipe féminine.
    3) Tirage au sort aléatoire.
    4) En première partie du tournoi, chaque équipe effectue 5 parties.
    5) Saisie des scores de chaque équipe et calcul automatique des
    écarts (chaque partie se fait en 13 points).
    6) Totalisation automatique des écarts et du nombre de parties
    gagnées et/ou perdues.
    7) Classement automatique des équipes d'abord par le nombre de
    parties gagnées, ensuite par le total des écarts.
    8) En seconde partie du tournoi, une demi-finale et une finale, par
    élimination.
    8) Classement final pour l'attribution des lots.

/En complément d'information, l'application est gérée par un/des bénévole(s), généralement des jeunes qui manient bien un ordinateur mais n'ont pas les compétences pour concevoir ou réorganiser un tableau.//
//Il leur faut donc un logiciel qui fasse tout automatiquement. L'opérateur doit simplement effectuer les saisie et suivre la procédure ; généralement en cliquant sur des boutons. Point ! Sans avoir à intervenir dans les tableaux./

Le fichier joint ci-dessus est une maquette qui n'est que le projet de la partie "Tirage au sort aléatoire" ; à intégrer dans le fichier final une fois mis au point.

Je t'adresse un courriel personnel avec le fichier d'un des derniers tournoi ; qui ne compte que 20 équipes puisqu'il s'agit d'une participation purement locale. Pour que tu aies une idée plus précise de la procédure.

Merci de ta coopération.

Bonne journée.

Michel

Re-Bonjour

Michel ANDREU-2 wrote

1) Copier les valeurs des listes des colonnes H et I, sélectionnées
préalablement et, avec "Collage spécial", coller verticalement en
colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I,
mais, comme ci-dessus, seulement les nombres.

Je ne comprends pas : ton classeur comprend déjà les macros
réalisant cela (MAS_Equipes_A et MAS_Equipes_B).

N'ayant déjà pas trop de temps pour moi je ne vois pas la nécessité
de les réécrire...

Michel ANDREU-2 wrote

3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la
liste de la colonne K ; décalés d'une cellule à chaque ligne

Fait dans la procédure Pys12345 du classeur joint.

3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods
<http://nabble.documentfoundation.org/file/n4044207/3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods>

Michel ANDREU-2 wrote

Je pense que les informations du premier courriel sont insuffisantes. La
procédure de gestion est la suivante...

Désolé mais je ne peux matériellement pas m'investir dans un
projet "complet". Je tente ici de répondre sur des points précis
comme la procédure ci-dessus :slight_smile:

Cordialement
Pierre-Yves

Re-Bonjour

Michel ANDREU-2 wrote

1) Copier les valeurs des listes des colonnes H et I, sélectionnées
préalablement et, avec "Collage spécial", coller verticalement en
colonne K, seulement les nombres de la liste de la colonne H,
2) transposer horizontalement les valeurs de la liste de la colonne I,
mais, comme ci-dessus, seulement les nombres.

Je ne comprends pas : ton classeur comprend déjà les macros
réalisant cela (MAS_Equipes_A et MAS_Equipes_B).

Oui, bien sûr, mais je ne sais pas tenir compte d'une liste de longueur variable. Les macros ci-dessus prennent en compte une liste de longueur prédéfinie.

N'ayant déjà pas trop de temps pour moi je ne vois pas la nécessité
de les réécrire...

Michel ANDREU-2 wrote

3) Ajouter les nombres "1,2,3,4,5" vis-à-vis de chaque nombre de la
liste de la colonne K ; décalés d'une cellule à chaque ligne

Fait dans la procédure Pys12345 du classeur joint.

3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods
<http://nabble.documentfoundation.org/file/n4044207/3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods>

Cette macro est bien telle que je le recherchais;

Michel ANDREU-2 wrote

Je pense que les informations du premier courriel sont insuffisantes. La
procédure de gestion est la suivante...

Désolé mais je ne peux matériellement pas m'investir dans un
projet "complet". Je tente ici de répondre sur des points précis
comme la procédure ci-dessus :slight_smile:

Cordialement
Pierre-Yves

Je comprend bien et te remercie de m'avoir prêté attention. Tu m'as donné une bonne partie de la réponse. Je finirais bien par comprendre pour ce qui reste à résoudre.

Merci encore.

Bien sincèrement.

Michel

Bonjour

Michel ANDREU-2 wrote

tenir compte d'une liste de longueur variable.
Les macros ci-dessus prennent en compte une liste de longueur
prédéfinie.

Ok, je n'avais pas compris ce point... pour lequel j'avais rédigé une
entrée avec exemples sur le Wiki :

Comment trouver la plage utilisée
<https://wiki.documentfoundation.org/Macros/Calc/001/fr>

Il y a aussi cet autre exemple qui pourrait te concerner:
Comment gérer la sélection courante
<https://wiki.documentfoundation.org/Macros/Calc/003/fr>

Cordialement
Pierre-Yves

Suite...

pierre-yves samyn wrote

Ok, je n'avais pas compris ce point... pour lequel j'avais rédigé une
entrée avec exemples sur le Wiki :
Comment trouver la plage utilisée
<https://wiki.documentfoundation.org/Macros/Calc/001/fr>

En y repensant cette FAQ ne te sera pas utile car ta plage contient
des formules, elle n'est pas vide (par parenthèse cela me permet de me
rendre compte qu'il faut compléter cette FAQ).

Je t'envoie la solution dès que possible dans la journée...

Cordialement
Pierre-Yves

Suite, Suite... :slight_smile:

Ci-joint un exemple de solution fondée sur la fonction Rechercher

Le programme recherche "tout caractère" dans la plage H7:H100
en ne recherchant que dans les valeurs (pas les formules ni les
commentaires).

Ainsi, les cellules contenant des formules mais pas de valeurs
ne sont pas sélectionnées.

Là où cela se complique un peu c'est que ta plage ne comprend
pas partout la même formule. Je ne sais si c'est une erreur ou
un oubli mais à partir de la ligne 57 il y a une fonction INDEX
pouvant retourner aussi des "Err:502".

Ces cellules affichent "quelque chose" (le libellé d'erreur). Il ne
faut pourtant pas les sélectionner. Le programme gère aussi
cela (voir les commentaires dans le code).

Autre "difficulté" : la recherche sur la plage I7:I56 poserait
problème si on utilise le même code car elle utilise aussi
la fonction INDEX qui, quand rien n'est retourné, renvoie
zéro... qui est trouvé par le code.

J'ai donc modifié la formule de I7:I56 en testant de la manière suivante:
=SI(INDEX($B6:$B$108;ENT($F$7)+2)<>0;INDEX($B6:$B$108;ENT($F$7)+2);"")

Ainsi, on peut utiliser le même code pour cette plage...

3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods
<http://nabble.documentfoundation.org/file/n4044274/3CnmchuLHC1_test_tirage_au_sort_aleatoire.ods>

Cordialement
Pierre-Yves