Mise à jour de .SpecialCells(xlCellTypeLastCell) ?

JCA06

XLDnaute Occasionnel
Bonsoir le Forum,

J'ai une bonne nouvelle pour vous ! Je vous ai évité plusieurs questions aujourd'hui :)

Bon, c'est vrai qu'il en reste tout de même...

Toujours dans ma quête de récupération de données de sources diverses et variées, y compris des fichiers word, j'ai pensé qu'il me serait utile de supprimer de ma feuille source les lignes vierges et de rassembler également les données en colonnes en supprimant, ensuite, les cellules vides et en décalant vers la gauche.
C'est un peu alambiqué, mais cela fonctionne tout de même.

Maintenant, ce que je ne parviens pas à faire, c'est à mettre à jour ma référence de dernière colonne :angry:
Etant donné que j'ai serré les données vers la gauche, je récupére ma dernière ligne sans erreur avec un simple :
DerLigne = Cells(65000, 1).End(xlUp).Row

Mais je n'ai pas trouvé la solution pour la colonne. J'utilise en amont la méthode .SpecialCells(xlCellTypeLastCell).column pour délimiter mes boucles, mais cette méthode ne tient pas compte des informations que j'ai supprimées et me donne toujours la même valeur.
Dans mon exemple test, j'ai toujours l'équivalent de E101 comme valeur alors que cela devrait être, après nettoyage, C68 !

Je n'ai pas trouvé d'autre astuces, sauf celle de vous envoyer un petit mot !

Merci d'avance !
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir JCA06,

Pour contourner ce bug de détection de dernière colonne ou ligne utilisée, notamment lorsque tu supprimes ou ajoutes des lignes ou colonnes, peut-être peux-tu essayer :
Sub TestDernCell()
Dim DernLign As Long, DernCol As Integer
      ActiveSheet.UsedRange           'L'ajout de cette ligne permet de s'assurer de la
                                                      'bonne détection de la dernière cellule effectivement
                                                      'utilisée (d'après une astuce de Aran Dunkley)
      With ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)
            DernLign = .Row
            DernCol = .Column
      End With
      MsgBox 'Dernière ligne : ' & DernLign & vbLf & 'Dernière colonne : ' & DernCol
End Sub

Par ailleurs, au même titre que tu utilises :
DerLigne = Cells(65536, 1).End(xlUp).Row
pour détecter la dernière ligne utilisée par rapport à la colonne A,

tu peux utiliser :
Dim DernCol As Integer
DernCol = Cells(1, 256).End(xlToLeft).Column
pour détecter la dernière colonne utilisée par rapport à la ligne 1 (le principe reste toujours le même).

Cordialement,

Message édité par: myDearFriend!, à: 10/05/2005 23:54
 

JCA06

XLDnaute Occasionnel
Bonjour Didier, bonjour le Forum,

Merci Didier, ça marche impeccable :lol:

Pour ce qui était d'utiliser DernCol = Cells(1, 256).End(xlToLeft).Column, je ne pouvais pas le faire car la ligne la plus longue est variable, et ce n'est jamais la 1.
Pour le DerLigne = Cells(65000, 1).End(xlUp).Row, je pouvais l'utiliser car j'avais décalé les cellules vers la gauche et j'étais donc certain que ma colonne A était toujours remplie.

Merci beaucoup pour ton aide et pour ta pédagogie !

Bonne journée le forum !

P.S. : j'avais posté ce message bien plus tôt ce matin, mais j'ai eu un problème à la validation, comme cela m'arrive assez régulièrement. Mais comme je m'en méfie, je prends soin de copier mes messages avant de valider :woohoo:
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 180
dernier inscrit
Vcr