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

Plage de cellules variable

7 réponses
Avatar
campasc
Bonjour,

Pour une macro, j'ai besoin de définir un plage de cellules variable.
Ce que j'entends par variable :

On commence par exemple par définir la plage de cellules initiale entre B1 et B20.
Selon certain critères, on en vient à comparer la valeur de A5 à celle de B2(par exemple).
Si la valeur de A5 est > à la valeur de B2, on élimine la cellule B2 de la plage de cellules (on ne la supprime pas car elle sert à calculer d'autres cellules sur la feuille).
Et ainsi de suite...

Merci pour votre aide.

CampaSC

7 réponses

Avatar
LSteph
Sub defmaplg()
dim maplg as range, c as range
For each c in [B2:B21].cells
If isempty(maplg) then



On Jul 26, 12:39 am, campasc wrote:
Bonjour,

Pour une macro, j'ai besoin de d finir un plage de cellules variable.
Ce que j'entends par variable :

On commence par exemple par d finir la plage de cellules initiale entre B 1 et
B20.
Selon certain crit res, on en vient comparer la valeur de A5 celle de
B2(par exemple).
Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de la
plage de cellules (on ne la supprime pas car elle sert calculer d'autres
cellules sur la feuille).
Et ainsi de suite...

Merci pour votre aide.

CampaSC
Avatar
LSteph
..oupss si ca part avant qu'on ait fini, m'apprendra à écrire à la
volée,
bon exemple avec b2:b21 (on laisse b1 pour le titre) et compare avec
toujours a5 comme dans ton exemple
et tout cela selon ce que j'ai pu comprendre, donc on commence pas par
autre chose on la définit direct selon ces critères

Sub defmaplage()
Dim maplg As Range, c As Range
For Each c In [B2:B21].Cells
If c.Value < [A5] Then
If maplg Is Nothing Then
Set maplg = Range(c.Address)
Else
Set maplg = Union(maplg, Range(c.Address))
End If
End If
Next
maplg.Activate
Names.Add Name:="maplage", RefersTo:="=" & maplg.Address
End Sub

'LSteph

On Jul 26, 10:39 am, LSteph wrote:
Sub defmaplg()
dim maplg as range, c as range
For each c in [B2:B21].cells
If isempty(maplg)  then

On Jul 26, 12:39 am, campasc wrote:







> Bonjour,

> Pour une macro, j'ai besoin de d finir un plage de cellules variable.
> Ce que j'entends par variable :

> On commence par exemple par d finir la plage de cellules initiale entre B1 et
> B20.
> Selon certain crit res, on en vient comparer la valeur de A5 celle de
> B2(par exemple).
> Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de la
> plage de cellules (on ne la supprime pas car elle sert calculer d'autre s
> cellules sur la feuille).
> Et ainsi de suite...

> Merci pour votre aide.

> CampaSC
Avatar
LSteph
..autre possibilité si on veut que la plage soit redéfinie lorsqu'on
entre une valeur (et en plus on colore pour y voir)

'dans le codeModule de la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect As Range
Set iSect = Intersect(Target, [b2:b21])
Application.EnableEvents = False
If Not iSect Is Nothing Then Call defmaplage
Application.EnableEvents = True
[maplage].Cells.Interior.ColorIndex = 40
End Sub

'dans un module standard

Sub defmaplage()
Dim maplg As Range, c As Range
[b2:b21].Cells.Interior.ColorIndex = xlNone
For Each c In [b2:b21].Cells
If c.Value < [A5] Then
If maplg Is Nothing Then
Set maplg = Range(c.Address)
Else
Set maplg = Union(maplg, Range(c.Address))
End If
End If
Next

Names.Add Name:="maplage", RefersTo:="=" & maplg.Address
Set maplg = Nothing

End Sub

'LSteph


On Jul 26, 12:39 am, campasc wrote:
Bonjour,

Pour une macro, j'ai besoin de d finir un plage de cellules variable.
Ce que j'entends par variable :

On commence par exemple par d finir la plage de cellules initiale entre B 1 et
B20.
Selon certain crit res, on en vient comparer la valeur de A5 celle de
B2(par exemple).
Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de la
plage de cellules (on ne la supprime pas car elle sert calculer d'autres
cellules sur la feuille).
Et ainsi de suite...

Merci pour votre aide.

CampaSC
Avatar
campasc
LSteph a écrit le 26/07/2011 à 11h26 :
..autre possibilité si on veut que la plage soit redéfinie
lorsqu'on
entre une valeur (et en plus on colore pour y voir)

'dans le codeModule de la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect As Range
Set iSect = Intersect(Target, [b2:b21])
Application.EnableEvents = False
If Not iSect Is Nothing Then Call defmaplage
Application.EnableEvents = True
[maplage].Cells.Interior.ColorIndex = 40
End Sub

'dans un module standard

Sub defmaplage()
Dim maplg As Range, c As Range
[b2:b21].Cells.Interior.ColorIndex = xlNone
For Each c In [b2:b21].Cells
If c.Value < [A5] Then
If maplg Is Nothing Then
Set maplg = Range(c.Address)
Else
Set maplg = Union(maplg, Range(c.Address))
End If
End If
Next

Names.Add Name:="maplage", RefersTo:="=" &
maplg.Address
Set maplg = Nothing

End Sub

'LSteph


On Jul 26, 12:39 am, campasc wrote:
Bonjour,

Pour une macro, j'ai besoin de d finir un plage de cellules variable.
Ce que j'entends par variable :

On commence par exemple par d finir la plage de cellules initiale entre B 1 et
B20.
Selon certain crit res, on en vient comparer la valeur de A5 celle de
B2(par exemple).
Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de la
plage de cellules (on ne la supprime pas car elle sert calculer d'autres
cellules sur la feuille).
Et ainsi de suite...

Merci pour votre aide.

CampaSC




par exemple toute la colonne B de la ligne 2 à N)
Ensuite faire une boucle de i=2 jusqu'à N qui :
Va chercher la plus petite des valeurs dans plage de recherche, par exemple cellule (j,"B")

Si la valeur de la cellule (i,"A") est > à la valeur de la cellule (j,"B"), alors la valeur de la cellule (i,"C") prend la valeur de la cellule (j,"C") ET la cellule (j,"B") est éliminée de la plage de recherche. C'est à dire qu'au i suivant, elle ne sera pas prise en compte lors de la recherche de la plus petite des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.


J'espère avoir été plus clair :D
Merci par avance

CampaSC
Avatar
LSteph
Il m'avais semblé que tu cherchais à définir une plage de cellule.
C'est ce que fait le code proposé , selon la cellule A5 comme indiqué.
Je ne sais pas si tu l'as testé

Maintenant tu parles de valeur qui deviennent plus petite et de
recherche de petite valeur, Il existe des fonctions pour petite.valeur
et grande.valeur
cette fois en jonglant avec une 3 ème colonne C.. Cela n'a plus rien à
voir.
J'esp re avoir t plus clair :D Non c'est pire! Déjà que le premier était un peu dur à déchiffrer.



Donc là tu nous dit le comment tu essayerais de faire on ne sait
finalement pas quoi..
au lieu du à quoi il faudrait arriver et à partir de quoi.

Peux - être devrais tu mettre ton classeur en http:www.cjoint.com

et expliquer ce que tu veux obtenir.

Cordialement.

--
LSteph




On Jul 26, 1:45 pm, campasc wrote:
LSteph a crit le 26/07/2011 11h26 :







> ..autre possibilit si on veut que la plage soit red finie
> lorsqu'on
> entre une valeur (et en plus on colore pour y voir)

> 'dans le codeModule de la feuille concern e

> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim iSect As Range
> Set iSect = Intersect(Target, [b2:b21])
> Application.EnableEvents = False
> If Not iSect Is Nothing Then Call defmaplage
> Application.EnableEvents = True
> [maplage].Cells.Interior.ColorIndex = 40
> End Sub

> 'dans un module standard

> Sub defmaplage()
> Dim maplg As Range, c As Range
> [b2:b21].Cells.Interior.ColorIndex = xlNone
> For Each c In [b2:b21].Cells
> If c.Value < [A5] Then
> If maplg Is Nothing Then
> Set maplg = Range(c.Address)
> Else
> Set maplg = Union(maplg, Range(c.Address))
> End If
> End If
> Next

> Names.Add Name:="maplage", RefersTo:="=" &
> maplg.Address
> Set maplg = Nothing

> End Sub

> 'LSteph

> On Jul 26, 12:39 am, campasc  wrote:
>> Bonjour,

>> Pour une macro, j'ai besoin de d finir un plage de cellules variable.
>> Ce que j'entends par variable :

>> On commence par exemple par d finir la plage de cellules initiale entr e B 1
et
>> B20.
>> Selon certain crit res, on en vient comparer la valeur de A5 celle de
>> B2(par exemple).
>> Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de l a
>> plage de cellules (on ne la supprime pas car elle sert calculer d'autr es
>> cellules sur la feuille).
>> Et ainsi de suite...

>> Merci pour votre aide.

>> CampaSC

par exemple toute la colonne B de la ligne 2 N)
Ensuite faire une boucle de i=2 jusqu' N qui :
Va chercher la plus petite des valeurs dans plage de recherche, par exemp le
cellule (j,"B")

Si la valeur de la cellule (i,"A") est > la valeur de la cellule (j,"B"),
alors la valeur de la cellule (i,"C") prend la valeur de la cellule (j,"C ") ET
la cellule (j,"B") est limin e de la plage de recherche. C'est dire qu'au i
suivant, elle ne sera pas prise en compte lors de la recherche de la plus petite
des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.

J'esp re avoir t plus clair :D
Merci par avance

CampaSC
Avatar
Péhemme
Bonjour Stéphane,

1°) de curieuse façon, dans ce fil, je ne reçois que tes réponses ;
2°) ayant testé ta macro, qui fonctionne parfaitement bien, il faut (me
semble-t-il) simplement inverser ton signe de comparaison :
écrire : If c.Value > [A5] Then
au lieu de : If c.Value < [A5] Then
Bien amicalement
Michel



"LSteph" a écrit dans le message de
news:
Il m'avais semblé que tu cherchais à définir une plage de cellule.
C'est ce que fait le code proposé , selon la cellule A5 comme indiqué.
Je ne sais pas si tu l'as testé

Maintenant tu parles de valeur qui deviennent plus petite et de
recherche de petite valeur, Il existe des fonctions pour petite.valeur
et grande.valeur
cette fois en jonglant avec une 3 ème colonne C.. Cela n'a plus rien à
voir.
J'esp re avoir t plus clair :D Non c'est pire! Déjà que le premier était
un peu dur à déchiffrer.



Donc là tu nous dit le comment tu essayerais de faire on ne sait
finalement pas quoi..
au lieu du à quoi il faudrait arriver et à partir de quoi.

Peux - être devrais tu mettre ton classeur en http:www.cjoint.com

et expliquer ce que tu veux obtenir.

Cordialement.

--
LSteph




On Jul 26, 1:45 pm, campasc wrote:
LSteph a crit le 26/07/2011 11h26 :







> ..autre possibilit si on veut que la plage soit red finie
> lorsqu'on
> entre une valeur (et en plus on colore pour y voir)

> 'dans le codeModule de la feuille concern e

> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim iSect As Range
> Set iSect = Intersect(Target, [b2:b21])
> Application.EnableEvents = False
> If Not iSect Is Nothing Then Call defmaplage
> Application.EnableEvents = True
> [maplage].Cells.Interior.ColorIndex = 40
> End Sub

> 'dans un module standard

> Sub defmaplage()
> Dim maplg As Range, c As Range
> [b2:b21].Cells.Interior.ColorIndex = xlNone
> For Each c In [b2:b21].Cells
> If c.Value < [A5] Then
> If maplg Is Nothing Then
> Set maplg = Range(c.Address)
> Else
> Set maplg = Union(maplg, Range(c.Address))
> End If
> End If
> Next

> Names.Add Name:="maplage", RefersTo:="=" &
> maplg.Address
> Set maplg = Nothing

> End Sub

> 'LSteph

> On Jul 26, 12:39 am, campasc wrote:
>> Bonjour,

>> Pour une macro, j'ai besoin de d finir un plage de cellules variable.
>> Ce que j'entends par variable :

>> On commence par exemple par d finir la plage de cellules initiale entre
>> B 1
et
>> B20.
>> Selon certain crit res, on en vient comparer la valeur de A5 celle de
>> B2(par exemple).
>> Si la valeur de A5 est > la valeur de B2, on limine la cellule B2 de la
>> plage de cellules (on ne la supprime pas car elle sert calculer
>> d'autres
>> cellules sur la feuille).
>> Et ainsi de suite...

>> Merci pour votre aide.

>> CampaSC

par exemple toute la colonne B de la ligne 2 N)
Ensuite faire une boucle de i=2 jusqu' N qui :
Va chercher la plus petite des valeurs dans plage de recherche, par
exemple
cellule (j,"B")

Si la valeur de la cellule (i,"A") est > la valeur de la cellule (j,"B"),
alors la valeur de la cellule (i,"C") prend la valeur de la cellule
(j,"C") ET
la cellule (j,"B") est limin e de la plage de recherche. C'est dire qu'au
i
suivant, elle ne sera pas prise en compte lors de la recherche de la plus
petite
des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.

J'esp re avoir t plus clair :D
Merci par avance

CampaSC
Avatar
campasc
LSteph a écrit le 26/07/2011 à 14h20 :
Il m'avais semblé que tu cherchais à définir une plage de
cellule.
C'est ce que fait le code proposé , selon la cellule A5 comme
indiqué.
Je ne sais pas si tu l'as testé

Maintenant tu parles de valeur qui deviennent plus petite et de
recherche de petite valeur, Il existe des fonctions pour petite.valeur
et grande.valeur
cette fois en jonglant avec une 3 ème colonne C.. Cela n'a plus rien
à
voir.
J'esp re avoir t plus clair :D Non c'est pire! Déjà que le
premier était un peu dur à déchiffrer.




