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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <utilisateur@exemple.fr> a écrit dans le message de
news:4878ea3a$0$10434$426a74cc@news.free.fr...
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 ?
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
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 ? :-/
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 ? :-/
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 ? :-/
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.
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 ? :-/
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.
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 ? :-/
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.
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 ? :-/
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.
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 ? :-/
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" <utilisateur@exemple.fr> a écrit dans le message de
news:487aa618$0$11560$426a34cc@news.free.fr...
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.
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 ? :-/
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.
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 ? :-/