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 :

Connaitre les coordonnées cartésienne de dernière cellule occupée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut Connaitre les coordonnées cartésienne de dernière cellule occupée
    Bonjour,

    La fonction sur laquelle je travaille remplit des données dans une feuille. Le nombre de lignes de ces données est variable.
    A la fin, je souhaite copier la totalité de ces données. Dès lors, comment savoir quel x utiliser ?

    Pour l'instant ma sélection ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 2), Cells(x, 4)).Select
    Comme vous pouvez le voir le début de la zone à copier est invariable. En revanche, il me manque ce x qui en fait correspond au x de la dernière cellule contenant quelque chose dans la feuille.

    Je suppose qu'il existe quelque chose de très simple pour ça, mais je ne sais pas quoi ^___^

    Merci d'avance.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 2), Cells(Range("D65536").end(xlup).row, 4)).Select
    Avec ça tu sélectionnes la plage de la cellule B2 : D et dernière ligne
    Mais tu sais sans doute que pour écrire par macro dans une cellule il n'est jamais besoin de la sélectionner. Sinon, si tu ne sais pas, montre-nous + de code pour savoir ce que tu fais et on te montrera

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Essaye ca, ca devrait le faire, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 2), Cells(2, 4).End(xlDown)).Select
    Edit: grillaid
    ReEdit: ouskel'n'or passe par le bas, moi par le haut, si ya plusieurs tableaux sur la page et qu'il veut que le premier ca va pas le faire

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par Lameth
    ca devrait le faire, non?
    Si ! sauf s'il peut y avoir une cellule vide dans la colonne D

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    Pourquoi un 2 en x dans la version de Lameth et un "D65536" dans celle de ouskel'n'or ? Pouvez vous m'expliquer en détail ?

    edit : ah j'ai compris la version de ousk

    Le select c'est pour une copie, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton2_Click()
        'macro d'exportation : copie l'import de CATIA dans un fichier texte sur le bureau. Créé par François Gallé.
        Range(Cells(2, 2), Cells(x, 4)).Select 'sélectionne la zone à copier
        Selection.Copy 'copie la zone
        Workbooks.Add 'ouvrir un nouveau classeur
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False 'coller la copie
        Application.CutCopyMode = False
    ...

    edit : le y est fixe.

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Tout a fait ouskel'n'or!

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par Zak Blayde Voir le message
    Pourquoi un 2 en x dans la version de Lameth et un "D65536" dans celle de ouskel'n'or ? Pouvez vous m'expliquer en détail ?

    Le select c'est pour une copie, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton2_Click()
        'macro d'exportation : copie l'import de CATIA dans un fichier texte sur le bureau. Créé par François Gallé.
        Range(Cells(2, 2), Cells(x, 4)).Select 'sélectionne la zone à copier
        Selection.Copy 'copie la zone
        Workbooks.Add 'ouvrir un nouveau classeur
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False 'coller la copie
        Application.CutCopyMode = False
    ...
    Ton tableau part de la ligne 2 correct? En colonne 4 ton tableau commence ligne 2 et finit ligne x. Donc tu dis a VBA de partir de 2 et d'aller jusqu'a la fin...

    ouskel'n'or, lui te fait remonter de la dernierre cellule possible de la colonne 4 jusqu'a la derniere ligne occupee en colonne 4, celle de ton tableau.

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    A Lameth : S'il y a plusieurs tableaux et que cells(2,2) est la première cellule, qu'il n'y a pas de colonne ou de ligne entièrement vide dans son tableau, (ouf !) alors Zak Blayde aurait intérêt à utiliser Cells(2,2).currentRegion

    Zak Blayde, Lameth te donne l'explication : Je passe par le bas pour trouver la dernière cellule renseignée de ta colonne D tandis que Lameth cherche la même chose en se fiant à première cellule vide de ta colonne. Lis nos échanges, tu comprendras

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    La version de Lameth ne me sélectionne que B25 alors que j'ai des données jusqu'en D38. J'ai oublié de préciser qu'il y avait des trous dans ma plage.

    La version de ouskel'n'or ne m'a sélectionné que jusqu'à D32 car il n'y a rien ensuite en d mais en b et c si
    En fait la dernière ligne remplie n'a pas forcément de données en d.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Maintenant, pour ne rien sélectionner pour faire la même chose avec ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton2_Click()
        'macro d'exportation : copie l'import de CATIA dans un fichier texte sur le bureau. Créé par François Gallé.
    Dim FL1 as worksheet
    Dim FL2 as worksheet
        Set FL1 = activesheet
        Workbooks.Add 'ouvrir un nouveau classeur
        Set FL2 = activesheet
        FL1.Range(Cells(2, 2), Cells(range("D65536").end(xlup).row, 4)).Copy 
        FL2.range("A1").PasteSpecial Paste:=xlPasteValues 'coller la copie
    Plus de déclarations en instanciant tes feuilles mais pas de mouvement de feuille
    Tu peux aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.screenUpdating = false 'en début de code
    'et
    Application.screenUpdating = True 'en fin de code

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    J'ai corrigé mon code précédent en insérant un saut de ligne qui avait "sauté"
    Tu as testé ?
    A+
    Oui cela fonctionne mais tu n'as pas vu mon message précédent. Ma feuille contient des trous. Les dernières lignes occupées ont des valeurs en B ou en C mais pas en D. Donc ces valeurs sautent puisque c'est D qui sert de repère.
    D doit bien être dans la plage, mais jusqu'à la dernière ligne contenant une valeur en B ou C plutôt.

    Ma feuille ressemble à ça : http://img141.imageshack.us/img141/8...hunter1no4.jpg
    Il en manque une partie et tout n'est pas pris dans la plage. Là il faudrait que la plage s'arrête en D38 par exemple.

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Si tu n'as pas de ligne ou colonne entièrement vide, que la colonne D de la plage est la dernière colonne renseignée, utilise CurrentRegion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FL1.Range("B2").CurrentRegion.Copy
    Tu dis
    A+

    Je viens de voir ta feuille, current region ne fonctionnera pas, utilise Usedrange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FL1.Range("B2:" & Split(FL1.UsedRange.Address(0, 0), ":")(1)).Copy

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Je viens de voir ta feuille, current region ne fonctionnera pas, utilise Usedrange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FL1.Range("B2:" & Split(FL1.UsedRange.Address(0, 0), ":")(1)).Copy
    Ca fonctionne. Ligne impressionnante

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

Discussions similaires

  1. [XL-2010] Coordonnées de la dernière cellule occupée
    Par Taiby dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/02/2014, 17h05
  2. Connaitre les coordonnées système d'un Control
    Par Mickael Baron dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 15/12/2006, 15h17
  3. Connaitre les coordonnées d'un div dragable
    Par bat2504 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/07/2006, 18h53
  4. Connaitre les coordonnées d'un div ...
    Par DemonKN dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/05/2006, 11h04
  5. [VBA-E] Connaitre les coordonnées de la cellule ou l'on est
    Par Nicos77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/03/2006, 16h38

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