syntaxe

A

amel

Guest
Re a vous!
j'ai une feuille excel remplie dont je ne connais pas le nombre de ligne, je voudrais trouver la derniere ligne pleine et lui affecter un nom de maniere à pouvoir la manier facilement, (la copier, la coller...)
je voudrais ecrire en VBA:

dim derlg as ??

derniere cells pleine=derlg
derlg.select
selection.copy
sheets('feuil2').range('A:A').select
selection.paste

mais ça ne marche pas tres bien... What's wrong?
 

JJM

XLDnaute Occasionnel
Bonjour amel,

Il faut écrire :

Dim derlg

(sans type ce sera un Variant, qui contiendra donc automatiquement la bonne valeur).

Puis :

Worksheets('Feuil1').Activate
Me.Range('A2').Select 'Début en haut de colonne (exemple)
Selection.End(xlDown).Select 'Positionne en bas colonne renseignée
derlg = ActiveCell.Address

Worksheets('Feuil1').Range(derlg).Copy _
Destination:=Worksheets('Feuil2').Range('E5')

Ce n'est qu'un exemple (recopie du contenu de la dernière ligne dans 'E5' d'une autre feuille), à adapter et c'est plus simple.

Message édité par: JJM, à: 08/07/2005 16:32
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Amel, bonjour JJM, bonjour le forum,

Amel, la dernière ligne pleine ça ne veut pas dire grand chose, la dernière ligne pleine de la colonne A (ou B, etc...) serait plus juste. Dans l'exemple à suivre j'ai défini la dernière cellule pleine de la colonne A.

JJM je me permets une petite correction déclare derlg comme Range et on pourra ensuite atteindre cette cellule en tapant derlg tout simplement (derlg.Copy ou derlg.Select, etc...)


Dim derlg As Range
Set derlg = Worksheets('Feuil1').Range('A65536').End(xlUp)
 

JJM

XLDnaute Occasionnel
Re,

J'avais lu trop vite. Pour recopier la ligne entière :

derlg = ActiveCell.EntireRow 'Pour la mémoriser pour plus tard

ActiveCell.EntireRow.Copy Worksheets('Feuil2').Range('A1')

:)

Message édité par: JJM, à: 08/07/2005 16:51
 
A

amel

Guest
RE!
le problème est encore la: voila le truc:

Dim derlg
Worksheets('temoin2').Activate
Me.Range(' A3').Select 'Début en haut de colonne (exemple)
Selection.End(xlDown).Select 'Positionne en de colonne renseignée
derlg = ActiveCell.Address
Worksheets('temoin2').Range(derlg).Copy _
Destination:=Worksheets('2005').cells(2, 3)

ça marche super bien!! ma derniere ligne est la 3eme et je recopie la cellule A3mais le truc c'est que 'A3' je l'ai tapé parceque je le connaissait, mais il faut supposer que l'on ne le connais pas..il faut qu'il puisse le detecter lui meme, d'ou l'interet de trouver la dernière ligne pleine...
 

JJM

XLDnaute Occasionnel
Bonjour Robert, amel, le Forum,

Robert, nos messages se sont croisés.
Ta solution est préférable, à mon avis, mais en l'adaptant pour la ligne entière :

derlg.EntireRow.Copy Worksheets('Feuil2').Range('A1')

:ermm:
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Robert, JJM, Amel, le Forum

Permettez-moi de d'intervenir dans ce fil...

JJM écrit:
Bonjour amel,

Il faut écrire :

Dim derlg

(sans type ce sera un Variant, qui contiendra donc automatiquement la bonne valeur).

Non, y a pas bon ! ;)

En VBA il faut s'efforcer le plus possible de déclarer clairement les Variables comme il se faut. Sinon on arrive facilement à des drôles de sbinz. En plus Robert a raison, à la lecture on ne comprend plus rien du tout aussi.

Donc pour la Dernière Ligne ... Il y a diverses méthodes...

Quand on Cherche la Dernière Cellule ou éventuellement la Dernière Plage de Cellules... On a trois moyens de base bien distincts :

Méthode OBJECT RANGE
Sub TheLastRowAsRange()
Dim Derlg As Range

Set Derlg = Worksheets('Feuil1').Range('A65536').End(xlUp)
Set Derlg = Derlg.EntireRow

Derlg.Copy Destination:=Worksheets('Feuil2').Range('A65536').End(xlUp).Offset(1, 0)
End Sub


Méthode NUMERO DE LIGNE LONG (ou INTEGER)
Sub TheLastRowAsNumber()
Dim Derlg As Long

   
With Worksheets('Feuil1')
        Derlg = .Range('A65536').End(xlUp).Row
        .Range('A' & Derlg & ':Z' & Derlg).Copy _
        Destination:=Worksheets('Feuil2').Range('A65536').End(xlUp).Offset(1, 0)
   
End With
End Sub


Méthode ADRESSE EN STRING
Sub TheLastRowAsString()
Dim Derlg As String

   
With Worksheets('Feuil1')
        Derlg = .Range('A65536').End(xlUp).Address
        .Range(Derlg).EntireRow.Copy _
          Destination:=Worksheets('Feuil2').Range('A65536').End(xlUp).Offset(1, 0)
   
End With
End Sub


Il ne faut surtout pas tout mélanger, surtout si on ne déclare pas (ou en Variant)

J'espère que ce sera plus clair pour vous maintenant..

Bon Week End
@+Thierry
 

JJM

XLDnaute Occasionnel
Bonjour _Thyierry, le Forum,

Merci pour ton intervention, c'est en effet plus clair maintenant.

Tu as tout à fait raison, mais je mettrais un petit bémol sur le fait de ne pas utiliser de Variant. Bien sûr, dans cet exemple c'est préférable, mais il y a des cas où le type de ce que l'on va récupérer n'est pas toujours très sûr. Je me réfère à un livre sur le Visual basic, écrit par l'un des auteurs de ce langage, qui a fait référence il n'y a pas très longtemps. Il dit que souvent il vaut mieux utiliser un Variant, pour récupérer une donnée, afin de ne pas changer son type et d'éviter des erreurs (en fait, son type est fixé à ce moment là). Cela m'est arrivé plusieurs fois, où un programme ne fonctionnait pas bien à cause d'un type forcé et dans lequel le fait de laisser le type de la variable à Variant arrangeait tout.
Mais il est vrai également qu'intellectuellement il est préférable de déclarer les types des variables, pour agir avec certitude. En fait il y a deux écoles, c'est comme pour le fait de préfixer chaque nom de variable avec la première lettre de son type, en minuscule. C'est pratique pour ne pas se poser de question quant à ce dernier, mais la lisibilité en souffre.

Ce qui n'empêche pas que tes trois exemples sont judicieusement bien choisis et montrent bien les écueils à éviter.

Bon Week-end, pour moi c'est la tonte trois heures durant... :)

Message édité par: JJM, à: 09/07/2005 18:51
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 464
Membres
103 548
dernier inscrit
civpol