Trouver la derniere cellule pleine horizontalement

Bonjour à tous

J'ai cherché mais j'ai pas trouver la solution du titre de mon sujet

Pour trouver la dernière cellule pleine dans une colonne, VBA nous donne (Selection.End(xlDown).Select) , là je vous apprend rien.

Dans un module j'ai une solution avec une boucle sur une ligne et trouve la dernière cellule pleine , mais si il y a un truc prévu dans VBA , alors cela rendrait le code plus lisible.

Ma boucle " For " commence au début d'une ligne et boucle de colonne en colonne avec une autre variable (colonne), puis regarde avec un " If " si la cellule (ligne , colonne) est vide.

Mais question : existe -il le même truc pour faire la recherche à l'horizontale genre ( Selection.End(xlRight).Select ) , ça fonctionne pas, VBA me rejette.

Merci à tous pour votre aide.

End(xltoRight)

image

Bonjour,

Ah la la. Trouver LE CODE sans faille et le plus rapide pour trouver les dernières cellules vides ou pleines de telle ou telle ligne ou colonne. C'est un débat sans fin.

Tu peux faire des boucles ou utiliser UsedRange ou encore les codes donnés par le lien précédemment donné. Rien n'est réellement direct et fiable à 100%.

De base UsedRange semble attractif mais si tu supprimes lignes et/ou colonnes alors UsedRange te les comptera toujours. Ce sera quand même mieux que de parcourir la feuille entière puisque cela te donnera toutefois des bornes max.

Dans ton post tu parles de boucle For alors j'ai repris cette méthode qu'à priori tu maitrises.

