Derniere ligne d'une colonne avec des cellules fusionnées

Bonjour,

J'ai un petit soucis sur un programme que j'ai.

J'essaye de trouver dans une colonne la derniere ligne non vide.

De facon générale j'utilise cette fonction:

derlig = Range("C" & Rows.Count).End(xlUp).Row

ou

derlig=Columns(3).Find("*", , , , xlByColumns, xlPrevious).Row

Sauf que cela ne fonctionne pas avec les cellules fusionnés.

Si la derniere cellule non vide est B4:C4

Il me renvera pour la colonne C que la derniere cellule est C3

J'ai essayé avec

dlig= Columns(3).SpecialCells(xlCellTypeLastCell).Row

ca fonctionne mais ca ne reset pas a la fin de la sub.

C'est a dire que si je relance le programme une deuxieme fois il va considéré que la derniere cellule non vide etait la derniere cellule qu'il a remplis la derniere fois que j'ai utilisé le programme.

Idealement j'aimerai en fait trouvé la premiere cellule vide à partir d'une cellule donnée.

Exemple dans mon fichier avec la cellule C6.

D'avance merci

17classeur1.xlsm (14.68 Ko)

Bonjour Tsubi,

Les fusions de cellule et VBA ne sont pas très compatibles...

Un petit topo sur les possibilités :

La propriété CurrentRegion

L'aide VBA est très claire à ce sujet :

Cette propriété renvoie un objet Range qui représente la zone en cours. Celle-ci est une plage limitée par toute combinaison de lignes et de colonnes vides. En lecture seule.

Autrement dit, elle retourne la plage des cellules adjacentes à l'objet Range renseigné.

Cette propriété n'est pas faite pour retourner la plage complète utilisée dans une feuille, mais bel et bien pour retourner un Range limité.

Si l'on a conscience de cela (pas de lignes ni de colonnes vides), il n'y a aucun piège ni aucune lacune à cette propriété.

La propriété UsedRange

Ici, cette propriété ne s'applique plus à un Objet Range, mais à une feuille entière, l'Objet Worksheet.

Aide VBA :

Cette propriété renvoie un objet Range qui représente la plage utilisée dans la feuille de calcul spécifiée. Propriété en lecture seule.

Tout formatage, même invisible (ex: Range("C17").Interior.Pattern = xlNone) fera inclure le Range formaté au UsedRange.

Tout comme la propriété CurrentRegion, il n'y a pas de piège à proprement parler, mais il vous faudra faire attention aux :

  • Format de cellule,
  • Format de colonne,
  • Lignes (colonnes) masquées,
  • Fusion de cellules.

La propriété SpecialCells

Comme presque systématiquement avec cette méthode : à éviter!

L'aide VBA précise que cette méthode, utilisée avec la Constante XlCellType :

xlCellTypeLastCell. Renvoie la dernière cellule dans la plage utilisée

Ouais...

Sauf si vous avez conscience que :

  • cette méthode s'applique à la feuille entière,
  • l'enregistrement du classeur remet tout dans l'ordre

La propriété End --> xlDown et/ou xlUp

Aide VBA :

Cette propriété renvoie un objet Range qui représente la cellule à la fin de la zone qui contient la plage source. Elle correspond aux combinaisons de touches CTRL+HAUT, CTRL+BAS. Objet Range en lecture seule.

Elle renvoie donc la dernière ligne saisie sous le (xlDown) ou au dessus du (xlUp) Range indiqué.

Attention donc aux lignes vides pour xlDown...

A noter également que cette propriété ne tient pas compte des lignes masquées sous le (ou au dessus du) Range renseigné, même si elles sont saisies (ce qui est le comportement normal de la combinaison de touches).

La méthode find

A la base, elle n'est pas vraiment conçue pour cela.

Mais, on peut très bien l'utiliser dans certains cas, notamment parce qu'elle tient compte des lignes (colonnes) masquées.

Les pièges à éviter ici sont :

  • Les plages (colonnes et/ou lignes) vides,
  • Les cellules fusionnées (beurk!).

Ces deux pièges vous renverront une Erreur d'exécution 91...

Salut Tsubi, Salut Franck,

à tester

dlig4 = tws.Columns(3).End(xlDown).Row + 1

@++

Hello,

merci pour votre aide.

En fait j'ai trouvé une solution que j'avais ssous les yeux.

derlig=Columns(3).Find("", , , , xlByColumns, xlPrevious).Row

Qui renvois la valeur de la premiere cellule vide et non pas la derniere cellule pleine.

Et ca prend en compte les merges.

Rechercher des sujets similaires à "derniere ligne colonne fusionnees"