Macro de redistibution et macro de matrice
Résolu/Fermé
A voir également:
- Macro de redistibution et macro de matrice
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro logiciel - Télécharger - Organisation
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
7 réponses
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
10 févr. 2014 à 13:35
10 févr. 2014 à 13:35
Bonjour,
Grâce aux formules, je vois à peu près ce que tu fais, mais je ne comprends pas :
- les données d'origine : c'est impossible qu'il y ait une grande variété de nombres dans ta colonne B (d'en-tête "A") ; ex : 232 ; 233 ; 234 ; 235 ? Ceci
- pourquoi dans l'onglet Résultats "235" reste en B7 et n'est pas basculé vers C7.
A+
Grâce aux formules, je vois à peu près ce que tu fais, mais je ne comprends pas :
- les données d'origine : c'est impossible qu'il y ait une grande variété de nombres dans ta colonne B (d'en-tête "A") ; ex : 232 ; 233 ; 234 ; 235 ? Ceci
- pourquoi dans l'onglet Résultats "235" reste en B7 et n'est pas basculé vers C7.
A+
Salut,
D'abord merci d'avoir pris le temps de regarder un peu la situation !! pour répondre a tes questions :
235 doit en effet basculer en C7, je l'ai fait en manuel c'est juste un oubli de ma part désolé.
Dans chacune des colonnes il ne peut y avoir que les nombres situés dans la première ligne (celle qui classe par ordre croissant l'ensemble des valeurs uniques de mon tableau)
par exemple en colonne B (en tete A) on ne peut trouver que : 232 ; 235 ; 241 ; 243 ; 245 ; 247 ... De même en colonne C D E F et G.
Il faut "juste" remettre chaque nombre dans la colonne qui lui est propre
A+
D'abord merci d'avoir pris le temps de regarder un peu la situation !! pour répondre a tes questions :
235 doit en effet basculer en C7, je l'ai fait en manuel c'est juste un oubli de ma part désolé.
Dans chacune des colonnes il ne peut y avoir que les nombres situés dans la première ligne (celle qui classe par ordre croissant l'ensemble des valeurs uniques de mon tableau)
par exemple en colonne B (en tete A) on ne peut trouver que : 232 ; 235 ; 241 ; 243 ; 245 ; 247 ... De même en colonne C D E F et G.
Il faut "juste" remettre chaque nombre dans la colonne qui lui est propre
A+
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
10 févr. 2014 à 14:57
10 févr. 2014 à 14:57
Tes données sont toujours sur 6 colonnes ou c'est variable ?
C'est variable mais je dois pouvoir faire les modifs moi même si il s'agit juste d'agrandir les range
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
10 févr. 2014 à 17:03
10 févr. 2014 à 17:03
J'aime assez les formules... donc je les ai réutilisées assez abondamment dans https://www.cjoint.com/?DBkq6Oq1ljF
mais plus besoin de copier-coller.
La macro que j'ai ajoutée permet juste de trier les 6 valeurs (d'ailleurs je me suis basé sur un nombre de colonnes fixe avant que répondes à 16:57...).
Tu peux donc désormais avoir un 232 qui traîne à droite sans que ça gêne.
Mais plusieurs fois le même nombre sur une ligne risque de semer le bazar.
A+
mais plus besoin de copier-coller.
La macro que j'ai ajoutée permet juste de trier les 6 valeurs (d'ailleurs je me suis basé sur un nombre de colonnes fixe avant que répondes à 16:57...).
Tu peux donc désormais avoir un 232 qui traîne à droite sans que ça gêne.
Mais plusieurs fois le même nombre sur une ligne risque de semer le bazar.
A+
Merci de ton aide !!
C'est un peu vers quoi je m'étais dirigés avec l'utilisation de formule mais je voudrais tout de même savoir si il est possible de faire la même chose par macro, n'étant pas le seul utilisateur ca me semble plus simple de détecté une erreur d'entrée de donnée par macro que par formule (comme 3valeurs dans une ligne)
Inclure un renvoie vers d'autres onglets pourrait etre sympa aussi et vu qu'au final les données vont servir dans un autre logiciel qui supporte mal les données autres que numérique (issus de formule quoi ^^) ca m'éviterais le collage spécial valeur !!
merci encore. A +
C'est un peu vers quoi je m'étais dirigés avec l'utilisation de formule mais je voudrais tout de même savoir si il est possible de faire la même chose par macro, n'étant pas le seul utilisateur ca me semble plus simple de détecté une erreur d'entrée de donnée par macro que par formule (comme 3valeurs dans une ligne)
Inclure un renvoie vers d'autres onglets pourrait etre sympa aussi et vu qu'au final les données vont servir dans un autre logiciel qui supporte mal les données autres que numérique (issus de formule quoi ^^) ca m'éviterais le collage spécial valeur !!
merci encore. A +
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
10 févr. 2014 à 17:57
10 févr. 2014 à 17:57
Tu peux fournir un exemple réel de données brutes à traiter ?
ça peut jouer sur les boucles For ou While
A+
ça peut jouer sur les boucles For ou While
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voila le lien des données brutes (enfin juste ouvert et réenregistré en excel, les données brutes étant un fichier texte) :
http://cjoint.com/?DBksF5joOEW
Les mêmes que précédemment sans la première ligne en fait, les "Valeur 1; Valeur 2; etc " pouvant varier jusqu'à 20 à l'heure actuelle, les nombres dans les colonnes "Valeur" pouvant varié entre 87 et 339 actuellement mais jamais dans la même série de donnée ... dans une même série il faut compter maximum 80 de décalage entre la valeur la plus faible et celle la plus élevée ... Enfin en terme de nombre de ligne je varie entre 11 (j'ai pris l'exemple le plus condensé) et 581 (la encore pour l'instant)
J'espère avoir été clair dans les variations possibles du fichier si besoin je suis dispo pendant encore une grosse heure sinon plutot demain.
Merci !!
http://cjoint.com/?DBksF5joOEW
Les mêmes que précédemment sans la première ligne en fait, les "Valeur 1; Valeur 2; etc " pouvant varier jusqu'à 20 à l'heure actuelle, les nombres dans les colonnes "Valeur" pouvant varié entre 87 et 339 actuellement mais jamais dans la même série de donnée ... dans une même série il faut compter maximum 80 de décalage entre la valeur la plus faible et celle la plus élevée ... Enfin en terme de nombre de ligne je varie entre 11 (j'ai pris l'exemple le plus condensé) et 581 (la encore pour l'instant)
J'espère avoir été clair dans les variations possibles du fichier si besoin je suis dispo pendant encore une grosse heure sinon plutot demain.
Merci !!
ccm81
Messages postés
10904
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2024
2 428
10 févr. 2014 à 19:12
10 févr. 2014 à 19:12
Bonjour à tous
Une proposition
https://www.cjoint.com/?3Bktml4JpsW
Cdlmnt
Une proposition
https://www.cjoint.com/?3Bktml4JpsW
Cdlmnt
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
11 févr. 2014 à 09:34
11 févr. 2014 à 09:34
Bonjour à tous,
ccm81, c'est très joli !
Sieg, est-ce suffisant ou faut-il encore les 0-1-2 ?
A+
ccm81, c'est très joli !
Sieg, est-ce suffisant ou faut-il encore les 0-1-2 ?
A+
Bonjour à tous,
Désolé pour ce décalage entre vos réponses et les miennes mais surtout un grand merci pour cette macro qui fait très exactement ce que j'attends d'elle !!! Oui la conversion des données en 0 1 2 est toujours d'actualité si ce n'est pas trop demander ^^ !!
J'apprécie le détail de chaque partie de la macro ca va me permettre de m'y plonger et peut-etre d'en apprendre un peu plus sur le sujet !!
Encore une fois un grand merci et si l'idée vous vient pour la conversion je suis preneur bien évidemment !!
A +
Désolé pour ce décalage entre vos réponses et les miennes mais surtout un grand merci pour cette macro qui fait très exactement ce que j'attends d'elle !!! Oui la conversion des données en 0 1 2 est toujours d'actualité si ce n'est pas trop demander ^^ !!
J'apprécie le détail de chaque partie de la macro ca va me permettre de m'y plonger et peut-etre d'en apprendre un peu plus sur le sujet !!
Encore une fois un grand merci et si l'idée vous vient pour la conversion je suis preneur bien évidemment !!
A +
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
11 févr. 2014 à 12:23
11 févr. 2014 à 12:23
ccm81
Messages postés
10904
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2024
2 428
Modifié par ccm81 le 11/02/2014 à 14:06
Modifié par ccm81 le 11/02/2014 à 14:06
Bonjour
Merci à Zoul67 d'avoir pris le relai
Pour remplacer les cellules vides (feuille FR3 des 0-1-2) par des zéros, tu ajoutes juste avant le end final de la procedure OK
Bon après midi
Merci à Zoul67 d'avoir pris le relai
Pour remplacer les cellules vides (feuille FR3 des 0-1-2) par des zéros, tu ajoutes juste avant le end final de la procedure OK
' mettre des 0 dans cellules vides Set plagev = Sheets(FR2).Cells(lidebval, codebval).Resize(nbli, nbv) For Each c In plagev If c.Value = "" Then c.Value = 0 Next c
Bon après midi
Merci bien,
J'étais parti sur quelque chose du genre mais plutôt avec ce type de présentation :
Set plagev = Sheets(FR2).Range(PV1)
For Each c In plagev
If c.Value = "" Then
c.Value = 0
Next c
En redéfinissant PV1 en tant que constante au tout début (option explicit), problème je comprend pas du tout comment définir une constante de la même maniere que celle-ci :
Const PV = "plageval"
Enfin plus exactement j'ai pas compris comment tu renvois :
plageval =DECALER(Données!$B$3;0;0;MAX(Données!$A:$A);NBVAL(Données!$2:$2))
pour définir la constante PV ...
Merci de m'éclairer car ca m'intrigue fortement ^^ !!!
En tout cas tout marche comme je le voulais donc un grand merci à vous deux !!!
J'étais parti sur quelque chose du genre mais plutôt avec ce type de présentation :
Set plagev = Sheets(FR2).Range(PV1)
For Each c In plagev
If c.Value = "" Then
c.Value = 0
Next c
En redéfinissant PV1 en tant que constante au tout début (option explicit), problème je comprend pas du tout comment définir une constante de la même maniere que celle-ci :
Const PV = "plageval"
Enfin plus exactement j'ai pas compris comment tu renvois :
plageval =DECALER(Données!$B$3;0;0;MAX(Données!$A:$A);NBVAL(Données!$2:$2))
pour définir la constante PV ...
Merci de m'éclairer car ca m'intrigue fortement ^^ !!!
En tout cas tout marche comme je le voulais donc un grand merci à vous deux !!!
ccm81
Messages postés
10904
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 décembre 2024
2 428
11 févr. 2014 à 15:33
11 févr. 2014 à 15:33
1. plageval est le nom de la plage-matrice dans la feuille Données, cette plage est définie de façon dynamique par DECALER(Données!$B$3;0;0;MAX(Données!$A:$A);NBVAL(Données!$2:$2))
Est ce cette définition qui te pose un problème?
2. l'instruction Const PV = "plageval"
attribue à la constante PV la chaine de caractère "plageval" (et non la plage elle même), j'ai mis PV pour avoir un identificateur parlant et peu encombrant
c'est l'instruction Set plagev = Sheets(FD).Range(PV) qui attribue la plage de nom PV de la feuille FD à la variable (de type range) plagev
Ces constantes sont utilisées pour éviter de toucher au code de la procédure si les noms attribués dans la feuille changent, il suffira alors de modifier les valeurs de ces constantes en début de module. En plus étant déclarées en dehors de toute procédure elles seront utilisables dans tout le module (ou dans tout le classeur si on les fait précéder de la directive Public)
Si je ne suis pas clair, tu dis
Cdlmnt
Est ce cette définition qui te pose un problème?
2. l'instruction Const PV = "plageval"
attribue à la constante PV la chaine de caractère "plageval" (et non la plage elle même), j'ai mis PV pour avoir un identificateur parlant et peu encombrant
c'est l'instruction Set plagev = Sheets(FD).Range(PV) qui attribue la plage de nom PV de la feuille FD à la variable (de type range) plagev
Ces constantes sont utilisées pour éviter de toucher au code de la procédure si les noms attribués dans la feuille changent, il suffira alors de modifier les valeurs de ces constantes en début de module. En plus étant déclarées en dehors de toute procédure elles seront utilisables dans tout le module (ou dans tout le classeur si on les fait précéder de la directive Public)
Si je ne suis pas clair, tu dis
Cdlmnt
Non non c'est parfaitement clair !!!
Je ne connaissais pas du tout cette fonctionnalité de excel de définir pour un nom donné une "fonction", c'est trèsssssssssss interessant et ca va m'aider pour pas mal d'autres projets !!!
Et effectivement si je définis :
plageval1 par =DECALER('FR2'!$B$3;0;0;MAX('FR2'!$A:$A);NBVAL('FR2'!$2:$2)) puis que je remplace le dernier bout de code :
Set plagev = Sheets(FR2).Cells(lidebval, codebval).Resize(nbli, nbv)
For Each c In plagev
If c.Value = "" Then c.Value = 0
Next c
par :
Set plagev = Sheets(FR2).Range(PV1)
For Each c In plagev
If c.Value = "" Then c.Value = 0
Next c
en définissant : Const PV1 = "plageval1"
Alors ca fonctionne !!!
Bref au final tout fonctionne comme je le souhaite, j'ai appris pas mal de truc donc c'est une bonne journée ^^
Encore merci à vous deux !!!
Je laisse encore un peu en non résolu si vous avez des dernières remarques (je crois qu'en résolution il n'est plus possible d'intervenir)
Je ne connaissais pas du tout cette fonctionnalité de excel de définir pour un nom donné une "fonction", c'est trèsssssssssss interessant et ca va m'aider pour pas mal d'autres projets !!!
Et effectivement si je définis :
plageval1 par =DECALER('FR2'!$B$3;0;0;MAX('FR2'!$A:$A);NBVAL('FR2'!$2:$2)) puis que je remplace le dernier bout de code :
Set plagev = Sheets(FR2).Cells(lidebval, codebval).Resize(nbli, nbv)
For Each c In plagev
If c.Value = "" Then c.Value = 0
Next c
par :
Set plagev = Sheets(FR2).Range(PV1)
For Each c In plagev
If c.Value = "" Then c.Value = 0
Next c
en définissant : Const PV1 = "plageval1"
Alors ca fonctionne !!!
Bref au final tout fonctionne comme je le souhaite, j'ai appris pas mal de truc donc c'est une bonne journée ^^
Encore merci à vous deux !!!
Je laisse encore un peu en non résolu si vous avez des dernières remarques (je crois qu'en résolution il n'est plus possible d'intervenir)