Selection dans lignes filtrées

4 réponses
Avatar
Alf
Bonjour =C3=A0 tous,

Mon probl=C3=A8me:
J'ai un classeur avec beaucoup de lignes et de colonnes de donn=C3=A9es.
Je filtre certaines lignes.
A la souris, je s=C3=A9lectionne, sur une colonne (seulement) quelconque et=
de mani=C3=A8re contigu=C3=AB, des cellules sur plusieurs lignes (s=C3=A9l=
ection verticale donc).

Je voudrais pouvoir r=C3=A9cup=C3=A9rer le contenu des cellules en surbrill=
ance s=C3=A9lectionn=C3=A9es, pour les copier ailleurs.

C'est un peu compliqu=C3=A9 pour moi...
Merci pour votre aide
Alf

4 réponses

Avatar
JièL
Hello,
vielle version d'Excel ?
Les récentes font la sélection des cellules visibles seulement.
Une fois les cellules (de la colonne) sélectionnées, F5, Cellules,
Cellules visibles seulement, OK
y'a plus qu'a copier
--
JièL Sel et xion
Le 02/12/2017 à 10:21, Alf a écrit :
Bonjour à tous,
Mon problème:
J'ai un classeur avec beaucoup de lignes et de colonnes de données.
Je filtre certaines lignes.
A la souris, je sélectionne, sur une colonne (seulement) quelconque et de manière contiguë, des cellules sur plusieurs lignes (sélection verticale donc).
Je voudrais pouvoir récupérer le contenu des cellules en surbrillance sélectionnées, pour les copier ailleurs.
C'est un peu compliqué pour moi...
Merci pour votre aide
Alf
Avatar
Michd
Bonjour,
Un exemple de code : Cette procédure copie toutes les cellules visibles
seulement de la plage de cellules A1:Ax de la feuil1 vers la plage de
cellules D1:Dx de la feuil2. À toi d'adapter le nom des feuilles et de la
plage à copier et la destination de la copie
La copie comprend le format de la plage de cellules + leurs valeurs.
'------------------------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Rows)
.SpecialCells(xlCellTypeVisible).Copy
Worksheets("Feuil2").Range("D1")
End With
End With
End Sub
'------------------------------------------------
Pour ne copier que le contenu des cellules vers la plage de destination :
'------------------------------------------------
Sub test()
Dim T As Variant
With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Rows)
t = .SpecialCells(xlCellTypeVisible)
End With
End With
With Worksheets("Feuil2")
.Range("D1").Resize(UBound(t, 1), UBound(t, 2)) = t
End With
End Sub
'------------------------------------------------
MichD
Avatar
Michd
Mais ce que je voudrais c'est uniquement le contenu des cellules visibles
que j'ai sélectionnées (mise en surbrillance d'une plage parmi les cellules
visibles)...
Plus ardu non...!
***** En supposant que tu as fait la sélection manuelle et que tu veuilles
copier seulement les cellules visibles de cette sélection, tu peux utiliser
ceci :
Dans le bout de code suivant, l'objet "Selection" est un terme générique qui
peut désigner n'importe quel objet dans la feuille active (celle affichée à
l'écran dans le classeur). Ce peut être une plage de cellules, un graphe, un
checkbox, un bout de commande, etc. il s'agit de faire un petit test au
début de la procédure afin d'effectuer la copie seulement si le type d'objet
que représente "Selection" est de type "range".
'-----------------------------------------
Sub test()
With Worksheets("Feuil1")
If TypeName(Selection) = "Range" Then
Selection.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Feuil1").Range("H1")
End If
End With
End Sub
'-----------------------------------------
MichD
Avatar
Michd
Je crois avoir trouvé
'-------------------
dim c as range
dim Cont as string
For Each c In Selection.SpecialCells(xlCellTypeVisible)
Cont=c.value
Next c
'--------------------
Cela te semble correct MichD ?
***** Cette boucle est possible. Cependant, la variable "Cont" va prendre la
valeur de chacune des cellules à tour de rôle et tu n'auras à la fin, qu'une
seule valeur dans la "Cont" qui sera égale à la dernière cellule de la
plage. Est-ce bien utile?
MichD