Sélection derniere ligne/case d'un tableau variable (VBA)

Franckxxx

XLDnaute Junior
Bonsoir à tous,


J'essaye désespérément de modifier un code pour qu'il s'adapte à un tableau de nombre de ligne variable pour automatiser une action.

Il y a deux points sur lesquels je bloque:
Lorsque j'applique un filtre:
ActiveSheet.Range("$A$1:$AU$146").AutoFilter Field:=33, Criteria1:= _ "555"

Pour ce cas-ci je n'ai aucune idée comment procéder, j'ai remarqué que le filtres sélectionnent l'ensemble du tableau fixe, existe-t-il un filtre fonctionnant sur un tableau variable?


Et lorsque je souhaite sélectionner la case qui suit la dernière ligne du tableau:
Range("F486").Select

J'ai essayé ceci:

Dim DerLig7 As Long
DerLig7 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
Range("F" & DerLig7).Select

J'ai essayé de mettre en mémoire la dernière ligne du tableau original pour ensuite l'incrémenter de 1. C'était un échec :p
Je pense qu'il s'agit d'un problème assez classique car ce n'est pas la première fois que je bloque sur ce genre de problème.

Merci à quiconque pourrais m'apporter son aide!
Bonne soirée! :)
 

Paf

XLDnaute Barbatruc
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Bonjour à tous

Sans avoir tout compris!

