Dernière colonne vide...

Laosurlamontagne

XLDnaute Occasionnel
Bonjour à tous,

La question est classique mais ici, je ne comprends pas pourquoi il ne me sélectionne pas la bonne case... Je souhaite sélectionner la dernière case non occupé de la ligne 50 pour y copier-coller le contenu d'une sélection provenant d'une autre feuille (de "TablePerfo" à "Data") mais mon code ne sélectionne pas la bonne feuille ("Data") et je ne comprends pas...

Function copyresultperfo()
Dim Adresse As String
For Each GPN In Range("GPN")

Sheets("Perfo").Activate

ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 1, GPN
ActiveSheet.ListObjects("TablePerfo").Range.Offset(0). _
Resize(ActiveSheet.ListObjects("TablePerfo").Range.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).Copy

With ThisWorkbook.Sheets("Data")
Adresse = .Cells(50, Columns.Count).End(xlToRight).Address
MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
Cells(50, Columns.Count).End(xlToRight).Select
.Paste

End With

Next GPN
'revient à un affichage normal
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter

End function

Auriez-vous une idée de ce qui bloque?
 

vgendron

XLDnaute Barbatruc
Hello..

peut etre un problème de direction..
Adresse = .Cells(50, Columns.Count).End(xlToRight).Address
à remplacer par
Adresse = .Cells(50, Columns.Count).End(xlToLeft).Address

après.. s'il s'agit bien de la DERNIERE VIDE. c'est bien celle tout à droite.. donc xltoright.. donc pas de bug
peut etre voulais tu la première vide? ou dernière non vide? ???


VB:
Adresse = ActiveSheet.Cells(7, Columns.Count).End(xlToLeft).Address
MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
Adresse = ActiveSheet.Cells(7, Columns.Count).End(xlToLeft).Offset(0, 1).Address
MsgBox "la première Cellule  Vide de la Ligne est " & Adresse
Adresse = ActiveSheet.Cells(7, Columns.Count).End(xlToRight).Address
MsgBox "la dernière Cellule  Vide de la Ligne est " & Adresse
 
Dernière édition:

Laosurlamontagne

XLDnaute Occasionnel
La substitution semble fonctionner et il m'indique bien la derniere cellule vide de la ligne 50. Cependant, il ne copie pas du tout à cet endroit...

VB:
Function copyresultperfo()
Dim Adresse As String
For Each GPN In Range("GPN")


Sheets("Perfo").Activate

ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 'enlève les filtres existants
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 1, GPN ' filtre la colonne A
'décale la plage pour ne pas prendre la ligne d'entêtes
'reduit la plage d'une ligne pour compenser le décalage
'Copie les lignes restantes et qui sont visibles
ActiveSheet.ListObjects("TablePerfo").Range.Offset(0). _
Resize(ActiveSheet.ListObjects("TablePerfo").Range.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).Copy

With ThisWorkbook.Sheets("Data")
Adresse = .Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Address
MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Select
.Paste
End With

Next GPN
'revient à un affichage normal
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter
End Function
 

Paf

XLDnaute Barbatruc
bonjour Laosurlamontagne,vgendron,

a priori il manque le point pour référencer la selection à la bonne feuille

.Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Select

Puisqu'on a déjà l'adresse de destination, on pourrait écrire:

.Cells(Adresse).Paste

A+
 

vgendron

XLDnaute Barbatruc
et il les copie ou?
sans ton fichier exemple.. difficile de voir..
sinon. puisque tu es dans un with...
il te manque un . devant cells(50.....)
VB:
Function copyresultperfo()
Dim Adresse As String
For Each GPN In Range("GPN")
    Sheets("Perfo").Activate

    ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 'enlève les filtres existants
    ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 1, GPN ' filtre la colonne A
    'décale la plage pour ne pas prendre la ligne d'entêtes
    'reduit la plage d'une ligne pour compenser le décalage
    'Copie les lignes restantes et qui sont visibles
    ActiveSheet.ListObjects("TablePerfo").Range.Offset(0). _
    Resize(ActiveSheet.ListObjects("TablePerfo").Range.Rows.Count - 1). _
    SpecialCells(xlCellTypeVisible).Copy

    With ThisWorkbook.Sheets("Data")
        Adresse = .Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Address
        MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
        .Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Select
        .Paste
    End With

