|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mars 2009 Messages : 21 ![]() |
Bonjour,
Pour des raisons pédagogiques, je voudrais tester la compression par ondelettes de Haar sur Excel. Je m'explique : en fait, je dispose d'un tableau de 128x128 nombres, et je veux créer un autre tableau de même taille de la manière suivante. Sur la première ligne du tableau de départ, je groupe les nombres par paire, je calcule leur somme et leur différence, et sur la première ligne du tableau d'arrivée, je veux d'abord toutes les sommes puis toutes les différences. Et ensuite, je fais la même chose sur toutes les autres lignes. Ainsi, en mettant le tableau de départ en feuille 1 et le tableau d'arrivée en feuille 2, dans la cellule A1 de la feuille 2, je veux =Feuil1!A1+Feuil1!B1, dans la cellule B1 de la feuille 2, je veux =Feuil1!C1+Feuil1!D1... etc... je veux toutes les sommes de termes deux à deux dans les 64 premières cellules de la première ligne, et ensuite les différences, donc dans la cellule BM1 de la feuille 2, je veux =Feuil1!A1-Feuil1!B1, dans la cellule BN1 =Feuil1!C1-Feuil1!D1... ainsi de suite. C'est tout bête Y a-t-il une astuce que je ne connais pas ? Je préférerai éviter les macros (mais s'il n'y a vraiment pas d'autre solution, je suis preneur). Merci d'avance. Greg |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : novembre 2006 Messages : 1 464 ![]() |
La première astuce qui me vient a l'esprit
pour ce qui concerne l'ensemmble du tableau, pas de probleme, il te suffira d'incrémenter la première ligne. la difficulté est de créer lcette première ligne, je te propose de commencer un tableau 2, non de 128 colonne, mais de 256 colonnes. tu pose en A1 puis tu incrémente sur les 128 premieres colonnes, ensuite tu pose sur les suivantes puis tu selectionne et tu effaces une colonne sur deux, ce qui ce fait en un seul Ctrl clik et ensuite seulement tu incrémentes le reste du tableau |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mars 2009 Messages : 21 ![]() |
Aaah ! L'astuce est donc d'effacer une colonne sur deux ! Merci.
Humm... et je dois sélectionner les 64 colonnes une par une avec ctrl avant d'effacer (ce qui sera long si je retente avec une image de 1024x1024, avec 512 colonnes à sélectionner) ou il y a une technique pour sélectionner d'un coup une colonne sur deux ? |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() ![]() Inscription : janvier 2011 Messages : 106 ![]() |
Bonjour,
Si j'ai bien compris, tester en A1 de feuill2: Code :
=SOMME(DECALER(Feuil1!$A$1:$B$1;;COLONNE()*2-2))
__________________
. U. Milité |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mars 2009 Messages : 21 ![]() |
Parfait !!!
Je ne connaissais pas cette fonction DECALER et c'est exactement ce dont j'avais besoin. Merci beaucoup ! |
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Enseignant Inscription : novembre 2009 Messages : 350 ![]() |
Bonjour à tous,
Essayes avec la formule (un peu longue) suivante (en Feuil2!A1) puis copiée le long du tableau... Code :
=SI(COLONNE()<=64;INDIRECT("Feuil1!"&ADRESSE(LIGNE();2*(COLONNE()-1)+1))+INDIRECT("Feuil1!"&ADRESSE(LIGNE();2*(COLONNE()-1)+2));INDIRECT("Feuil1!"&ADRESSE(LIGNE();2*(COLONNE()-1)-127))-INDIRECT("Feuil1!"&ADRESSE(LIGNE();2*(COLONNE()-1)-126))) |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Enseignant Inscription : novembre 2009 Messages : 350 ![]() |
Bonjour à tous,
Tu pourras aussi utiliser la formule suivante (mois longue que la précédente, avec en partie la formule donnée par U. Milité): Code :
=SI(COLONNE()<=64;SOMME(DECALER(Feuil1!$A$1:$B$1;;2*COLONNE()-2));SOMME(DECALER(Feuil1!$A$1;;2*COLONNE()-130);-DECALER(Feuil1!$B$1;;2*COLONNE()-130))) |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : mars 2009 Messages : 21 ![]() |
Je ne connaissais pas INDIRECT non plus
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : mars 2009 Messages : 21 ![]() |
Ca marche impec. Sur les 64 premières colonnes, j'utilise la formule :
Code :
=SOMME(DECALER(Feuil1!$A1:$B1;;COLONNE()*2-2)) Code :
=DECALER(Feuil1!$A1;;2*COLONNE()-130)-DECALER(Feuil1!$B1;;2*COLONNE()-130) Prochaine étape : la version macro ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com