filtre de données : adresse ligne de début et adresse ligne de fin

Le
JP
Bonjour,

De retour pour une nouvelle question.
J'ai un filtre appliqué en colonne C.
Je voudrais avec une boucle récupérer des noms qui se trouvent en colon=
ne A.
Il existe peut être un moyen simple de le faire mais je pensais le faire =
avec une boucle toute simple genre For Next
Pour cela, il faut que je connaisse le numéro de ligne du début et le n=
uméro de ligne de fin pour établir la boucle.

Comment puis-je faire?
Cette solution ou une autre

Merci

JP
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #24989102
Bonjour,

Sub test()
Dim Plage As Range, C As Range
Set Plage = Intersect(ActiveSheet.AutoFilter.Range,
[C:C]).Offset(1, -2)
Set Plage = Plage.Resize(Plage.Rows.Count - 1)
If Application.Subtotal(103, Plage) > 0 Then
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
End If
For Each C In Plage
MsgBox C.Value
Next C
End Sub

Cordialement.
Daniel


Bonjour,

De retour pour une nouvelle question.
J'ai un filtre appliqué en colonne C.
Je voudrais avec une boucle récupérer des noms qui se trouvent en colonne A.
Il existe peut être un moyen simple de le faire mais je pensais le faire avec
une boucle toute simple genre For ... Next Pour cela, il faut que je
connaisse le numéro de ligne du début et le numéro de ligne de fin pour
établir la boucle.

Comment puis-je faire?
Cette solution ou une autre...

Merci

JP
Jacky
Le #24989092
Bonjour,
Ceci retourne l'adresse de la plage des cellules visibles en colonne C
Adapter le nom de la feuille

MsgBox Worksheets("feuil1").Range("C1:C" & Cells(Rows.Count,
3).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Address
--
Salutations
JJ


"JP"
Bonjour,

De retour pour une nouvelle question.
J'ai un filtre appliqué en colonne C.
Je voudrais avec une boucle récupérer des noms qui se trouvent en colonne A.
Il existe peut être un moyen simple de le faire mais je pensais le faire avec une boucle toute simple genre
For ... Next
Pour cela, il faut que je connaisse le numéro de ligne du début et le numéro de ligne de fin pour établir la
boucle.

Comment puis-je faire?
Cette solution ou une autre...

Merci

JP
JP
Le #24989112
Bonjour Daniel,

Super efficace, je ne comprends pas tout mais je vais essayer de détaille r tout cela.

Merci

JP
JP
Le #24989122
Jacky,

Super aussi, ainsi je peux mettre une boucle for ... Next en place.
Vous êtes des oufs du VBA vous deux. Je vais vous filer mon projet pour l e terminer. hihi.

Merci encore à vous deux

JP
JP
Le #24989172
Super Jacky, je n'avais pas vu ta réponse.
Cette ligne donne effectivement les coordonnées.
Vous êtes des oufs du VBA vous deux. Je vais vous filer le projet pour qu e vous vous amusiez.
Je suis en train de retravailler la proposition de Daniel.
Ca va moins vite car il faut que je récupère le prénom colonne B et q ue je concatène le tout pour mettre dans les labels.


JP
JP
Le #24989362
Daniel, je reviens vers toi car je ne parviens pas à modifier la macro qu e tu as faite tout à l'heure.
Je voudrais faire apparaitre le prénom à coté du nom dans les labels.
Ci dessous ce que j'ai bidouillé mais qui ne fonctionne pas!

Merci
jp


' hauteur de l'userform4
ht = Sheets("suivi conventions").Cells(1, 8).Value 'récupère la valeu r calculée par sous.total(3;A2:A1000)en A8
ht = (ht * 15.81) + 94
UserForm4.Height = ht
' récupérer les noms et prenom sur une plage filtrée
Dim nom As Range, C As Range
Sheets("suivi conventions").Select
Set nom = Intersect(ActiveSheet.AutoFilter.Range, [C:C]).Offset(1, -2 )
' Set prenom = Intersect(ActiveSheet.AutoFilter.Range, [C:C]).Offset(1 , -1)
' Set nom_prenom = nom & " " & prenom 'renvoie une erreur
Set nom = nom.Resize(nom.Rows.Count - 1)
If Application.Subtotal(103, nom) > 0 Then
Set nom = nom.SpecialCells(xlCellTypeVisible)
End If
' Efface le contenu des labels noms de élèves de la classe
For efface = 1 To 32
Me.Controls("Label" & efface) = ""
Next efface
L = 1
For Each C In nom
Me.Controls("Label" & L) = C.Value
' MsgBox C.Value
L = L + 1
Next C
Jacquouille
Le #24990952
Bonsoir
Une idée toute simple:
Après avoir appliqué le filtre en colonne C, si tu faisais un copier-coller
de ce qui reste de la colonne A ?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"JP" a écrit dans le message de groupe de discussion :


Bonjour,

De retour pour une nouvelle question.
J'ai un filtre appliqué en colonne C.
Je voudrais avec une boucle récupérer des noms qui se trouvent en colonne A.
Il existe peut être un moyen simple de le faire mais je pensais le faire
avec une boucle toute simple genre For ... Next
Pour cela, il faut que je connaisse le numéro de ligne du début et le numéro
de ligne de fin pour établir la boucle.

Comment puis-je faire?
Cette solution ou une autre...

Merci

JP
DanielCo
Le #24990022
Oui. Ils sont où les labels, sur une feuille ou un userform ? Est-ce
qu'ils sont déjà créés ou faut-il les créer dynamiquement ?
Daniel


Daniel, je reviens vers toi car je ne parviens pas à modifier la macro que tu
as faite tout à l'heure. Je voudrais faire apparaitre le prénom à coté du nom
dans les labels. Ci dessous ce que j'ai bidouillé mais qui ne fonctionne pas!

Merci
jp


' hauteur de l'userform4
ht = Sheets("suivi conventions").Cells(1, 8).Value 'récupère la valeur
calculée par sous.total(3;A2:A1000)en A8 ht = (ht * 15.81) + 94
UserForm4.Height = ht
' récupérer les noms et prenom sur une plage filtrée
Dim nom As Range, C As Range
Sheets("suivi conventions").Select
Set nom = Intersect(ActiveSheet.AutoFilter.Range, [C:C]).Offset(1, -2)
' Set prenom = Intersect(ActiveSheet.AutoFilter.Range, [C:C]).Offset(1,
-1) ' Set nom_prenom = nom & " " & prenom 'renvoie une erreur
Set nom = nom.Resize(nom.Rows.Count - 1)
If Application.Subtotal(103, nom) > 0 Then
Set nom = nom.SpecialCells(xlCellTypeVisible)
End If
' Efface le contenu des labels noms de élèves de la classe
For efface = 1 To 32
Me.Controls("Label" & efface) = ""
Next efface
L = 1
For Each C In nom
Me.Controls("Label" & L) = C.Value
' MsgBox C.Value
L = L + 1
Next C
JP
Le #24990112
Ils sont dans l'userform4 et ils sont créés.

JP
DanielCo
Le #24990772
J'ai mis un bouton dans le userform pour provoquer la copie. Vooici les
macros que j'ai ajoutés :

Private Sub CommandButton1_Click()
Dim Plage As Range, C As Range, Res As Integer
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.Label Then Ctrl.Caption = ""
Next Ctrl
Set Plage = Intersect(ActiveSheet.AutoFilter.Range,
[C:C]).Offset(1, -2)
Set Plage = Plage.Resize(Plage.Rows.Count - 1)
If Application.Subtotal(103, Plage) > 0 Then
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
End If
Res = 0
For Each C In Plage
For i = Res To Me.Controls.Count - 1
If TypeOf Me.Controls(Res) Is MSForms.Label Then
Set Var = Me.Controls(0)
Me.Controls(Res).Caption = C.Value
Exit For
End If
Next i
Res = Res + 1
Next C
End Sub


Private Sub UserForm_Activate()
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.Label Then Ctrl.Caption = ""
Next Ctrl
End Sub

Le classeur modèle se trouve à l'adresse :

http://cjoint.com/?BKzlDRI2aTX

S'il y a des points obscurs dans le code n'hésite pas à demander des
explications.
Daniel


Ils sont dans l'userform4 et ils sont créés.

JP
Publicité
Poster une réponse
Anonyme