Next GPN
'revient à un affichage normal
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter
End Function


Hello Paf :-D
 

Laosurlamontagne

XLDnaute Occasionnel
C'est bizarre...

Code:
.Cells(Adresse).Paste

Ne fonctionne pas pas (erreur d'execution 5) et

Code:
.Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Select

Ne marche que si je sélectionne la feuille "Data" avant... ce qui est normalement inutile avec "With" (si j’interprète bien le VBA...)

Ps: je ne peux malheureusement pas partager le fichier... avec regret
 

Laosurlamontagne

XLDnaute Occasionnel
Bin, je pense que mon Excel doit toujours finir les restes du réveillons... J'ai "Erreur d’exécution '428' sur la ligne ".Range(Adresse).Paste" maintenant...

VB:
Sub bie()
Dim Adresse As String
For Each GPN In Range("GPN")
    Sheets("Perfo").Activate

    ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 'enlève les filtres existants
   ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 1, GPN ' filtre la colonne A
   'décale la plage pour ne pas prendre la ligne d'entêtes
   'reduit la plage d'une ligne pour compenser le décalage
   'Copie les lignes restantes et qui sont visibles
   ActiveSheet.ListObjects("TablePerfo").Range.Offset(0). _
    Resize(ActiveSheet.ListObjects("TablePerfo").Range.Rows.Count - 1). _
    SpecialCells(xlCellTypeVisible).Copy

    With ThisWorkbook.Sheets("Data")
        Adresse = .Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Address
        MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
        .Range(Adresse).Paste
'        .Range(50, Columns.Count).End(xlToLeft).Offset(0, 1).Select
        .Paste
    End With

Next GPN
'revient à un affichage normal
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter
End Sub
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Est ce que un .Range(Adresse).select provoque aussi une erreur?
si oui, vba ne sait pas où coller

si non..
peut etre un souci de taille entre la zone source " SpecialCells(xlCellTypeVisible).Copy" et la zone destination: .Range(Adresse).paste

zone fusionnées, lignes maquées , lignes filtrées....... autant de raisons qu'on ne peut pas t'aider à découvrir puisque pas de fichier.
sinon, essaie l'enregistreur de macro. ca pourra peut etre te donner une piste.
 

vgendron

XLDnaute Barbatruc
Essaie avec ceci..

VB:
Sub bie()
Application.ScreenUpdating = False
Dim Adresse As String
For Each GPN In Range("GPN")
    Sheets("Perfo").Activate

    ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 'enlève les filtres existants
    ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter 1, GPN ' filtre la colonne A
    'décale la plage pour ne pas prendre la ligne d'entêtes
    'reduit la plage d'une ligne pour compenser le décalage
    'Copie les lignes restantes et qui sont visibles
    ActiveSheet.ListObjects("TablePerfo").Range.Offset(0). _
    Resize(ActiveSheet.ListObjects("TablePerfo").Range.Rows.Count - 1). _
    SpecialCells(xlCellTypeVisible).Copy

    With ThisWorkbook.Sheets("Data")
        .Activate
        Adresse = .Cells(50, Columns.Count).End(xlToLeft).Offset(0, 1).Address
        MsgBox "la Dernière Cellule non Vide de la Ligne est " & Adresse
        .Range(Adresse).Select
        .Paste
    End With

Next GPN
'revient à un affichage normal
Sheets("Perfo").Activate
ActiveSheet.ListObjects("TablePerfo").Range.AutoFilter
Application.ScreenUpdating = True
End Sub

PS: dans le fichier que tu as envoyé, c'est très long, parce que la zone GPN contient de nombreuses cellules vides..
et ta table "TablePerfo" contient 65536 lignes.. dont seulement 177 sont remplies..
je présume que c'est parce que tu as effacé de nombreuses lignes pour l'exemple..??
 

Discussions similaires

Réponses
3
Affichages
274
Réponses
0
Affichages
243

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla