Dimension d'une plage définie par refedit

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe.R
Le #16156601
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" 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) 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


Sylian
Le #16317881
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) 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 ? :-/
Sylian
Le #16319451
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) 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 ? :-/


Philippe.R
Le #16324541
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" 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) 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 ? :-/




Publicité
Poster une réponse
Anonyme