Voici des méthodes (et oui je sais que certains interviendront en disant que ce n'est pas forcément la meilleur solution et c'est pour cela que j'ai bien mis "méthodes" et pas "solutions" ) pour trouver le nombre de lignes et/ou de colonnes max utilisées selon divers cas.

A partir d'une cellule Excel te donne la possibilité d'utiliser :

  • xlDown pour rechercher vers le bas
  • xlToLeft pour rechercher vers la gauche
  • xlToRight pour rechercher vers la droite
  • xlUp pour rechercher vers le haut

Tu peux ainsi rechercher les dernières cellules vides ou pleines selon la situation de ta cellule de départ.

Pour rechercher la dernière ligne utilisée dans une colonne je te conseille de partir de la ligne 1048576 et de faire xlUp (car si tu pars de la ligne 1 et utilises xlDown alors tu prends le risque de t'arrêter en plein tableau en cas de cellule vide temporairement) --> même logique de recherche du max colonne en partant de la colonne XFD et pas A.

Tu as différents sub pour des cas différents avec un jeu de tests rapides. Je te conseille de les comprendre 1 par 1. Le code te donnera le nombre de lignes et de colonnes max.

Teste et dis nous.

Bonjour à tous

Ça y est , j'ai tranché au plus simple pour moi.

Avec votre aide et l'aide de VBA sur (Address) où j'ai pompé 1 ou 2 lignes pour avoir l'adresse de la dernière cellule pleine d'une ligne.

Voici ce que j'arrive à faire pour y arriver, en modifiant le nom des variables pour que je m 'y retrouve plus tard je vais surement garde ce petit sub / end sub

Sub test()
Dim mc As Variant
Dim addresse As Variant
Dim NBCellule As Long
DerniereCellulePleine = 0
Cells(2, 1).Select
Selection.End(xlToRight).Select
Set DerniereCellulePleine = ActiveCell.Rows
addresse = DerniereCellulePleine.Address(ReferenceStyle:=xlR1C1) ' sa ça marche
NBCellule = Val(addresse)
MsgBox addresse & " ma variable" 'me renvois " R2C21"
End Sub

Ensuite je vais extraire de chiffre à droite après la lettre C avec " InStrRev " et j'aurais le nombre de cellules pleine dans une variable.

Je ferais un petit " sub /end sub " qui seras mis au boulot dans une boucle.

Si vous avez plus simple je prend aussi , avec la condition que je comprenne bien tout.

Encore merci à vous tous.

Bonjour,

Une petite "simplification" de votre code : équivalent, mais plus court :

Sub test()
    With ActiveSheet.Cells(2, 1).End(xlToRight)
        MsgBox "Dernière cellule à droite à partir de A2: " & .Address(ReferenceStyle:=xlR1C1) & vbCrLf _
            & "Ligne: " & .Row & " | Colonne: " & .Column
    End With
End Sub

Puisque .End(xlToRight) renvoie une cellule, on peut utiliser .Row et .Column pour en extraire les numéros de ligne/colonne plutot que de passer par la notation R1C1 puis de la décortiquer

Bonjour à tous

Merci Sabho12617, pour simplifier ça m'a bien simplifie le sub , avec ta simplification de code je garde qu'une ligne , se qui me fait 10 lignes en moins dans mon code.

J'ai retirer de la MsgBox et son texte.

J'ai aussi raccourcie ta ligne de code puisque juste la colonne m’intéressait.

Voici ma ligne qui fonctionne bien.

Dernierecellulepleine = .Address(ReferenceStyle:=xlR1C1) & .Column

Ensuite je reprend << .Column >> directement une variable numérique << NBtitres=.Column >> car, << Dernierecellulepleine >> est une String.

Merci et je revient pour d'autre petit souci qui montre son bout de nez. j'en ai un de taille pour un bouton mais c'est un autre sujet ça.

juste la colonne m’intéressait.

vers la droite

nbre_colonnes = ActiveSheet.Cells(2, 1).End(xlToRight).Column

vers la gauche

nbre_colonnes = ActiveSheet.Cells(2, 1048576).End(xlToLeft).Column

Merci pour cette autre solution, je la garde au chaud aussi

Content d'avoir pu vous aider.

N'oubliez pas de clôturer le fil si le sujet est résolu. Vous pourrez en ouvrir un nouveau sur la question du bouton.

Bonne journée.

Bonjour tout le monde,

Ci-joint un tuto contenant 13 macros répondant à différents besoins et quelques pièges à éviter avec les couleurs et les bordures qui peuvent être de véritables casse-têtes.

13selections.xlsm (34.46 Ko)

re,

je pense qu'il est important qu'avec specialcells(xl...) on ignore les cellules cachées, ce qui présente un vrai danger !!!

Autre question, une cellule avec une formule qui retourne "", est cette cellule pleine ou vide ?

Voir aussi les remarques de Jean Paul et Pierre Fauconnier (2ième poste)

quelque macros supplémentaires

Sub Test()
     MsgBox f_LastColumn(Sheets("Feuil2").Rows(10))
     MsgBox f_LastColumn(Sheets("Feuil2").Range("A1:Z100"))

     MsgBox f_LastRow(Sheets("Feuil2").Range("A1:Z100"))
End Sub

Function f_LastColumn(Plage As Range)
     Dim s
     With Plage
          s = .Parent.Name & "!" & .Address
     End With
     f_LastColumn = Evaluate(Replace("max(if(@<>"""",column(@),0))", "@", s))
End Function

Function f_LastRow(Plage As Range)
     Dim s
     With Plage
          s = .Parent.Name & "!" & .Address
     End With
     f_LastRow = Evaluate(Replace("max(if(@<>"""",row(@),0))", "@", s))
End Function

Bonjour à tous

Quand vous donnez des réponses avec des morceaux de code VBA, avec des mots clé imbriqués les uns dans les autres, pensez aux novices.

SVP accompagnés vos lignes avec des commentaires sur les mots clés VBA de vos codes. Parce moi perso j'ai un grand mal a comprendre sans explications.

Exemple : f_LastColumn = Evaluate(Replace("max(if(@<>"""",column(@),0))", "@", s))

Cette ligne pour moi est à moité incompréhensible

f_ pour la fonction appelée par la MsgBox je pense !!

LastColumn pour la dernière colonne

Evaluate(Replace("max(if@ ????? un if sans end if !!! avec @ ????, et j'ai regardé Evaluate et Replace dans l'aide de VBA mais pas en compris mais ça viendra.

<> différent de

"""" chaine vide je suppose !!

Merci pour vos aides même si je pige pas tout.

re,

Cellule B30:B31 de Feuil1 contiennent 2 formules pour vous montrer la ligne ou colonne de la dernière cellule pleine. Bon si on remplace la plage "Feuil2!A1:Z50" par @, on obtient un string qu'on peut utiliser dans une fonction personnalisée et là on remplacera ce "@" par la plage voulue.

Quand vous comprenez ces 2 formules, vous regardez/lancez la macro "LesFormules" et puis le reste du module1.

6selections.xlsm (30.60 Ko)

PS il faut savoir qu'on doit doubler les guillemets dans ce string de l'evaluate

Bonjour à tous,

@Papi36 Quand BsAlv écris ;

Function f_LastColumn(Plage As Range)
     Dim s
     With Plage
          s = .Parent.Name & "!" & .Address
     End With
     f_LastColumn = Evaluate(Replace("max(if(@<>"""",column(@),0))", "@", s))
End Function

f_LastColumn est une fonction qui a pour but de renvoyer la dernière colonne. Comme toute autre fonction d'Excel (Si, SI.CONDITION, RECHERCHE, etc..)

excel fgxuotyukd

Cette fonction a un paramètre 'Plage', qui doit comprendre une plage complète, et non pas, comme vous le demandiez, et d’après ce que j'en ai compris, une cellule de départ.

Cette fonction fait appel à Evaluate et Replace qui sont deux autres fonctions imbriquées.

Rechercher des sujets similaires à "trouver derniere pleine horizontalement"