begin process at 2012 02 15 16:02:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > VBA EXCEL FONCTION POUR DÉTERMINER LA DERNIÈRE LIGNE D'UNE COLONNE OU PLUSIEURS

VBA EXCEL FONCTION POUR DÉTERMINER LA DERNIÈRE LIGNE D'UNE COLONNE OU PLUSIEURS


 Information sur la source

Note :
Aucune note
Catégorie :VBA Classé sous :dernière ligne, tableau excel, ligne feuille Niveau :Débutant Date de création :31/12/2008 Date de mise à jour :11/02/2009 20:04:03 Vu :8 209

Auteur : Joh76

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Détermine le numéro de la dernière ligne d'une colonne ou plusieurs colonne en les scrutant une à une pour ne garder la cellule la plus éloignée de TOUTES les versions d'Excel.

Pour plus de détails voir les commentaires du code.

Source

  • ' Recherche du numéro de la dernière ligne (vide) du tableau en partant de la ligne en dessous du titre s'il y a
  • ' Feuille: nom de la feuille. Attention pas celui de l'onglet!!!
  • ' Cellules: mettre entre guillemets Ex:"A2" ou "A2:D2" si A1 et le titre du tableau
  • ' Ex: Feuil2.Range("F2").Offset(Derniere_Ligne(Feuil2, "F2")).Value ("F1" est le titre du tableau)
  • Public Function Derniere_Ligne(Feuille As Worksheet, Cellules As String)
  • ' Déclaration d'une variable contenant le numéro de la ligne de départ
  • Dim Ligne_Depart As Long
  • ' Variable d'itération
  • Dim a As Integer
  • ' Variable contenant le numéro de la dernière ligne de la feuille de calcul
  • ' en fonction de la version de excel (2007 dernière cellule=1048576 alors que 2003=65536)
  • Dim Fin As Long
  • ' Variable contenant la lettre de la première colonne
  • Dim PremCol As String
  • ' Variable contenant la lettre de la dernière colonne
  • Dim DernCol As String
  • ' variable contenant la lettre de la celllule temporaire
  • Dim TempCol As String
  • ' variable utilisé si cellules contient plusieurs cellules
  • Dim Premiere As Boolean
  • 'initialisation
  • Premiere = True
  • ' Test pour rechercher "Fin"
  • On Error Resume Next
  • Fin = Feuille.Range("a1048576").Row
  • If Err <> 0 Then
  • Fin = Feuille.Range("a65536").Row
  • Err = 0
  • End If
  • On Error GoTo 0
  • ' Découpage du contenu de Ligne_Titre pour ne retenir que le nombre de la première cellule (si A1:C1 retient 1)
  • For a = 1 To Len(Cellules)
  • Select Case Mid(Cellules, a, 1)
  • Case Is = ":"
  • ' Si c'est le premier caractère: mauvaise saisie dans le programme
  • If a = 1 Then
  • MsgBox "Fonction Derniere_Ligne: Cellules erronées...", vbCritical
  • End
  • End If
  • ' sinon la dernière cellule va être donné
  • Premiere = False
  • Case Is = IsNumeric(Mid(Cellules, a, 1))
  • ' Si c'est un chiffre enregistre dans Ligne_Tire
  • If Premiere Then Ligne_Depart = Ligne_Depart & Mid(Cellules, a, 1)
  • Case Is <> IsNumeric(Mid(Cellules, a, 1))
  • If Premiere Then
  • PremCol = PremCol & Mid(Cellules, a, 1)
  • Else
  • DernCol = DernCol & Mid(Cellules, a, 1)
  • End If
  • End Select
  • Next a
  • TempCol = PremCol
  • ' si cellules contient plusieurs cellules, cherche le numéro de la ligne la +
  • ' éloignée en cas de cellule vide
  • If Premiere = False Then
  • For a = Asc(PremCol) To Asc(DernCol)
  • If Feuille.Range(TempCol & Fin).End(xlUp).Row < Feuille.Range(Chr(a) & Fin).End(xlUp).Row _
  • Then TempCol = Chr(a)
  • Next a
  • End If
  • ' Affecte le numéro de la dernière ligne à Derniere_Linge
  • If Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart < 0 Then
  • Derniere_Ligne = 0
  • Else
  • Derniere_Ligne = Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart
  • End If
  • End Function
' Recherche du numéro de la dernière ligne (vide) du tableau en partant de la ligne en dessous du titre s'il y a
' Feuille: nom de la feuille. Attention pas celui de l'onglet!!!
' Cellules: mettre entre guillemets Ex:"A2" ou "A2:D2" si A1 et le titre du tableau
' Ex: Feuil2.Range("F2").Offset(Derniere_Ligne(Feuil2, "F2")).Value ("F1" est le titre du tableau)
Public Function Derniere_Ligne(Feuille As Worksheet, Cellules As String)

