Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

maximum d'une colonne dans un tableau dynamique

9 réponses
Avatar
fetnat
Bonjour,

Dans un tableau dynamique de 30 lignes par 3 colonnes :

Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre iMaxecart = Application.Max(tabtlr(..., 3))

iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
tabtlr(i, 1) = Cells(i + 11, 6) ' col 1 : le prix
tabtlr(i, 2) = Range("R1") * i + Range("S1") ' col 2 : Y
tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) ' col 3 : l'écart
Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE

Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?

Merci pour l'aide

fetnat

9 réponses

Avatar
MichDenis
Pour obtenir la valeur maximale d'un champ dans un tableau croisé dynamique :

PivotTables(1) : tu peux remplacer l'index 1 par le nom de ton TCD
il en va de même pour PivotItems(1) -> l'index que tu peux remplacer
par le nom du champ


With Feuil1 ' Nom de la feuille à adapter
With .PivotTables(1).DataPivotField.PivotItems(1)
Msgbox Application.Max(.DataRange)
End With
End With




"fetnat" a écrit dans le message de news:
u44U0%
Bonjour,

Dans un tableau dynamique de 30 lignes par 3 colonnes :

Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre iMaxecart = Application.Max(tabtlr(..., 3))

iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
tabtlr(i, 1) = Cells(i + 11, 6) ' col 1 : le prix
tabtlr(i, 2) = Range("R1") * i + Range("S1") ' col 2 : Y
tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) ' col 3 : l'écart
Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE

Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?

Merci pour l'aide

fetnat
Avatar
fetnat
Bonjour MichDenis,

Je n'arrive pas à adapter ce que vous me dites dans un array (30,3).
iMaxecart = Application.Max(tabtlr()) me retourne la plus grande valeur
de l'array, toutes colonnes confondues.
Comment obtenir le max de la colonne N°3 en conservant les trois colonnes ?

Toutefois je pourrais contourner par un redim preserve pour garder la
troisième colonne, et faire un max. Mais je n'arrive pas à
redimensionner vers une seule colonne...

ReDim Preserve tabtlr(1 To iPt) erreur 9 hors selection
iMaxecart = Application.Max(tabtlr())

Merci pour votre aide

fetnat

Pour obtenir la valeur maximale d'un champ dans un tableau croisé dynamique :

PivotTables(1) : tu peux remplacer l'index 1 par le nom de ton TCD
il en va de même pour PivotItems(1) -> l'index que tu peux remplacer
par le nom du champ


With Feuil1 ' Nom de la feuille à adapter
With .PivotTables(1).DataPivotField.PivotItems(1)
Msgbox Application.Max(.DataRange)
End With
End With




"fetnat" a écrit dans le message de news:
u44U0%
Bonjour,

Dans un tableau dynamique de 30 lignes par 3 colonnes :

Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre iMaxecart = Application.Max(tabtlr(..., 3))

iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
tabtlr(i, 1) = Cells(i + 11, 6) ' col 1 : le prix
tabtlr(i, 2) = Range("R1") * i + Range("S1") ' col 2 : Y
tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) ' col 3 : l'écart
Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE

Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?

Merci pour l'aide

fetnat




Avatar
JB
Bonjour,

a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
x = Application.Max(Application.Index(a, 2)) ' max de la 2 ligne
y = Application.Max(Application.Index(a, , 2)) ' max de la 2
colonne

JB


On 5 mar, 13:51, fetnat wrote:
Bonjour,

Dans un tableau dynamique de 30 lignes par 3 colonnes :

Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre     iMaxecart = Application.Max(tabtlr(..., 3))

iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
     tabtlr(i, 1) = Cells(i + 11, 6)   '   col 1 : le prix
     tabtlr(i, 2) = Range("R1") * i + Range("S1")  '   col 2 : Y
     tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) '   col 3 : l'écart
     Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE

Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?

Merci pour l'aide

fetnat


Avatar
JB
a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
b = Application.Index(a, 2) ' tableau à 1
dimension
MsgBox b(1)
c = Application.Index(a, , 2)
MsgBox c(1, 1)

JB



On 5 mar, 14:51, JB wrote:
Bonjour,

  a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}")     ' tableau à 2
dimensions
  x = Application.Max(Application.Index(a, 2))   ' max de la 2 ligne
  y = Application.Max(Application.Index(a, , 2))  ' max de la 2
colonne

JB

On 5 mar, 13:51, fetnat wrote:



Bonjour,

Dans un tableau dynamique de 30 lignes par 3 colonnes :

Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) da ns
un tableau dynamique ?
par un truc du genre     iMaxecart = Application.Max(tabtlr(..., 3 ))

iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
     tabtlr(i, 1) = Cells(i + 11, 6)   '   col 1 : le prix
     tabtlr(i, 2) = Range("R1") * i + Range("S1")  '   col 2 : Y
     tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) '   col 3 : l'écart
     Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE

Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?

Merci pour l'aide

fetnat- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
fetnat
Bonjour JB,

Il y a des choses qui ne s'invente pas ... Merci pour votre aide.

Votre premier exemple me laisse admiratif et il fonctionne bien.

Le deuxième exemple me laisse songeur.

J'essaye d'extrapoler pour mettre mon array tabtlr() dans l'evaluate
a = Evaluate(tabtlr())
Il me retourne le maxi qui se trouve en colonne 1.

les parenthèse il n'aime pas : a = Evaluate({tabtlr()}) erreur de compil

Comment faire un evaluate d'un array defini par un nom et déjà rempli ?
Je pourrais alors utiliser application.index

Cordialement

fetnat

a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
b = Application.Index(a, 2) ' tableau à 1
dimension
MsgBox b(1)
c = Application.Index(a, , 2)
MsgBox c(1, 1)

JB



On 5 mar, 14:51, JB wrote:
Bonjour,

a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
x = Application.Max(Application.Index(a, 2)) ' max de la 2 ligne
y = Application.Max(Application.Index(a, , 2)) ' max de la 2
colonne

JB

On 5 mar, 13:51, fetnat wrote:



Bonjour,
Dans un tableau dynamique de 30 lignes par 3 colonnes :
Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre iMaxecart = Application.Max(tabtlr(..., 3))
iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
tabtlr(i, 1) = Cells(i + 11, 6) ' col 1 : le prix
tabtlr(i, 2) = Range("R1") * i + Range("S1") ' col 2 : Y
tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) ' col 3 : l'écart
Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE
Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?
Merci pour l'aide
fetnat- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -







Avatar
JB
Sur cet exemple, Evaluate est utilisé seulement pour alimenter un
tableau a(,).

iMaxecart = Application.Max(Application.Index(tabtlr, ,3)) pour
obtenir le Max de la 3e colonne du tableau.

http://boisgontierjacques.free.fr/pages_site/tableaux.htm

JB

On 5 mar, 15:37, fetnat wrote:
Bonjour JB,

Il y a des choses qui ne s'invente pas ... Merci pour votre aide.

Votre premier exemple me laisse admiratif et il fonctionne bien.

Le deuxième exemple me laisse songeur.

J'essaye d'extrapoler pour mettre mon array tabtlr() dans l'evaluate
a = Evaluate(tabtlr())
Il me retourne le maxi qui se trouve en colonne 1.

les parenthèse il n'aime pas : a = Evaluate({tabtlr()}) erreur de comp il

Comment faire un evaluate d'un array defini par un nom et déjà rempli ?
Je pourrais alors utiliser application.index

Cordialement

fetnat




  a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}")   ' tableau à 2
dimensions
  b = Application.Index(a, 2)                           ' tableau à 1
dimension
  MsgBox b(1)
  c = Application.Index(a, , 2)
  MsgBox c(1, 1)

JB

On 5 mar, 14:51, JB wrote:
Bonjour,

  a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}")     ' tableau à 2
dimensions
  x = Application.Max(Application.Index(a, 2))   ' max de la 2 li gne
  y = Application.Max(Application.Index(a, , 2))  ' max de la 2
colonne

JB

On 5 mar, 13:51, fetnat wrote:

Bonjour,
Dans un tableau dynamique de 30 lignes par 3 colonnes :
Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre     iMaxecart = Application.Max(tabtlr(..., 3))
iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
     tabtlr(i, 1) = Cells(i + 11, 6)   '   col 1 : le prix
     tabtlr(i, 2) = Range("R1") * i + Range("S1")  '   col 2 : Y
     tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) '   col 3 : l'écart
     Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE
Ou bien dois-je faire une comparaison à chaque boucle pour voir si l a
valeur est supérieure aux précédentes et la stocker en cas de ma xi ?
Merci pour l'aide
fetnat- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -




- Afficher le texte des messages précédents -





Avatar
fetnat
Génial, c'est exactement ce que je souhaitais.

et la référence du site passe dans les favoris. Je me lance dans les
arrays, c'est décidé... :)

Bonne journée et encore merci

fetnat

Sur cet exemple, Evaluate est utilisé seulement pour alimenter un
tableau a(,).

iMaxecart = Application.Max(Application.Index(tabtlr, ,3)) pour
obtenir le Max de la 3e colonne du tableau.

http://boisgontierjacques.free.fr/pages_site/tableaux.htm

JB

On 5 mar, 15:37, fetnat wrote:
Bonjour JB,

Il y a des choses qui ne s'invente pas ... Merci pour votre aide.

Votre premier exemple me laisse admiratif et il fonctionne bien.

Le deuxième exemple me laisse songeur.

J'essaye d'extrapoler pour mettre mon array tabtlr() dans l'evaluate
a = Evaluate(tabtlr())
Il me retourne le maxi qui se trouve en colonne 1.

les parenthèse il n'aime pas : a = Evaluate({tabtlr()}) erreur de compil

Comment faire un evaluate d'un array defini par un nom et déjà rempli ?
Je pourrais alors utiliser application.index

Cordialement

fetnat




a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
b = Application.Index(a, 2) ' tableau à 1
dimension
MsgBox b(1)
c = Application.Index(a, , 2)
MsgBox c(1, 1)
JB
On 5 mar, 14:51, JB wrote:
Bonjour,
a = Evaluate("{1,2,3;4,5,6;7,8,9;10,11,12}") ' tableau à 2
dimensions
x = Application.Max(Application.Index(a, 2)) ' max de la 2 ligne
y = Application.Max(Application.Index(a, , 2)) ' max de la 2
colonne
JB
On 5 mar, 13:51, fetnat wrote:
Bonjour,
Dans un tableau dynamique de 30 lignes par 3 colonnes :
Puis-je obtenir le maximum d'une colonne (ici la troisième colonne) dans
un tableau dynamique ?
par un truc du genre iMaxecart = Application.Max(tabtlr(..., 3))
iPt = 30
ReDim tabtlr(1 To iPt, 1 To 3)
For i = LBound(tabtlr) To UBound(tabtlr)
tabtlr(i, 1) = Cells(i + 11, 6) ' col 1 : le prix
tabtlr(i, 2) = Range("R1") * i + Range("S1") ' col 2 : Y
tabtlr(i, 3) = Abs(tabtlr(i, 1) - tabtlr(i, 2)) ' col 3 : l'écart
Debug.Print 1; tabtlr(i, 1); tabtlr(i, 2); tabtlr(i, 3)
Next i
iMaxecart = Application.Max(tabtlr(..., 3)) 'LIGNE DOUTEUSE
Ou bien dois-je faire une comparaison à chaque boucle pour voir si la
valeur est supérieure aux précédentes et la stocker en cas de maxi ?
Merci pour l'aide
fetnat- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -










Avatar
MichDenis
J'ai lu trop vite, je pensais que tu faisais référence
à un tableau croisé dynamique par cette phrase :

| Dans un tableau dynamique de 30 lignes par 3 colonnes
Avatar
fetnat
Pas de soucis, JB a résolu le mystère à la perfection.

Merci et bonne journée

fetnat

J'ai lu trop vite, je pensais que tu faisais référence
à un tableau croisé dynamique par cette phrase :

| Dans un tableau dynamique de 30 lignes par 3 colonnes