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 :

derniers éléments range


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut derniers éléments range
    Bonjour à tous,

    Alors voilà, d'habitude j'y arrive plutôt bien mais là je galère depuis quelques heures à trouver une solution.

    J'ai une plage de données totalement aléatoire (ça peut être une cellule quelconque, une ligne entière, une colonne entière, la moitié d'une ligne, toute la feuille ou encore la plage C45:F956), bref vous l'aurez compris, totalement aléatoire.

    Mon problème c'est que j'ai besoin de connaître la ligne contenant une cellule non vide, ainsi que la dernière colonne contenant une cellule non vide.

    J'ai actuellement ce code, et dans la mesure du possible, un peu d'aide serait la bienvenue
    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
     
    public sub maxs(plage as string)
        Dim i As Long maxLignes As Long, maxColonnes As Long, temp As Long
        Set rng = Range(plage)
        maxLignes = 0
        maxColonnes = 0
        For i = 1 To rng.Columns.Count
            temp = rng.Range(rng.Rows.Count, i).End(xlUp).Row
            If temp > maxLignes Then maxLignes = temp
        Next i
        For i = 1 To rng.Rows.Count
            temp = rng.Range(rng.Rows.Count, i).End(xlToLeft).Column
            If temp > maxLignes Then maxLignes = temp
        Next i
    end sub
    Pour la petite question, l'erreur actuelle vient des lignes suivantes (même erreur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = rng.Range(rng.Rows.Count, i).End(xlUp).Row
    Il semblerait que ce soit à cause de l'utilisation du end. Pour plus de précision, il s'agit de l'erreur 1004 : Erreur définie par l'application ou par l'objet.

    Merci d'avance

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

    Informations professionnelles :
    Activité : salarié

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

    Citation Envoyé par jeanmidudu Voir le message
    Mon problème c'est que j'ai besoin de connaître la ligne contenant une cellule non vide, ainsi que la dernière colonne contenant une cellule non vide.

    - tu veux dire la PREMIÈRE ou la DERNIÈRE ligne, contenant une cellule non vide ?
    - Comment est définie ta plage au départ ?

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    en passant je vois déjà un problème de logique entre les lignes de code n°11 & 12 :
    en ligne 11 la variable i pointe une ligne et en ligne 12 cette variable est utilisée comme colonne !

    Sinon une boucle ne s'avère même pas nécessaire via la méthode Range.Find, voire peut-être via la méthode SpecialCells


    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    J'ai besoin de connaître la dernière ligne non vide (désolé pour le mot manquant)
    Et voilà le code avec la petite correction (mais qui ne change rien)
    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
     
    public sub maxs(plage as string)
        Dim i As Long maxLignes As Long, maxColonnes As Long, temp As Long
        Set rng = Range(plage)
        maxLignes = 0
        maxColonnes = 0
        For i = 1 To rng.Columns.Count
            temp = rng.Range(rng.Rows.Count, i).End(xlUp).Row
            If temp > maxLignes Then maxLignes = temp
        Next i
        For i = 1 To rng.Rows.Count
            temp = rng.Range(i, rng.Columns.Count).End(xlToLeft).Column
            If temp > maxLignes Then maxLignes = temp
        Next i
    end sub

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Cela change déjà : il n'y a plus de message d'erreur !

    Sinon en persistant dans une boucle inutile (pourquoi deux boucles ?! Inutile via la méthode Range.Find …),
    la logique est de boucler par colonne, de voir son numéro de dernière ligne non vide
    et de le conserver s'il est supérieur à la variable utilisée pour stocker ce numéro de dernière ligne …

    A noter la propriété End - entre autres - ne fonctionne pas bien s'il y a des formules dans les cellules
    renvoyant une valeur vide (ou pour les cellules vides formatées ou ayant été utilisées même si elles sont vides)

    après la dernière cellule non vide : dans ces cas seule la méthode Find est fiable comme expliqué dans la
    ou encore parmi les discussions de ce forum comme par exemple celle-ci

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Pour ma part, j'ai toujours le même message d'erreur ligne 8 puis ligne 12.

    Ensuite, comme je l'ai précisé, il y a 2 boucles car j'ai besoin de connaître la dernière cellule non vide pour déterminer la ligne maximale, mais aussi la colonne maximale (donc 2 boucles, une pour la ligne, une pour la colonne). Les deux boucles sont donc nécessaires, une pour les lignes, une pour les colonnes.

    J'ai également essayé la méthode find, mais étant donné que j'ai des cellules avec des erreurs, celle-ci me retourne une erreur en passant sur une cellule contenant une erreur.

    Je ne savais pas que end posait problème avec des formules, et c'est un problème ici, car les cellules peuvent être vides, contenir des formules (dont des formules qui retournent des erreurs), des dates, du texte, ... bref absolument tous les types de données possibles.

    Donc je suis pour l'utilisation de la méthode find, mais comment lui faire prendre en compte les cellules contenant des erreurs?

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

Discussions similaires

  1. Copie dernier élément de chaque type, sur la feuille suivante
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 26/07/2006, 09h59
  2. Réponses: 10
    Dernier message: 09/06/2006, 17h02
  3. [PL/SQL] Curseur - Récupération du dernier élément
    Par dupont166 dans le forum Oracle
    Réponses: 5
    Dernier message: 27/12/2005, 04h57
  4. for-each et dernier élément
    Par neptune dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/09/2005, 14h53
  5. Comment récupérer l'index du dernier élément inséré ?
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 22h41

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