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

selection de range pour une boucle

12 réponses
Avatar
hymotep
Bonjour,

dans un tableau de ce type là:
1 2 3 4 ........ 25 26 27
A 5 6 4 texte
B

je rempli les cellules de A1 à A25 (une cellule par jour)
Je souhaite que la boucle opère sur les 5 dernieres valeurs de la ligne
(A1:A25)
Pour info en A26 il y a du texte ....

je teste cette version sans succés
For Each cell In Range("a1", Range("a1").End(xlRight).Offset(1, 5))

une autre piste serait la fonction décaler et nbval (je les aime bien) mais
est ce transposable en VBA pour definir le range de la boucle ?

vous avez une idée? merci

--
"vas dont savoir quand tu sais pas" Coluche

10 réponses

1 2
Avatar
Pierre Fauconnier
Bonjour

Ta présentation de tableau est étonnante.

Excel nomme les colonnes avec des lettres et les lignes avec des chiffres.
Dès lors, ta présentation est inversée et tu demandes que la boucle opère
sur les 5 dernières colonnes de la ligne.. Pas évident de te suivre!!
Surtout que par ailleurs, tu parles de plage A1:A25, en colonne donc

Si je tiens compte de ta plage A1:A25, et que tu souhaites opérer sur les 5
dernières lignes de A1:A25, détermine directement la plage A21:A25
For each Cellule in Range("a21:A25").

Si, comme dans l'exemple de ta boucle, tu souhaites opérer sur les 5
dernières colonnes d'une ligne, tu peux utiliser ceci
For each Cellule in
range(range("iv1").end(xltoleft)(1,-3),range("iv1").end(xltoleft))

En l'absence de plus de clarté de ta part...


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"hymotep" a écrit dans le message de
news:
Bonjour,

dans un tableau de ce type là:
1 2 3 4 ........ 25 26 27
A 5 6 4 texte
B

je rempli les cellules de A1 à A25 (une cellule par jour)
Je souhaite que la boucle opère sur les 5 dernieres valeurs de la ligne
(A1:A25)
Pour info en A26 il y a du texte ....

je teste cette version sans succés
For Each cell In Range("a1", Range("a1").End(xlRight).Offset(1, 5))

une autre piste serait la fonction décaler et nbval (je les aime bien)
mais
est ce transposable en VBA pour definir le range de la boucle ?

vous avez une idée? merci

--
"vas dont savoir quand tu sais pas" Coluche


Avatar
hymotep
autant pour moi
c'est une stupide erreur de ma part ou du clavier
il s'agit bien d'un tableau excel tout a fait normal
A B C D E F ...... X Y Z AA AB
1 5 6 4 texte
2

voila l'ordre des choses est rétablit

comme expliquer précedement une celule par jour est rempli, A1 le premier
jour puis le lendemain B1 .... jusqu'a Y1.

je cherche a selectionner dans cette boucle les 5 dernieres valeurs rentrées.
donc si je suis clair la selection devra changer tous les jours

je ne comprend pas ta proposition
que signifie ("iv1")?
a quoi correspond (1,-3)?
j'ai essayé mais sans comprendre et la macro ne fonctionne pas

je me pose une autre question concernant " .end(xltoleft)" et autre
"End(xlRight)."
vu que dans la ligne 1, il y a du texte en Z1: cela influence forcement la
detection de la derniere cellule rempli, pour ma part je cherche la derniere
cellule rempli entre A1:Y1

C'est pourquoi je pensais m'en sortir en comptant le nombre de valeur entre
a1:y1 (nbval) et selectionner les 5 dernieres. range (A1+nbval-5:A1+nbval)

est ce plus clair ?
et pardon pour l'embrouille


--
"vas dont savoir quand tu sais pas" Coluche



Bonjour

Ta présentation de tableau est étonnante.

Excel nomme les colonnes avec des lettres et les lignes avec des chiffres.
Dès lors, ta présentation est inversée et tu demandes que la boucle opère
sur les 5 dernières colonnes de la ligne.. Pas évident de te suivre!!
Surtout que par ailleurs, tu parles de plage A1:A25, en colonne donc

Si je tiens compte de ta plage A1:A25, et que tu souhaites opérer sur les 5
dernières lignes de A1:A25, détermine directement la plage A21:A25
For each Cellule in Range("a21:A25").

Si, comme dans l'exemple de ta boucle, tu souhaites opérer sur les 5
dernières colonnes d'une ligne, tu peux utiliser ceci
For each Cellule in
range(range("iv1").end(xltoleft)(1,-3),range("iv1").end(xltoleft))

En l'absence de plus de clarté de ta part...


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"hymotep" a écrit dans le message de
news:
Bonjour,