Pour appliquer un filtre auto, quelque soit le tableau (a priori)
(Préciser la feuille si ce n'est pas la feuille courante.)
Range("A1").AutoFilter Field:=33, Criteria1:= "555" devrait suffire pour filtrer l'ensemble du tableau . Mais ce n'est peut-être pas le besoin ?

DerLig7 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row donne bien la dernière ligne renseignée de la colonne A.
en colonne F peut-être y a-t-il plus ( ou moins) de données qu'en colonne A et la dernière ligne ne serait pas la même.
par ailleurs si le code ne s'exécute pas avec la feuille Feuil1 comme feuille courante, Range("F" & DerLig7).Select , lui, s' exécutera sur la feuille courante. Dans ce cas, préciser la feuille.
Il manque les précisions sur ce que vous vouliez obtenir et ce que vous avez obtenu pour pouvoir vous aider.

A+
 

Franckxxx

XLDnaute Junior
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Bonjour camarchepas, Paf, le Forum,

Désolé de ne pas avoir été plus explicite, je ne voyais pas le problème aussi compliqué.
J'ai ajouté un fichier pour illustrer mon problème.

Dans l'idée générale, je cherche à transférer des données d'un fichier à un autre, mais à la suite.
Soit la Feuil2 mon fichier d'export et la Feuil1 mon fichier ou j'importe des données.

En premier lieu, je cherche à appliquer un filtre à mon tableau de la Feuil2. Cependant, ce tableau a un nombre de lignes variables, l'enregistreur de macro marche donc pour mon cas précis mais pas dans le temps.
(D'ou ma question "ActiveSheet.Range("$A$1:$AU$146").AutoFilter Field:=33, Criteria1:= _ "555"")
Par exemple, dans la Feuill2 j'aimerais appliquer le filtre:
ActiveSheet.Range("$A$1:$E$11").AutoFilter Field:=5, Criteria1:= _ "ZAP"
Mais en considérant un nombre de ligne du tableau variable.

En second lieu c'est l'import des données qui me pose problème.
En effet la Feuil1 correspond à un import de données déja effectué. J'aimerais copier/coller certaine colonnes du tableau de la Feuil2 à la suite du tableau de la Feuil1.
(D'ou Dim DerLig7 As Long
DerLig7 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
Range("F" & DerLig7).Select)
Je cherchais a sélectionner une case (dans le fichier exemple la case A12) pour ensuite effectuer le coller.

J’espère avoir été plus clair. N'hésitez pas a me demander si vous avez des questions.
Merci énormément pour votre aide et vos connaissances! :)
 

Pièces jointes

  • Classeur12.xls
    24.5 KB · Affichages: 73
  • Classeur12.xls
    24.5 KB · Affichages: 87
  • Classeur12.xls
    24.5 KB · Affichages: 76

Franckxxx

XLDnaute Junior
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Bonjour Paritec, camarchepas, Paf, le Forum,

A Paritec:
"Il n'y a pas besoin de ""Sélectionner"" une cellule pour faire un coller !!!!!"
J'imagine bien, j'essayais juste d'adapter un code en sélectionnant une case à la suite d'un tableau. Ainsi, en effectuant le "collé" basique sur cette case les deux tableaux étaient réunis de manière automatique peut importe la longueur du tableau1.

A PAF:
J'ai essayé d'effectuer le filtre sous la forme " Range("D1").AutoFilter Field:=33, Criteria1:="ZAP" ", mais cela ne fonctionne pas sur ce cas particulier, existe-t-il des paramètres que j'aurais put oublier?..

Merci a vous pour votre aide!
 

Pièces jointes

  • Copie de Classeur12.xls
    35.5 KB · Affichages: 70
  • Copie de Classeur12.xls
    35.5 KB · Affichages: 74
  • Copie de Classeur12.xls
    35.5 KB · Affichages: 96

Paf

XLDnaute Barbatruc
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Re

A PAF:
J'ai essayé d'effectuer le filtre sous la forme " Range("D1").AutoFilter Field:=33, Criteria1:="ZAP" ", mais cela ne fonctionne pas sur ce cas particulier, existe-t-il des paramètres que j'aurais put oublier?..

Range("D1").AutoFilter Field:=33, Criteria1:="ZAP" ne fonctionne pas pour 2 raisons:

-la feuille Feuil2 n'est pas en mode autofilter
-Field:=33 signifie que le filtre s'effectuera sur le champs(colonne) 33 . Or le tableau ne comporte que 5 colonnes et c'est sur la 4 que le filtre devrait porter

par ailleurs pour le reste du code de la macro Sub Macro1()
-vous copiez des colonnes entières (dont une majorité de cellules vides) préférez ne copier que la plage de données
-évitez les select autant que possible . le code en sera plus rapide
-pourquoi utiliser PasteSpecial ?

Code:
Sub Macro1()
    ' si la feuille n'est pas en autofilter => autofilter
    If Not Worksheets("Feuil2").AutoFilterMode Then Sheets("Feuil2").Range("A1:E1").AutoFilter
    
    'filtre sur la colonne 4
    Worksheets("Feuil2").Range("D1").AutoFilter Field:=4, Criteria1:="ZAP"
    
    'définition des dernière lignes
    DerLig1 = Worksheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
    DerLig7 = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
    
    'copie des colonnes filtrées
    Worksheets("Feuil2").Range("A2:A" & DerLig1).Copy Worksheets("Feuil1").Range("A" & DerLig7)
    Worksheets("Feuil2").Range("B2:B" & DerLig1).Copy Worksheets("Feuil1").Range("C" & DerLig7)
    Worksheets("Feuil2").Range("E2:E" & DerLig1).Copy Worksheets("Feuil1").Range("E" & DerLig7)
    
    'annulation du filtre en colonne 4
    Worksheets("Feuil2").Range("D1").AutoFilter Field:=4
End Sub

A+
 

Franckxxx

XLDnaute Junior
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Re,

Effectivement j'aurais du me rendre compte des deux raisons pour lesquelles cela ne fonctionnais pas, ce n'étais pas bien compliqué..

Merci énormément, ce code a l'air beaucoup plus simple et efficace que celui que je voulais rédiger, notamment la commande permettant d'activer l'autofilter si il n'est pas activé que je vais pouvoir réutiliser pour améliorer d'anciens codes. Je pense avoir bien compris comment il fonctionne, j'essaye de l'adapter à mon fichier original et je vous tiens au courant!

Merci à vous! :)
 

Franckxxx

XLDnaute Junior
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Bonsoir Paf, bonsoir le Forum,

J'ai adapté les lignes de codes à mon fichier original ainsi qu'a d’anciennes macro que j'avais faites et cela fonctionne parfaitement.
La copie des colonnes ( Worksheets("Feuil2").Range("A2:A" & DerLig1).Copy Worksheets("Feuil1").Range("A" & DerLig7) ) ne fonctionnais pas lorsque les feuilles étaient sur deux fichiers différents. Ne sachant pas si il existait une variante permettant de remplir cette fonction, j'ai importé les données des feuilles sur le même fichier que j'ai ensuite supprimées une fois la copie effectuée.

Merci encore à vous pour votre aide Paf,
Très bonne soirée!! :)
 

Paf

XLDnaute Barbatruc
Re : Sélection derniere ligne/case d'un tableau variable (VBA)

Re,

le principe entre deux classeurs est le même qu'entre deux feuilles. Il faut bien préciser l'origine et la destination.

Ce forum et le net regorgent de copie entre classeurs

A+ et bon courage
 

Discussions similaires

Réponses
3
Affichages
569