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

Dimension d'une plage définie par refedit

4 réponses
Avatar
Sylian
Bonjour à tous !

J'ai écris plusieurs petites macros sans prétention dont le corps est du
style :



' Il commence à la 4ème ligne (i) jusqu'à la 19721ème

For i = 4 To 19721

' j est le numéro de la première colonne à traiter (ici la D)

j = 4
markdown = -2
markup = 2

'Il teste les colonnes j une à une. j=4 donc de la 4ème colonne à la
21ème (<22) soit 18 colonnes en tout
'fl1 est ma première feuille et fl2 est ma feuille destination

Do
If (fl1.Cells(i, j) < markdown) Or (fl1.Cells(i, j) > markup) Then
j = j + 1
If j = 22 Then
fl1.Cells(i, 1).EntireRow.Copy fl2.Cells(Nvligne, 1)
Nvligne = Nvligne + 1
End If

Else
Exit Do
End If
Loop

Next



A présent j'aimerai que ce code soit modulable. J'aimerai choisir ma
plage de données grâce à un "refedit" (issue d'un useform que j'aurai
créé) puis en fonction de cette plage, remplacer les valeurs de i, de
19721, de j et de 22 (qui sont fixe ici).
Comment trouver ces valeurs une fois ma plage sélectionnée ?

Merci beaucoup de votre aide.

Sylian

4 réponses

Avatar
Philippe.R
Bonsoir,
Le numéro de la 1ère colonne de ta sélection (variable j) sera renvoyée par
Selection.Column
Le nombre de colonnes de ladite sélection par Selection.Columns.Count
De même la variable i sera renseignée par Selection.Row
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Sylian" a écrit dans le message de
news:4878ea3a$0$10434$
Bonjour à tous !

J'ai écris plusieurs petites macros sans prétention dont le corps est du
style :



' Il commence à la 4ème ligne (i) jusqu'à la 19721ème

For i = 4 To 19721

' j est le numéro de la première colonne à traiter (ici la D)

j = 4
markdown = -2
markup = 2

'Il teste les colonnes j une à une. j=4 donc de la 4ème colonne à la 21ème
(<22) soit 18 colonnes en tout
'fl1 est ma première feuille et fl2 est ma feuille destination

Do
If (fl1.Cells(i, j) < markdown) Or (fl1.Cells(i, j) > markup) Then
j = j + 1
If j = 22 Then
fl1.Cells(i, 1).EntireRow.Copy fl2.Cells(Nvligne, 1)
Nvligne = Nvligne + 1
End If

Else
Exit Do
End If
Loop

Next



A présent j'aimerai que ce code soit modulable. J'aimerai choisir ma plage
de données grâce à un "refedit" (issue d'un useform que j'aurai créé) puis
en fonction de cette plage, remplacer les valeurs de i, de 19721, de j et
de 22 (qui sont fixe ici).
Comment trouver ces valeurs une fois ma plage sélectionnée ?

Merci beaucoup de votre aide.

Sylian


Avatar
Sylian
Philippe.R a écrit :
Bonsoir,
Le numéro de la 1ère colonne de ta sélection (variable j) sera renvoyée
par Selection.Column
Le nombre de colonnes de ladite sélection par Selection.Columns.Count
De même la variable i sera renseignée par Selection.Row




Merci pour l'aide.
J'ai appliqué un refedit dans mon useform puis j'ai transformé la
routine par :
------------------------------------------------------------------

'i correspond à chacune de mes lignes de ma plage sélectionnée du refedit.

For i = Selection.Row To Selection.Rows.Count

j = Selection.Column
markdown = -2
markup = 2

'Il teste les colonnes j comprise dans la selection du refedit, une à une

Do While j < Selection.Columns.Count
If (fl1.Cells(i, j) < markdown) Or (fl1.Cells(i, j) > markup) Then
fl1.Cells(i, 1).EntireRow.Copy fl2.Cells(Nvligne, 1)
Nvligne = Nvligne + 1
j = Selection.Columns.Count + 1

Else

j = j + 1
End If
Loop

Next
------------------------------------------------------------------

Si la routine fonctionne à merveille avec des vraies valeurs. Ca ne fait
strictement rien en appliquant ce nouveau vocabulaire. Où me suis-je
encore trompé dans mon script ? :-/
Avatar
Sylian
Il est 3h du mat. t à force de recherche j'ai trouvé tout seul !
Alors pour ceux que ça intéresse sachez qu'il faut remplacer toutes les
"Selection" par "Range(RefEdit1.Value)" et le tour est joué !

Par contre il a fallut tout de même changer deux ou trois paramètres
afin que ça coïncide. Par exemple pour aller de la 1ère ligne de la
plage sélectionnée (Range(RefEdit1.Value).Row) à la dernière de la
plage. il faut écrire :

For i = Range(RefEdit1.Value).Row To (Range(RefEdit1.Value).Row +
Range(RefEdit1.Value).Rows.Count -1)

Car le count renseigne la longueur relative de la plage tandis que le
.Row indique le numéro de ligne exact.

Je l'ignorais jusqu'à cette heure. Un grand merci à Philippe R pour le
vocabulaire et le coup de pouce.

Bonne nuit à tous !

Sylian

-----------------------------------------------------------------------


Sylian a écrit :
Philippe.R a écrit :
Bonsoir,
Le numéro de la 1ère colonne de ta sélection (variable j) sera
renvoyée par Selection.Column
Le nombre de colonnes de ladite sélection par Selection.Columns.Count
De même la variable i sera renseignée par Selection.Row




Merci pour l'aide.
J'ai appliqué un refedit dans mon useform puis j'ai transformé la
routine par :
------------------------------------------------------------------

'i correspond à chacune de mes lignes de ma plage sélectionnée du refedit.

For i = Selection.Row To Selection.Rows.Count

j = Selection.Column
markdown = -2
markup = 2

'Il teste les colonnes j comprise dans la selection du refedit, une à une

Do While j < Selection.Columns.Count
If (fl1.Cells(i, j) < markdown) Or (fl1.Cells(i, j) > markup) Then
fl1.Cells(i, 1).EntireRow.Copy fl2.Cells(Nvligne, 1)
Nvligne = Nvligne + 1
j = Selection.Columns.Count + 1

Else

j = j + 1
End If
Loop

Next
------------------------------------------------------------------

Si la routine fonctionne à merveille avec des vraies valeurs. Ca ne fait
strictement rien en appliquant ce nouveau vocabulaire. Où me suis-je
encore trompé dans mon script ? :-/


Avatar
Philippe.R
Merci du retour
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Sylian" a écrit dans le message de
news:487aa618$0$11560$
Il est 3h du mat. t à force de recherche j'ai trouvé tout seul !
Alors pour ceux que ça intéresse sachez qu'il faut remplacer toutes les
"Selection" par "Range(RefEdit1.Value)" et le tour est joué !

Par contre il a fallut tout de même changer deux ou trois paramètres afin
que ça coïncide. Par exemple pour aller de la 1ère ligne de la plage
sélectionnée (Range(RefEdit1.Value).Row) à la dernière de la plage. il
faut écrire :

For i = Range(RefEdit1.Value).Row To (Range(RefEdit1.Value).Row +
Range(RefEdit1.Value).Rows.Count -1)

Car le count renseigne la longueur relative de la plage tandis que le .Row
indique le numéro de ligne exact.

Je l'ignorais jusqu'à cette heure. Un grand merci à Philippe R pour le
vocabulaire et le coup de pouce.

Bonne nuit à tous !

Sylian

-----------------------------------------------------------------------


Sylian a écrit :
Philippe.R a écrit :
Bonsoir,
Le numéro de la 1ère colonne de ta sélection (variable j) sera renvoyée
par Selection.Column
Le nombre de colonnes de ladite sélection par Selection.Columns.Count
De même la variable i sera renseignée par Selection.Row




Merci pour l'aide.
J'ai appliqué un refedit dans mon useform puis j'ai transformé la routine
par :
------------------------------------------------------------------

'i correspond à chacune de mes lignes de ma plage sélectionnée du
refedit.

For i = Selection.Row To Selection.Rows.Count

j = Selection.Column
markdown = -2
markup = 2

'Il teste les colonnes j comprise dans la selection du refedit, une à une

Do While j < Selection.Columns.Count
If (fl1.Cells(i, j) < markdown) Or (fl1.Cells(i, j) > markup) Then
fl1.Cells(i, 1).EntireRow.Copy fl2.Cells(Nvligne, 1)
Nvligne = Nvligne + 1
j = Selection.Columns.Count + 1

Else

j = j + 1
End If
Loop

Next
------------------------------------------------------------------

Si la routine fonctionne à merveille avec des vraies valeurs. Ca ne fait
strictement rien en appliquant ce nouveau vocabulaire. Où me suis-je
encore trompé dans mon script ? :-/