' Déclaration d'une variable contenant le numéro de la ligne de départ
Dim Ligne_Depart As Long
' Variable d'itération
Dim a As Integer
' Variable contenant le numéro de la dernière ligne de la feuille de calcul
' en fonction de la version de excel (2007 dernière cellule=1048576 alors que 2003=65536)
Dim Fin As Long
' Variable contenant la lettre de la première colonne
Dim PremCol As String
' Variable contenant la lettre de la dernière colonne
Dim DernCol As String
' variable contenant la lettre de la celllule temporaire
Dim TempCol As String
' variable utilisé si cellules contient plusieurs cellules
Dim Premiere As Boolean
'initialisation
Premiere = True
' Test pour rechercher "Fin"
On Error Resume Next
Fin = Feuille.Range("a1048576").Row
If Err <> 0 Then
    Fin = Feuille.Range("a65536").Row
    Err = 0
End If
On Error GoTo 0

' Découpage du contenu de Ligne_Titre pour ne retenir que le nombre de la première cellule (si A1:C1 retient 1)
For a = 1 To Len(Cellules)
    Select Case Mid(Cellules, a, 1)
        Case Is = ":"
        ' Si c'est le premier caractère: mauvaise saisie dans le programme
        If a = 1 Then
            MsgBox "Fonction Derniere_Ligne: Cellules erronées...", vbCritical
            End
        End If
        ' sinon la dernière cellule va être donné
        Premiere = False
        Case Is = IsNumeric(Mid(Cellules, a, 1))
        ' Si c'est un chiffre enregistre dans Ligne_Tire
        If Premiere Then Ligne_Depart = Ligne_Depart & Mid(Cellules, a, 1)
        Case Is <> IsNumeric(Mid(Cellules, a, 1))
        If Premiere Then
            PremCol = PremCol & Mid(Cellules, a, 1)
        Else
            DernCol = DernCol & Mid(Cellules, a, 1)
        End If
    End Select
Next a
    
TempCol = PremCol

' si cellules contient plusieurs cellules, cherche le numéro de la ligne la +
' éloignée en cas de cellule vide
If Premiere = False Then
    For a = Asc(PremCol) To Asc(DernCol)
        If Feuille.Range(TempCol & Fin).End(xlUp).Row < Feuille.Range(Chr(a) & Fin).End(xlUp).Row _
            Then TempCol = Chr(a)
    Next a
End If
' Affecte le numéro de la dernière ligne à Derniere_Linge
    If Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart < 0 Then
        Derniere_Ligne = 0
    Else
        Derniere_Ligne = Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart
    End If
End Function

 Conclusion

Facilite les nouvelles saisies d'un tableau d'une feuille.


 Historique

31 décembre 2008 10:52:57 :
J'ai oublié de précisé que c'est pour toutes les version d'Excel!
11 février 2009 20:04:03 :
Revu la description

 Sources du même auteur

Source avec Zip Source avec une capture VBA EXCEL, REMPLISSAGE D'UN COMBOBOX OU D'UNE LISTBOX

 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

Commentaires et avis

Commentaire de PtitLouisXIV le 05/01/2009 18:28:20

Bonjour,
Il y a peut-être plus simple :
Sub Macro1()
Dim Ligne As Long
Dim Colonne As String
    Selection.SpecialCells(xlCellTypeLastCell).Activate
    Ligne = ActiveCell.Row
    Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)
End Sub
Non ?

Commentaire de Frederic45 le 05/01/2009 19:48:36

Bonsoir

Une autre solution :
Sub Macro1()
Dim Ligne As Long
Dim Colonne As String
Ligne = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
Colonne = ActiveCell.SpecialCells(xlCellTypeLastCell).Column    'colonne en nombre
Colonne = Chr(ActiveCell.SpecialCells(xlCellTypeLastCell).Column + 64)    'colonne en lettre
End Sub
A+
Eric

Commentaire de Joh76 le 05/01/2009 20:04:35

Oui, c'est possible.
Il y a toujours plusieurs façons d'écrire un programme et de méthodes pour exécuter une tache.
Après cela dépend où l'on veut en arriver...

Commentaire de bigfish_le vrai le 05/01/2009 22:28:48

Salut,

tu devrais regarder un peu comment fonctionne ce site car il existe une partie appelé Codyx et qui sert a publier des codes simples qui sont comme tu le dis toi meme souvent utilisés et reutilisés. Honnetement je ne vois pas l'interet de ce code dans les sources.

A+

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales