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

Extraction de lignes filtrées

13 réponses
Avatar
f4crw
Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les informations
de chaque membre sur une autre feuille qui est une fiche de membre, sur
cette fiche je dispose d'un bouton suivant et d'un précédent qui me
permettent de passer d'un membre à un autre en passant à la ligne suivante
de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Un exemple de code (les données sont sur la feuille BDD en colonne A et
B) :

Private Sub CommandButton1_Click()
Dim Plage As Range, c As Range
With Sheets("BDD")
Set Plage = .[_filterdatabase].Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, _
1).SpecialCells(xlCellTypeVisible)
Ctr = Ctr + 1
[B4] = Application.Index(.[A:A], Ctr)
[B7] = Application.Index(.[B:B], Ctr)
End With
End Sub


Daniel

Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les informations de
chaque membre sur une autre feuille qui est une fiche de membre, sur cette
fiche je dispose d'un bouton suivant et d'un précédent qui me permettent de
passer d'un membre à un autre en passant à la ligne suivante de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis


Avatar
Daniel.C
Oublie ça.
Désolé
Daniel

Bonjour.
Un exemple de code (les données sont sur la feuille BDD en colonne A et B) :

Private Sub CommandButton1_Click()
Dim Plage As Range, c As Range
With Sheets("BDD")
Set Plage = .[_filterdatabase].Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, _
1).SpecialCells(xlCellTypeVisible)
Ctr = Ctr + 1
[B4] = Application.Index(.[A:A], Ctr)
[B7] = Application.Index(.[B:B], Ctr)
End With
End Sub


Daniel

Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les informations
de chaque membre sur une autre feuille qui est une fiche de membre, sur
cette fiche je dispose d'un bouton suivant et d'un précédent qui me
permettent de passer d'un membre à un autre en passant à la ligne suivante
de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis




Avatar
Daniel.C
Plutôt ce code, à adapter :
Dans un module standard :

Public Ctr As Integer, Ligne As Integer

La macro :

Private Sub CommandButton1_Click()
Dim Plage As Range, c As Range
With Sheets("BDD")
Set Plage = .[_filterdatabase].Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, _
1).SpecialCells(xlCellTypeVisible)
Ctr = Ctr + 1
For Each c In Plage
If c.Row > Ligne Then
[B4] = c.Value
[B7] = c.Offset(, 1).Value
Ligne = c.Row
Exit For
End If
Next c
End With
End Sub

Daniel


Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les informations de
chaque membre sur une autre feuille qui est une fiche de membre, sur cette
fiche je dispose d'un bouton suivant et d'un précédent qui me permettent de
passer d'un membre à un autre en passant à la ligne suivante de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis


Avatar
Daniel.C
Ajout :
Il faut initialiser les variables CTr et Ligne dans une macro
évènementielle comme Worksheet_Activate.
Daniel

Plutôt ce code, à adapter :
Dans un module standard :

Public Ctr As Integer, Ligne As Integer

La macro :

Private Sub CommandButton1_Click()
Dim Plage As Range, c As Range
With Sheets("BDD")
Set Plage = .[_filterdatabase].Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, _
1).SpecialCells(xlCellTypeVisible)
Ctr = Ctr + 1
For Each c In Plage
If c.Row > Ligne Then
[B4] = c.Value
[B7] = c.Offset(, 1).Value
Ligne = c.Row
Exit For
End If
Next c
End With
End Sub

Daniel


Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les informations
de chaque membre sur une autre feuille qui est une fiche de membre, sur
cette fiche je dispose d'un bouton suivant et d'un précédent qui me
permettent de passer d'un membre à un autre en passant à la ligne suivante
de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis




Avatar
f4crw
Bonjour,
Merci Daniel pour tes réponses et pour le travail que tu as fait, mais je ne
suis pas un expert et je ne suis pas capable d'appliquer ton code.
Je ne me suis pas très bien expliqué dans mon précédent message.
Pour faire simple j'ai une base contenant les colonnes "nom, prénom, ville,
département", etc. (72 colonnes environ).
Actuellement ma macro se place en A3 et me copie les valeurs de chaque
cellule de cette ligne dans une autre feuille à divers emplacements pour en
faire une fiche.
Sur le clic du bouton "suivant" elle descend d'une ligne et recommence la
même opération jusqu'à ce qu'elle trouve une cellule vide en A.
Tout ceci fonctionne bien, mais quand je filtre par "ville" par
"département" ou autre elle continue comme si le filtre n'existait pas.

Le problème c'est que le filtre n'est pas toujours le même et qu'il peut y
en avoir plusieurs.
L'idéal serais de lui dire si cette ligne n'est pas visible descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est
possible

Merci encore.
Régis




"Daniel.C"
Ajout :
Il faut initialiser les variables CTr et Ligne dans une macro
évènementielle comme Worksheet_Activate.
Daniel

Plutôt ce code, à adapter :
Dans un module standard :

Public Ctr As Integer, Ligne As Integer

La macro :

Private Sub CommandButton1_Click()
Dim Plage As Range, c As Range
With Sheets("BDD")
Set Plage = .[_filterdatabase].Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, _
1).SpecialCells(xlCellTypeVisible)
Ctr = Ctr + 1
For Each c In Plage
If c.Row > Ligne Then
[B4] = c.Value
[B7] = c.Offset(, 1).Value
Ligne = c.Row
Exit For
End If
Next c
End With
End Sub

Daniel


Bonjour à toutes et à tous
J'ai créé une base de données avec Excel 2000 pour mon association, dans
cette base j'ai fait une macro qui me permet de ressortir les
informations de chaque membre sur une autre feuille qui est une fiche de
membre, sur cette fiche je dispose d'un bouton suivant et d'un précédent
qui me permettent de passer d'un membre à un autre en passant à la ligne
suivante de ma base.
La macro fonctionne très bien sauf quand cette base est filtrée avec le
filtre automatique elle continu à m'afficher toutes les fiches.
Ma question est la suivante comment n'afficher que les fiches des lignes
visibles de la base filtrée sans les recopiés dans une autre feuille ?
Merci d'avance de votre aide.
Régis








Avatar
Daniel.C
> L'idéal serais de lui dire si cette ligne n'est pas visible descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est possible



Bonjour.
C'est possible en utilisant :
c.EntireRow.Hidden = True
qui indique une ligne masquée, où "c" est une cellule de la plage
filtrée. Le problème est que tu es obligé d'examiner toutes les lignes
de ta plage et que, si celle-ci est importante, l'exécution va être
ralentie.
Sinon, poste le code de tes boutons et je le modifierai.
Daniel
Avatar
f4crw
Bonjour,
voici le code du bouton suivant

Sub suivant() 'macro du bouton
' Macro enregistrée le 02/11/2009 par Régis
Application.ScreenUpdating = False 'Fige l'écran
Sheets("Adresses").Select 'qui est la base

'quand on arrive dans la feuille "Adresses" une cellule est sélectionnée
puisqu'une fiche a déjà été crée
ActiveCell.Offset(1, 0).Range("A1").Select
'je croix que le code serait à placer ici si la ligne est visible

Call RemplirFiche1 'copie les données et les places dans la fiche

ActiveCell.Offset(1, 0).Range("A1").Select 'si la ligne n'est
pas visible
'et faire une boucle je suppose " je compte sur toi, car je ne sais pas
faire en dehors des Goto "

End Sub

Merci beaucoup
Régis



"Daniel.>> L'idéal serais de lui dire si cette ligne n'est pas visible
descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est
possible



Bonjour.
C'est possible en utilisant :
c.EntireRow.Hidden = True
qui indique une ligne masquée, où "c" est une cellule de la plage filtrée.
Le problème est que tu es obligé d'examiner toutes les lignes de ta plage
et que, si celle-ci est importante, l'exécution va être ralentie.
Sinon, poste le code de tes boutons et je le modifierai.
Daniel




Avatar
Daniel.C
Les boutons se trouvent sur quelle feuille ?
Daniel

Bonjour,
voici le code du bouton suivant

Sub suivant() 'macro du bouton
' Macro enregistrée le 02/11/2009 par Régis
Application.ScreenUpdating = False 'Fige l'écran
Sheets("Adresses").Select 'qui est la base

'quand on arrive dans la feuille "Adresses" une cellule est sélectionnée
puisqu'une fiche a déjà été crée
ActiveCell.Offset(1, 0).Range("A1").Select
'je croix que le code serait à placer ici si la ligne est visible

Call RemplirFiche1 'copie les données et les places dans la fiche

ActiveCell.Offset(1, 0).Range("A1").Select 'si la ligne n'est
pas visible
'et faire une boucle je suppose " je compte sur toi, car je ne sais pas faire
en dehors des Goto "