dans un tableau de ce type là:
1 2 3 4 ........ 25 26 27
A 5 6 4 texte
B

je rempli les cellules de A1 à A25 (une cellule par jour)
Je souhaite que la boucle opère sur les 5 dernieres valeurs de la ligne
(A1:A25)
Pour info en A26 il y a du texte ....

je teste cette version sans succés
For Each cell In Range("a1", Range("a1").").end(xltoleft)(End(xlRight).Offset(1, 5))

une autre piste serait la fonction décaler et nbval (je les aime bien)
mais
est ce transposable en VBA pour definir le range de la boucle ?

vous avez une idée? merci

--
"vas dont savoir quand tu sais pas" Coluche







Avatar
Ange Ounis
En supposant que les 5 premières colonnes sont toujours remplies (sinon erreur
et il faut adapter) :

Sub Selectionne()
Cells(1, Cells(1, 1).End(xlToRight).Column - 4).Resize(, 5).Select
End Sub

----------
Ange Ounis
----------

autant pour moi
c'est une stupide erreur de ma part ou du clavier
il s'agit bien d'un tableau excel tout a fait normal
A B C D E F ...... X Y Z AA AB
1 5 6 4 texte
2

voila l'ordre des choses est rétablit

comme expliquer précedement une celule par jour est rempli, A1 le premier
jour puis le lendemain B1 .... jusqu'a Y1.

je cherche a selectionner dans cette boucle les 5 dernieres valeurs rentrées.
donc si je suis clair la selection devra changer tous les jours

je ne comprend pas ta proposition
que signifie ("iv1")?
a quoi correspond (1,-3)?
j'ai essayé mais sans comprendre et la macro ne fonctionne pas

je me pose une autre question concernant " .end(xltoleft)" et autre
"End(xlRight)."
vu que dans la ligne 1, il y a du texte en Z1: cela influence forcement la
detection de la derniere cellule rempli, pour ma part je cherche la derniere
cellule rempli entre A1:Y1

C'est pourquoi je pensais m'en sortir en comptant le nombre de valeur entre
a1:y1 (nbval) et selectionner les 5 dernieres. range (A1+nbval-5:A1+nbval)

est ce plus clair ?
et pardon pour l'embrouille




Avatar
hymotep
merci pour l'essai mais c'est pas encore ça!
cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.
Pour que je comprenne:

Cells(1, = on part de la ligne 1
Cells(1, 1).End(xlToRight = on cherche la premiere cellule vide
.Column - 4). = ? peut etre reculer de 4 colonne ?
Resize(, 5) = j'imagine bien, garder les 5 colonnes
.Select = selectionner

je n'est manifestement pas tout compris, si vous avez des précisions, merci



--
"vas dont savoir quand tu sais pas" Coluche



En supposant que les 5 premières colonnes sont toujours remplies (sinon erreur
et il faut adapter) :

Sub Selectionne()
Cells(1, Cells(1, 1).End(xlToRight).Column - 4).Resize(, 5).Select
End Sub

----------
Ange Ounis
----------

autant pour moi
c'est une stupide erreur de ma part ou du clavier
il s'agit bien d'un tableau excel tout a fait normal
A B C D E F ...... X Y Z AA AB
1 5 6 4 texte
2

voila l'ordre des choses est rétablit

comme expliquer précedement une celule par jour est rempli, A1 le premier
jour puis le lendemain B1 .... jusqu'a Y1.

je cherche a selectionner dans cette boucle les 5 dernieres valeurs rentrées.
donc si je suis clair la selection devra changer tous les jours

je ne comprend pas ta proposition
que signifie ("iv1")?
a quoi correspond (1,-3)?
j'ai essayé mais sans comprendre et la macro ne fonctionne pas

je me pose une autre question concernant " .end(xltoleft)" et autre
"End(xlRight)."
vu que dans la ligne 1, il y a du texte en Z1: cela influence forcement la
detection de la derniere cellule rempli, pour ma part je cherche la derniere
cellule rempli entre A1:Y1

C'est pourquoi je pensais m'en sortir en comptant le nombre de valeur entre
a1:y1 (nbval) et selectionner les 5 dernieres. range (A1+nbval-5:A1+nbval)

est ce plus clair ?
et pardon pour l'embrouille







Avatar
Pierre Fauconnier
Salut.

J'ai mieux compris

Ceci devrait fonctionner

Sub Test()
Dim Cellule As Range
Dim ColFin As Integer ' Colonne de fin
Dim ColDebut As Integer ' Colonne de début
Dim Ligne as long ' Ligne de référence

Ligne = 2 ' On démarre en ligne 2
ColFin = Range("a" & ligne).End(xlToRight).Column

' On limite à la 25ième colonne
If ColFin > 25 Then ColFin = 25

' On calcule la première colonne
If ColFin <= 5 Then ColDebut = 1 Else ColDebut = ColFin - 4

For Each Cellule In Range(Cells(Ligne, ColDebut), Cells(Ligne, ColFin))
Debug.Print Cellule.Value
Next Cellule
End Sub

Ok?
--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Les choses qui n'ont rien en commun ont en commun qu'elles n'ont rien en
commun"
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"hymotep" a écrit dans le message de
news:
merci pour l'essai mais c'est pas encore ça!
cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.
Pour que je comprenne:

Cells(1, = on part de la ligne 1
Cells(1, 1).End(xlToRight = on cherche la premiere cellule vide
.Column - 4). = ? peut etre reculer de 4 colonne ?
Resize(, 5) = j'imagine bien, garder les 5 colonnes
.Select = selectionner

je n'est manifestement pas tout compris, si vous avez des précisions,
merci



--
"vas dont savoir quand tu sais pas" Coluche



En supposant que les 5 premières colonnes sont toujours remplies (sinon
erreur
et il faut adapter) :

Sub Selectionne()
Cells(1, Cells(1, 1).End(xlToRight).Column - 4).Resize(, 5).Select
End Sub

----------
Ange Ounis
----------

autant pour moi
c'est une stupide erreur de ma part ou du clavier
il s'agit bien d'un tableau excel tout a fait normal
A B C D E F ...... X Y Z AA AB
1 5 6 4 texte
2

voila l'ordre des choses est rétablit

comme expliquer précedement une celule par jour est rempli, A1 le
premier
jour puis le lendemain B1 .... jusqu'a Y1.

je cherche a selectionner dans cette boucle les 5 dernieres valeurs
rentrées.
donc si je suis clair la selection devra changer tous les jours

je ne comprend pas ta proposition
que signifie ("iv1")?
a quoi correspond (1,-3)?
j'ai essayé mais sans comprendre et la macro ne fonctionne pas

je me pose une autre question concernant " .end(xltoleft)" et autre
"End(xlRight)."
vu que dans la ligne 1, il y a du texte en Z1: cela influence forcement
la
detection de la derniere cellule rempli, pour ma part je cherche la
derniere
cellule rempli entre A1:Y1

C'est pourquoi je pensais m'en sortir en comptant le nombre de valeur
entre
a1:y1 (nbval) et selectionner les 5 dernieres. range
(A1+nbval-5:A1+nbval)

est ce plus clair ?
et pardon pour l'embrouille









Avatar
Ange Ounis
merci pour l'essai mais c'est pas encore ça!


As-tu testé ?

cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.


Absolument pas!
En partant de A1, on va chercher la dernière cellule occupée vers la droite :

Cells(1, Cells(1, 1).End(xlToRight)

On récupère le numéro de la colonne de cette cellule et on retranche 4 pour
obtenir la colonne de la première cellule du groupe de 5 à sélectionner

.Column - 4

Enfin on redimensionne la plage à sélectionner (1 seule ligne, 5 colonnes)

.Resize(, 5).Select

En plus clair, si les cellules A1:P1 sont remplies, on trouve d'abord la
dernière cellule (P1), soit la colonne 16, on revient en arrière de 4 colonnes
(16-4 12 soit colonne L) et on sélectionne une plage de 5 cellules à partir de
L1 soit L1:P1.

----------
Ange Ounis
----------

merci pour l'essai mais c'est pas encore ça!
cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.
Pour que je comprenne:

Cells(1, = on part de la ligne 1
Cells(1, 1).End(xlToRight = on cherche la premiere cellule vide
.Column - 4). = ? peut etre reculer de 4 colonne ?
Resize(, 5) = j'imagine bien, garder les 5 colonnes
..Select = selectionner

je n'est manifestement pas tout compris, si vous avez des précisions, merci





Avatar
Ange Ounis
Attention cependant au fait qu'il ne doit pas y a avoir de "trou" dans la ligne
à examiner !

----------
Ange Ounis
----------

merci pour l'essai mais c'est pas encore ça!


As-tu testé ?

cela selectionne invariableblement d1:h1 quelque soit le nombre de
cellule

rempli entre a1 et Y1.


Absolument pas!
En partant de A1, on va chercher la dernière cellule occupée vers la
droite :

Cells(1, Cells(1, 1).End(xlToRight)

On récupère le numéro de la colonne de cette cellule et on retranche 4
pour obtenir la colonne de la première cellule du groupe de 5 à
sélectionner

..Column - 4

Enfin on redimensionne la plage à sélectionner (1 seule ligne, 5 colonnes)

..Resize(, 5).Select

En plus clair, si les cellules A1:P1 sont remplies, on trouve d'abord la
dernière cellule (P1), soit la colonne 16, on revient en arrière de 4
colonnes (16-4 12 soit colonne L) et on sélectionne une plage de 5
cellules à partir de L1 soit L1:P1.

----------
Ange Ounis
----------

merci pour l'essai mais c'est pas encore ça!
cela selectionne invariableblement d1:h1 quelque soit le nombre de
cellule rempli entre a1 et Y1.
Pour que je comprenne:

Cells(1, = on part de la ligne 1
Cells(1, 1).End(xlToRight = on cherche la premiere cellule vide
.Column - 4). = ? peut etre reculer de 4 colonne ?
Resize(, 5) = j'imagine bien, garder les 5 colonnes
..Select = selectionner

je n'est manifestement pas tout compris, si vous avez des précisions,
merci







Avatar
hymotep
merci pour vos conseils
pierre ta routine tourne a merveille, exactement ce que je cherche (t'en pis
pour decaler, je le placerai ailleur)

ange ounis oui j'ai testé, j'ai même indiqué le résultat d1:h1. si tu es
affirmatif je réessairai.

encore merci

--
"vas dont savoir quand tu sais pas" Coluche



merci pour l'essai mais c'est pas encore ça!


As-tu testé ?

cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.


Absolument pas!
En partant de A1, on va chercher la dernière cellule occupée vers la droite :

Cells(1, Cells(1, 1).End(xlToRight)

On récupère le numéro de la colonne de cette cellule et on retranche 4 pour
obtenir la colonne de la première cellule du groupe de 5 à sélectionner

..Column - 4

Enfin on redimensionne la plage à sélectionner (1 seule ligne, 5 colonnes)

..Resize(, 5).Select

En plus clair, si les cellules A1:P1 sont remplies, on trouve d'abord la
dernière cellule (P1), soit la colonne 16, on revient en arrière de 4 colonnes
(16-4 12 soit colonne L) et on sélectionne une plage de 5 cellules à partir de
L1 soit L1:P1.

----------
Ange Ounis
----------

merci pour l'essai mais c'est pas encore ça!
cela selectionne invariableblement d1:h1 quelque soit le nombre de cellule
rempli entre a1 et Y1.
Pour que je comprenne:

Cells(1, = on part de la ligne 1
Cells(1, 1).End(xlToRight = on cherche la premiere cellule vide
.Column - 4). = ? peut etre reculer de 4 colonne ?
Resize(, 5) = j'imagine bien, garder les 5 colonnes
..Select = selectionner

je n'est manifestement pas tout compris, si vous avez des précisions, merci








Avatar
Ange Ounis
ange ounis oui j'ai testé, j'ai même indiqué le résultat d1:h1. si tu es
affirmatif je réessairai.


Je le suis !
Ceci dit, si tu as une solution qui te convient, c'est l'essentiel.

----------
Ange Ounis
----------

merci pour vos conseils
pierre ta routine tourne a merveille, exactement ce que je cherche (t'en pis
pour decaler, je le placerai ailleur)

ange ounis oui j'ai testé, j'ai même indiqué le résultat d1:h1. si tu es
affirmatif je réessairai.

encore merci



Avatar
hymotep
oui Ange j'ai re-testé, cela fonctionne pour sur une feuille test avec une
ligne.
Dans mon application, la ligne a tester est par exemple la ligne 20 et je
n'arrive pas a transposé ta solution

cela ne fonctionne pas et c'est normal je n'avait pas compris le 2° cell
Cells(20, Cells(1, 1).End(xlToRight).Column - 4).Resize(20, 5).Select

mais cela non plus, pourquoi?
Cells(20, Cells(20, 1).End(xlToRight).Column - 4).Resize(, 5).Select

cela non plus
Cells(20, Cells(20, 1).End(xlToRight).Column - 4).Resize(20, 5).Select

de plus comme tu l'as déja signalé cela ne fonctionne pas pour moins de 5
cellules remplies.

tu as une idée ?
--
"vas dont savoir quand tu sais pas" Coluche


"Ange Ounis" wrote:

ange ounis oui j'ai testé, j'ai même indiqué le résultat d1:h1. si tu es
affirmatif je réessairai.


Je le suis !
Ceci dit, si tu as une solution qui te convient, c'est l'essentiel.

----------
Ange Ounis
----------

merci pour vos conseils
pierre ta routine tourne a merveille, exactement ce que je cherche (t'en pis
pour decaler, je le placerai ailleur)

ange ounis oui j'ai testé, j'ai même indiqué le résultat d1:h1. si tu es
affirmatif je réessairai.

encore merci






1 2