Bonsoir,

D'une façon ou d'une autre il y a un maximum : le nombre de lignes (1 048 576) et de colonnes (1 024) d'une feuille

le principe de Decaler avec Nbval permet de prévoir toute une ligne (avec ses 1 024 colonnes) ou toute une colonne Nbval déterminant au fur et à mesure l'étendue occupée.

La formule serait, dans ce cas

RECHERCHEH(C$20;DECALER($voies.$A$1;0;0;6;NBVAL($voies.$1:$1));2;0)
Le passage $1:$1 dans le Nbval signifiant que l'on compte sur l'ensemble de la 
ligne 1 (de la colonne A à la colonne AMJ)

à travail égal, une formule bien construite sera toujours plus rapide à donner 
un résultat (et à taper) qu'une macro.
Sans avoir exploré la totalité du classeur, il me semble que l'ensemble des 
calculs et mises à jours devrait pouvoir se faire sans macro.

Au passage la formule
RECHERCHEH(C$20;$voies.$A$1:$ZZ$6;2;0)
ne fait pas la même chose que
RECHERCHEH(C$20;DECALER($voies.$A$1;0;0;6;NBVAL($voies.$A$1:$ZZ$1));2;0)

La 1ere fait ses recherches toujours jusqu'à la colonne ZZ, même si les 
colonnes sont vides
la seconde fait ses recherches en fonction de la zone occupée (Nbval détermine 
le nombre de colonnes occupées). c'est pour ça que l'on peut se permettre de 
mettre des choses comme 1:1, ce n'est pas l'étendue du tableau de recherche, 
c'est juste le comptage des colonnes occupées

En espérant avoir été utile

Christian F

Le 13/04/2019 à 20:17, Bernard Siaud alias Troumad a écrit :
Le 11/04/2019 à 22:44, C Fourcroy a écrit :
Bonsoir,

Fondamentalement, un traitement par une fonction du tableur va
toujours beaucoup plus vite qu'un traitement par une macro en Basic
car elles sont programmées dans un langage beaucoup plus efficace et
proche du langage machine. Mettre à jour une trentaine de zones
nommées ne dépassera pas une fraction de seconde. Comparé à la macro
de mise à jour de la liste que j'avais proposé il y a quelque temps il
y a un facteur 100 à 1000 en faveur de l'utilisation de la fonction.
Ceci étant, créer/modifier des zones nommées peut être long et
fastidieux surtout quand on n'en a pas l'habitude. Il faut voir si
l'investissement en temps en vaut la peine.

Christian F
Voici un exemple pour remplacer une zone :
DECALER($voies.$A$1;0;0;6;NBVAL($voies.$A$1:$ZZ$1))

Mais, c'est dans cette expression :
RECHERCHEH(C$20;DECALER($voies.$A$1;0;0;6;NBVAL($voies.$A$1:$ZZ$1));2;0)

Ne serait-il alors pas plus efficace d'écrire :
RECHERCHEH(C$20;$voies.$A$1:$ZZ$6;2;0)

Et dans ce cas, si par hasard, on passe plus loin que ZZ... Le programme
ne marchera plus ! Il faudrait que je mette quoi alors ? C'est vraiment
pour ça que je me demande si une macro qui ne prend en compte aucun
maximum possible n'est pas une bonne idée finalement !



--
Envoyez un mail à [email protected] pour vous désinscrire
Les archives de la liste sont disponibles à 
https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Répondre à