End Sub

Merci beaucoup
Régis



"Daniel.>> L'idéal serais de lui dire si cette ligne n'est pas visible
descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est
possible



Bonjour.
C'est possible en utilisant :
c.EntireRow.Hidden = True
qui indique une ligne masquée, où "c" est une cellule de la plage filtrée.
Le problème est que tu es obligé d'examiner toutes les lignes de ta plage
et que, si celle-ci est importante, l'exécution va être ralentie.
Sinon, poste le code de tes boutons et je le modifierai.
Daniel






Avatar
f4crw
Sur la feuille "fiche"

"Daniel.C"
Les boutons se trouvent sur quelle feuille ?
Daniel

Bonjour,
voici le code du bouton suivant

Sub suivant() 'macro du bouton
' Macro enregistrée le 02/11/2009 par Régis
Application.ScreenUpdating = False 'Fige l'écran
Sheets("Adresses").Select 'qui est la base

'quand on arrive dans la feuille "Adresses" une cellule est sélectionnée
puisqu'une fiche a déjà été crée
ActiveCell.Offset(1, 0).Range("A1").Select
'je croix que le code serait à placer ici si la ligne est visible

Call RemplirFiche1 'copie les données et les places dans la
fiche

ActiveCell.Offset(1, 0).Range("A1").Select 'si la ligne
n'est pas visible
'et faire une boucle je suppose " je compte sur toi, car je ne sais pas
faire en dehors des Goto "

End Sub

Merci beaucoup
Régis



"Daniel.>> L'idéal serais de lui dire si cette ligne n'est pas visible
descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est
possible



Bonjour.
C'est possible en utilisant :
c.EntireRow.Hidden = True
qui indique une ligne masquée, où "c" est une cellule de la plage
filtrée. Le problème est que tu es obligé d'examiner toutes les lignes
de ta plage et que, si celle-ci est importante, l'exécution va être
ralentie.
Sinon, poste le code de tes boutons et je le modifierai.
Daniel










Avatar
Daniel.C
Essaie :

Sub suivant() 'macro du bouton
' Macro enregistrée le 02/11/2009 par Régis
Application.ScreenUpdating = False 'Fige l'écran
Sheets("Adresses").Select 'qui est la base

'quand on arrive dans la feuille "Adresses" une cellule est
sélectionnée puisqu'une fiche a déjà été crée
Do Until ActiveCell.EntireRow.Hidden = False
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
'je croix que le code serait à placer ici si la ligne est visible

'Call RemplirFiche1 'copie les données et les places dans la
fiche
Var = ActiveCell
ActiveCell.Offset(1, 0).Range("A1").Select
'et faire une boucle je suppose " je compte sur toi, car je ne sais pas
faire en dehors des Goto "
End Sub

Daniel

Sur la feuille "fiche"

"Daniel.C"
Les boutons se trouvent sur quelle feuille ?
Daniel

Bonjour,
voici le code du bouton suivant

Sub suivant() 'macro du bouton
' Macro enregistrée le 02/11/2009 par Régis
Application.ScreenUpdating = False 'Fige l'écran
Sheets("Adresses").Select 'qui est la base

'quand on arrive dans la feuille "Adresses" une cellule est sélectionnée
puisqu'une fiche a déjà été crée
ActiveCell.Offset(1, 0).Range("A1").Select
'je croix que le code serait à placer ici si la ligne est visible

Call RemplirFiche1 'copie les données et les places dans la
fiche

ActiveCell.Offset(1, 0).Range("A1").Select 'si la ligne
n'est pas visible
'et faire une boucle je suppose " je compte sur toi, car je ne sais pas
faire en dehors des Goto "

End Sub

Merci beaucoup
Régis



"Daniel.>> L'idéal serais de lui dire si cette ligne n'est pas visible
descend d'une
ligne, ou si cette ligne est visible continue, mais est ce que c'est
possible



Bonjour.
C'est possible en utilisant :
c.EntireRow.Hidden = True
qui indique une ligne masquée, où "c" est une cellule de la plage
filtrée. Le problème est que tu es obligé d'examiner toutes les lignes de
ta plage et que, si celle-ci est importante, l'exécution va être
ralentie.
Sinon, poste le code de tes boutons et je le modifierai.
Daniel












1 2