Donc là tu nous dit le comment tu essayerais de faire on ne sait
finalement pas quoi..
au lieu du à quoi il faudrait arriver et à partir de quoi.

Peux - être devrais tu mettre ton classeur en http:www.cjoint.com

et expliquer ce que tu veux obtenir.

Cordialement.

--
LSteph




On Jul 26, 1:45 pm, campasc wrote:
LSteph a crit le 26/07/2011 11h26 :







> ..autre possibilit si on veut que la plage soit red finie
> lorsqu'on
> entre une valeur (et en plus on colore pour y voir)

> 'dans le codeModule de la feuille concern e

> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim iSect As Range
> Set iSect = Intersect(Target, [b2:b21])
> Application.EnableEvents = False
> If Not iSect Is Nothing Then Call defmaplage
> Application.EnableEvents = True
> [maplage].Cells.Interior.ColorIndex = 40
> End Sub

> 'dans un module standard

> Sub defmaplage()
> Dim maplg As Range, c As Range
> [b2:b21].Cells.Interior.ColorIndex = xlNone
> For Each c In [b2:b21].Cells
> If c.Value < [A5] Then
> If maplg Is Nothing Then
> Set maplg = Range(c.Address)
> Else
> Set maplg = Union(maplg, Range(c.Address))
> End If
> End If
> Next

> Names.Add Name:="maplage", RefersTo:="=" &
> maplg.Address
> Set maplg = Nothing

> End Sub

> 'LSteph

> On Jul 26, 12:39 am, campasc  wrote:
>> Bonjour,

>> Pour une macro, j'ai besoin de d finir un plage de cellules variable.
>> Ce que j'entends par variable :

>> On commence par exemple par d finir la plage de cellules initiale
entr e B 1
et
>> B20.
>> Selon certain crit res, on en vient comparer la valeur de A5 celle de
>> B2(par exemple).
>> Si la valeur de A5 est > la valeur de B2, on limine la cellule B2
de l a
>> plage de cellules (on ne la supprime pas car elle sert calculer
d'autr es
>> cellules sur la feuille).
>> Et ainsi de suite...

>> Merci pour votre aide.

>> CampaSC

par exemple toute la colonne B de la ligne 2 N)
Ensuite faire une boucle de i=2 jusqu' N qui :
Va chercher la plus petite des valeurs dans plage de recherche, par exemp le
cellule (j,"B")

Si la valeur de la cellule (i,"A") est > la valeur de la cellule
(j,"B"),
alors la valeur de la cellule (i,"C") prend la valeur de la cellule
(j,"C ") ET
la cellule (j,"B") est limin e de la plage de recherche. C'est dire
qu'au i
suivant, elle ne sera pas prise en compte lors de la recherche de la plus
petite
des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule
(i-1,"C") + 1.

J'esp re avoir t plus clair :D
Merci par avance

CampaSC




Re-Bonjour LSteph, apparemment mon message de ce jour ne t'est pas parvenu en entier...Le début a été coupé...bizarrement !
Je le reposte ici en espérant que cette fois-ci ça marchera mieux :

" Bonjour LSteph et merci pour tes réponses.
Cependant, j'ai écrit mon premier message hier au soir, et voulant ne pas rentrer dans les détails pour simplifier les choses....je t'ai aiguillé sur la mauvaise voie !

Alors, pour reprendre plus en détail :

J'ai 3 colonnes A, B et C
Ligne 1 les titres
Ligne 2 à N(N variable définie au début de ma macro) :
-Colonne A, des temps en seconde.
-Colonne B, des temps en seconde, qui sont initialement rangés par ordre croissant, MAIS quand la macro travaille ils ne sont plus rangés de la sorte.
-Colonne C, des entiers positifs

Ce que je voudrais faire, c'est définir un plage de cellule qui serait ma plage de recherche initiale ( toute la colonne B de la ligne 2 à N)

Ensuite faire une boucle de i=2 jusqu'à N qui :
Va chercher la plus petite des valeurs des cellules comprises dans la plage de recherche ET entre cellule(2,"B") et cellule (i,-1,"B")(Intersection), par exemple cellule (j,"B")

Si la valeur de la cellule (i,"A") est > à la valeur de la cellule (j,"B"), alors la valeur de la cellule (i,"C") prend la valeur de la cellule (j,"C") ET la cellule (j,"B") est éliminée de la plage de recherche. C'est à dire qu'au i suivant, elle ne sera pas prise en compte lors de la recherche de la plus petite des valeurs.

Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.


J'espère avoir été plus clair :D
Merci par avance"

CampaSC