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 :

Adresse dernière ligne dernière colonne d'un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Adresse dernière ligne dernière colonne d'un tableau
    Bonjour !

    J'ai écris une macro qui importe des données dans un tableau à partir de plusieurs autres classeurs. Ces classeurs source sont mis à jour sur une base régulière.

    Je voudrais ajouter une ligne pour qu'au lancement, la macro efface les données contenues dans le tableau avant de s’exécuter normalement.

    La macro en question va chercher les nouvelles données et remplace les anciennes. Mais cela me pose problème car si il manque une donnée dans la mise à jour, la macro va laisser l'ancienne donnée au lieu de ne rien mettre ; je ne peux donc pas voir les données qui manquent dans la mise à jour car je n'ai aucun "trou".

    J'ai écris ce code qui est sensé trouver la dernière ligne et la dernière colonne de mon tableau (il peut évoluer).
    Mon tableau à l'heure actuelle = "E5:AP43" ; DerCol renvoi bien 42 et DerLig renvoi bien 43.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
    With Sheets(1)
    SH2 = .Range("D2").Value
     
    DerCol = Sheets(SH2).Range("XFD3").End(xlToLeft).Column
    DerLig = Sheets(SH2).Range("A1048576").End(xlUp).Row
     
    Sheets(SH2).Range("E5:" & DerCol & DerLig).ClearContents
     
    End With
     
    End Sub
    Je pense que la syntaxe n'est pas correcte car cela ne fonctionne pas.

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Marianne, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim S As Worksheet
    Dim DerCol As Integer
    Dim DerLig As Integer
     
    On Error Resume Next
    Set S = Worksheets(Sheets(1).Range("D2").Value))
    If Err <> 0 Then Exit Sub
    DerCol = S.Cells(3, Application.Columns.Count).End(xlToLeft).Column
    DerLig = S.Cells(Application.Rows.Count, "A").End(xlUp).Row
    S.Range(S.Cells(5, "E"), Cells(DerLig, DerCol)).ClearContents
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    Sheets(SH2).Range("E5:" & DerCol & DerLig).ClearContents
    ben non ca n'est pas correct

    dercol et derlig sont des long(numerique)
    c'est comme si tu avais ecrit
    Sheets(SH2).Range("E5:" & 10 & 20).ClearContents
    ca ne peut donc pas fonctionner
    si tu veux effacer tout de E5 a la cellule (derlig,dercol)
    il faut l'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(SH2).Range("E5:" ,cells( DerLig,DerCol)).ClearContents
    Attention selon TON !!! derlig et dercol il n'est pas forcé que c'a efface tout a partir de E5 en effet la colonne etant determinée par xltoleft d'une ligne et derligne etant determinée par la derniere de "A"

    maintenant si tu veux supprimer tout de E5 a la derniere cellule remplie(pas besoins de dercol ou derlig et compagnie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets(SH2)
    .Range("E5", .UsedRange.Cells(.UsedRange.Cells.Count)).ClearContents
    End With
    suis-je assez clair ou pas ?

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Points : 26
    Points
    26
    Par défaut
    Merci Thautheme et merci patricktoulon pour votra aide !

    Je savais que ça n'était pas correcte mais je ne savais pas comment l'écrire...

    J'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(SH2).Range(Cells(5, 5), Cells(DerLig, DerCol)).ClearContents
    et ça fonctionne !

    J'ai 2 questions pour patricktoulon :

    Attention selon TON !!! derlig et dercol il n'est pas forcé que c'a efface tout a partir de E5 en effet la colonne etant determinée par xltoleft d'une ligne et derligne etant determinée par la derniere de "A"
    Vrai même si ma ligne 3 est une ligne "titre" et ma colonne A une colonne "critères" et qu'elles sont forcément non vide (c'est à dire qu'elles "bornent" forcément le tableau) ?

    maintenant si tu veux supprimer tout de E5 a la derniere cellule remplie(pas besoins de dercol ou derlig et compagnie)
    Ton code fonctionne même si j'ai des cellules / lignes / colonnes vides dans mon tableau ?

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Marianne Hbt Voir le message

    J'ai 2 questions pour patricktoulon :


    Vrai même si ma ligne 3 est une ligne "titre" et ma colonne A une colonne "critères" et qu'elles sont forcément non vide (c'est à dire qu'elles "bornent" forcément le tableau) ?


    Ton code fonctionne même si j'ai des cellules / lignes / colonnes vides dans mon tableau ?

    tu veux effacer a partir de la cellule "E5"

    donc soit tu fait .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .range("E5",cells(x,y).clearcontents
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .range(cells(5,5),cells(x,y).clearcontents
    les deux versions ci dessus efface toute les cellule de la "E5" a la cells(x,y) les colonnes "A B C D" ne sont pas touchées
    de meme qu'avec la version avec usedrange

    et oui!! meme si entre deux il y a des cellule vides

    ce que j'ai essayé de t'expliquer pour (xltoleft) que tu utilise et la raison pour la quelle tu y fasse attention
    c'est si cette ligne n'est pas remplie jusqu'a la colonne d'une des liggnes au dessus ou en dessous ton clear s'arrètera la et n'yra pas jusqu'au bout de tout les colonnes que tu vise pour dercol
    exemple ici si je prend la cellule "f7" xltoleft je n'effacerait pas la colonne "G"

    Nom : Capture.JPG
Affichages : 1363
Taille : 78,6 Ko

    d'ou le besoins de bien determiner ce que tu veux faire et utiliser les bon outils

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Citation Envoyé par Marianne Hbt Voir le message


    J'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(SH2).Range(Cells(5, 5), Cells(DerLig, DerCol)).ClearContents
    et ça fonctionne !
    Non pas à tous les temps que SH2 est la feuille active

    il faudrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(SH2).Range(Sheets(SH2).Cells(5, 5), Sheets(SH2).Cells(DerLig, DerCol)).ClearContents
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets(SH2)
           .Range(.Cells(5, 5), .Cells(DerLig, DerCol)).ClearContents  ' Attention aux points
    End With

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oui aussi bien vu mercatog
    d'ou mon exemple dans un bloc with

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Points : 26
    Points
    26
    Par défaut
    Merci patricktoulon pour tes explications, et merci mercatog j'ai effectivement ajouté le with !

    Merci pour votre aide en général, cela fait quelques mois que j'essaie d'apprendre en autodidacte et ce n'est pas toujours évident... je bloque encore sur des syntaxes assez simples parfois.

    Je passe cette discussion en résolu, bonne journée !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2012, 19h10
  2. [XL-2003] Récupérer une cellule de la dernière ligne non vide d'un tableau
    Par christoff916 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/08/2011, 14h22
  3. Réponses: 6
    Dernier message: 10/03/2011, 09h37
  4. Réponses: 2
    Dernier message: 01/10/2008, 11h45
  5. dernière ligne et colonne NON VIDE
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2007, 18h10

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