Coller Cellule dans colonne filtrée

Orcrist08

XLDnaute Nouveau
Bonjour,

j'ai un fichier sur lequel j'ai deux feuilles.
Feuille 1 où j'ai des valeurs
Feuille 2 où j'ai plusieurs colonnes avec des données.

Je souhaite sur ma Feuille 2 faire un filtre sur mes colonnes et choisir dans la colonne "classe" la valeur "A"
Une fois mes lignes sélectionnées je souhaite coller mes valeurs en face de ces mêmes lignes.

Mon souci est qu'excel colle les valeurs en prenant compte des lignes cachées.

Existe-t-il moyen de coller uniquement sur les lignes visibles ?

J'ai déjà essayé avec F5 et "cellules visibles uniquement" mais sans succès.

Merci pour votre aide
 

Pièces jointes

  • essai.xlsx
    8.5 KB · Affichages: 24
  • essai.xlsx
    8.5 KB · Affichages: 35
  • essai.xlsx
    8.5 KB · Affichages: 42

job75

XLDnaute Barbatruc
Re : Coller Cellule dans colonne filtrée

Bonsoir Orcrist08, bienvenue sur XLD,

Placez cette macro dans le code de Feuil2 (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Valeur" Then Exit Sub 'adapter l'en-tête
Dim n&, c As Range
Cancel = True
Application.ScreenUpdating = False
Target(2).Resize(Rows.Count - Target.Row).ClearContents 'RAZ
n = 2
'Feuil1 est le CodeName de la feuille
For Each c In Feuil1.Range("A2", Feuil1.Cells(Rows.Count, 1).End(xlUp)(2))
  While Target(n).EntireRow.Hidden
    Target(n) = ""
    n = n + 1
  Wend
  Target(n) = c
  n = n + 1
Next
End Sub
Fichier joint.

Edit : ajouté Target(n) = "" car la RAZ n'efface pas les cellules masquées.

Bonne nuit.
 

Pièces jointes

  • essai(1).xlsm
    18 KB · Affichages: 48
  • essai(1).xlsm
    18 KB · Affichages: 44
  • essai(1).xlsm
    18 KB · Affichages: 35
Dernière édition:

Orcrist08

XLDnaute Nouveau
Re : Coller Cellule dans colonne filtrée

Bonjour et merci pour cette 1ere réponse.

ce que je n'ai pas précisé c'est que les données de la cellule "valeur" de la feuille 2 ne doivent pas être effacées.

Je rentre des valeurs dans la feuille 1, je choisis une classe "a" dans la feuille 2 et je copie de la feuille 1 vers la feuille 2.
Je change les données dans la feuilles 1, je choisis la classe "f" dans la feuille 2 et je copie de la feuille 1 vers la feuille 2.
etc...

Merci pour votre aide
 

job75

XLDnaute Barbatruc
Re : Coller Cellule dans colonne filtrée

Bonjour Orcrist08, le forum,

ce que je n'ai pas précisé c'est que les données de la cellule "valeur" de la feuille 2 ne doivent pas être effacées.

Eh bien ce n'est pas difficile, n'effacez rien :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Valeur" Then Exit Sub 'adapter l'en-tête
Dim derlig&, n&, c As Range
Cancel = True
Application.ScreenUpdating = False
derlig = Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
n = 2
'Feuil1 est le CodeName de la feuille
For Each c In Feuil1.Range("A2", Feuil1.Cells(Rows.Count, 1).End(xlUp)(2))
  While Target(n).EntireRow.Hidden
    n = n + 1
    If n > derlig Then Exit Sub 'sécurité
  Wend
  Target(n) = c
  n = n + 1
Next
End Sub
Par sécurité j'ai ajouté la variable derlig, numéro de la dernière ligne visible.

Fichier (2).

Bonne journée.
 

Pièces jointes

  • essai(2).xlsm
    18.4 KB · Affichages: 33
  • essai(2).xlsm
    18.4 KB · Affichages: 50
  • essai(2).xlsm
    18.4 KB · Affichages: 49

job75

XLDnaute Barbatruc
Re : Coller Cellule dans colonne filtrée

Re,

Dans ce fichier (3) j'ai ajouté le test If c <> "" Then :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Valeur" Then Exit Sub 'adapter l'en-tête
Dim derlig&, n&, c As Range
Cancel = True
Application.ScreenUpdating = False
derlig = Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
n = 2
'Feuil1 est le CodeName de la feuille
For Each c In Feuil1.Range("A2", Feuil1.Cells(Rows.Count, 1).End(xlUp)(2))
  If c <> "" Then
    While Target(n).EntireRow.Hidden
      n = n + 1
      If n > derlig Then Exit Sub 'sécurité
    Wend
    Target(n) = c
    n = n + 1
  End If
Next
End Sub
A+
 

Pièces jointes

  • essai(3).xlsm
    18.5 KB · Affichages: 30

Orcrist08

XLDnaute Nouveau
Re : Coller Cellule dans colonne filtrée

Re,

Merci encore pour ta rapidité et ton efficacité.
ça fonctionne super.

Penses-tu qu'il est possible de faire la même chose mais en ayant un filtre sur les valeurs de la feuille 1 et plutot que d'avoir une sélection automatique des données de la feuille 1, il y ait une sélection de la plage avec la souris (données qui se suivent mais qui ne comment pas forcément à la ligne 2)

Je choisis d'abord des valeurs dans la feuille 1 avec un filtre classique, je lance ta macro et je choisis la plage à copier.

Merci pour ton aide
 

job75

XLDnaute Barbatruc
Re : Coller Cellule dans colonne filtrée

Re,

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Valeur" Then Exit Sub 'adapter l'en-tête
Dim derlig&, n&, c As Range
Cancel = True
Application.ScreenUpdating = False
derlig = Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
n = 2
On Error Resume Next
'Feuil1 est le CodeName de la feuille
For Each c In Feuil1.Range("A2", Feuil1.Cells(Rows.Count, 1).End(xlUp)(2).SpecialCells(xlCellTypeVisible))
  If c <> "" Then
    While Target(n).EntireRow.Hidden
      n = n + 1
      If n > derlig Then Exit Sub 'sécurité
    Wend
    Target(n) = c
    n = n + 1
  End If
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Coller Cellule dans colonne filtrée

Re,

Je n'avais pas eu le temps de tester ce matin et il y avait une erreur.

Une parenthèse ) était mal placée sur la ligne For Each c...

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Valeur" Then Exit Sub 'adapter l'en-tête
Dim derlig&, n&, c As Range
Cancel = True
Application.ScreenUpdating = False
derlig = Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
n = 2
On Error Resume Next
'Feuil1 est le CodeName de la feuille
For Each c In Feuil1.Range("A2", Feuil1.Cells(Rows.Count, 1).End(xlUp)(2)).SpecialCells(xlCellTypeVisible)
  If c <> "" Then
    While Target(n).EntireRow.Hidden
      n = n + 1
      If n > derlig Then Exit Sub 'sécurité
    Wend
    Target(n) = c
    n = n + 1
  End If
Next
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 498
Messages
2 088 996
Membres
104 001
dernier inscrit
dessinbecm