IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Trouver la dernière cellule non vide dans un classeur excel fermé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Trouver la dernière cellule non vide dans un classeur excel fermé
    Bonour A tous,

    Je me suis lancer dans l'aventure de modifiée l'une de mes macro, pour accélérrer le traitement de celle-ci, j'ai souhaitez traiter mes demandes sans ouvrir les fichiers sur lesquels je prend les informations.

    Je rencontre un problème blocant, et en fait donc appel à vos connaissance pour savoir si vous avez une solution :

    - comment est il possible de trouver la dérnière cellule non vide d'un fichier n'étant pas ouvert.

    Par avance merci pour vos réponse

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut Trouver la dernière cellule d'une plage renseignée
    Bonjour,

    J'ai traité l'entièreté de la plage en partant de A1 car certaines cellules peuvent ne pas être renseignées. Par exemple, si on prend la plage A1 : D10 dont toutes les cellules sont renseignées hormis les cellules de la colonne E et celles de la ligne 5, la dernière ligne sera 10, la dernière colonnes sera D et la plage sera A1 : D10.
    *******
    Pour faire un test :
    1) copiez un de vos classeurs (avec des données en Feuil1), renommez le "essai.xls" et ranger le dans C:\
    2) copiez le code suivant dans un nouveau classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub GetClasseur()
    Dim WB As Workbook
    Dim S As Worksheet
    On Error GoTo Erreur
    Set WB = GetObject("c:\essai.xls")    'chemin à adapter
    Set S = WB.Sheets(1)                  'item de la feuille à adapter
    Call PlageDonnees(MaFeuille:=S)
    '---
    Erreur:
    If Err = 0 Then
      WB.Close savechanges:=False
      Set WB = Nothing
    Else
      MsgBox "Classeur introuvable ou feuille introuvable"
    End If
    End Sub
     
    Sub PlageDonnees(MaFeuille As Worksheet)
    Dim S As Worksheet
    Dim R As Range
    Dim LastRow&
    Dim LastCol&
    Set S = MaFeuille
    Set R = S.Cells(S.Rows.Count, S.Columns.Count)
    On Error Resume Next
    LastRow& = S.Cells.Find(What:="?", After:=R, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastCol& = S.Cells.Find(What:="?", After:=R, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    If Err <> 0 Then Exit Sub
    On Error GoTo 0
    Set R = S.Range(S.Cells(1, 1), S.Cells(LastRow&, LastCol&))
    MsgBox "Adresse de la plage des données : " & R.Address & _
            vbCrLf & "Dernière ligne renseignée : " & LastRow& & _
            vbCrLf & "Dernière colonne renseignée : " & LastCol&
    End Sub
    Il n'y a plus qu'à lancer la macro GetClasseur.
    Par la suite, à vous d'aménager le code pour qu'il corresponde à vos besoins (voir les commentaires "à adapter").

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci PMO2017 pour ton code, mais celui-ci ouvre puis ferme le classeur excel cible, ce qui dans mon cas ne corespond pas à mon besoin, j'ai une centaine de classeurs à traiter.

    Je suis à la recherche d'une code qui me permét d'avoir l'info sans ouvrir les classeurs.

    Mon code à ce jour passe pour le reste de mes réquétes par OLE DB Microsoft Jet.

    Donc pour être plus précis, est il possible par cette méthode d'avoir l'info de la dérnière ligne non vide d'une collone.

    Désolé de ne pas avoir été plus claire dans ma demande initiale.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu lu ce tutoriel Lire et écrire dans les classeurs Excel fermés et tout particulièrement ce chapitre Les limites d'Excel utilisé comme une base de données ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    oui, j'ai déjà longuement consulté cette page. Qui m'à été d'une grande aide pour la conception du reste de mon code.

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Points : 88
    Points
    88
    Par défaut
    Bonjour,

    Donne le nb de lignes d'une BD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub CompteLignes()
      Set cnn = New ADODB.Connection
      cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & ThisWorkbook.Path & "\" & "ADOsource.xls"
      Set rs = cnn.Execute("SELECT count(*) as nb FROM [Feuil1$A1:C1000]")
      n = rs("nb")
      MsgBox n
      rs.Close
      cnn.Close
      Set rs = Nothing
      Set cnn = Nothing
    End Sub
    Si le but est d'ajouter des enregistrements en fin de BD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Sub AjoutEnregistrement()
      repertoire = ThisWorkbook.Path & "\"
      Set cnn = New ADODB.Connection
      fichier = repertoire & "ADOsource.xls"
      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Extended Properties=Excel 8.0;"
      Set rs = New ADODB.Recordset
      rs.Open "SELECT * from [Feuil1$A1:C1000]", cnn, adOpenDynamic, adLockOptimistic
      rs.AddNew
      rs(0).Value = "Durand"
      rs(1).Value = "Jean"
      rs(2).Value = 3400
      rs.Update
      rs.Close
      cnn.Close
    End Sub
     
    ou
     
    Sub ajout()
      repertoire = ThisWorkbook.Path & "\"
      Set cnn = New ADODB.Connection
      fichier = repertoire & "ADOsource.xls"
      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fichier & ";Extended Properties=Excel 8.0;"
      Sql = "INSERT INTO [Feuil1$A1:C1000] (Nom,Prenom,salaire) Values('titi','jean',4000)"
      cnn.Execute Sql
      cnn.Close
    End Sub
    Ceuzin

  7. #7
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour ce code qui fonctionne parfaitement.

    Juste pour information, le n° de ligne doner par ce code me donne pas la dérnière ligne mais l'avant dernière, ce qui par :
    n = rs("nb") + 1
    me permet un fonctionement parfait.

    Merci beaucoup.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour Sophieceuzin,
    Serait-ce le nouveau pseudo de Jacques boisgontier ?
    Voilà plusieurs interventions de ta part où je remarque la copie intégrale de ses codes et même le dépôt de ses classeurs en guise d'exemple.
    Le minimum dans ces cas là est de citer son auteur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Verrouillage cellule non vide dans un classeur
    Par ZHNEE dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 03/02/2015, 17h18
  2. [XL-2007] Dernière valeur non vide dans un ensemble de cellules
    Par romromain dans le forum Excel
    Réponses: 2
    Dernier message: 13/06/2011, 15h17
  3. Réponses: 6
    Dernier message: 10/03/2011, 09h37
  4. [AC-2003] Tester si une cellule est vide dans un classeur excel et faire une boucle
    Par moilou2 dans le forum VBA Access
    Réponses: 11
    Dernier message: 19/08/2009, 09h34
  5. Réponses: 5
    Dernier message: 22/02/2008, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo