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 :

Identifier et exploiter les coordonnées d'une cellule variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2019
    Messages : 12
    Par défaut Identifier et exploiter les coordonnées d'une cellule variable
    Bonjour à vous tous,

    Je dois manier plusieurs tableaux de tailles différentes dans de nombreuses feuilles, du style copier/coller. Mon objectif principal est d'éviter à devoir faire les C/C à la main.

    Pour le moment je cherche simplement à sélectionner le tableaux entier, sachant que :
    - Il n'y a qu'un tableau par feuille
    - Le nombre de ligne est variable
    - La colonne de gauche, de droite et la première ligne sont fixes :
    C'est-à-dire que la premier ligne est toujours la n°2, que la première colonne est la B et que la dernière est la J

    Afin d'identifier la dernière ligne et de trouver la dernière case rempli de la dernière colonne, j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveCell.SpecialCells(xlLastCell).Select 'Sélectionne la dernière case du tableau tout en bas à droite  
    ActiveCell.Offset(-1, -4).Select 'Corrige un décalage que j'explique par une mise en forme des cellules (inintéressant pour moi)
    L'idée serait de sélectionner la case active et B2, de cette manière le tableau serait sélectionné...

    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(B2,ActiveCell).Copy
    Mais ça marche pas... Des suggestions ?

    Merci d'avance pour votre aide en espérant avoir été assez clair pour vous..

  2. #2
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    J'ai une solution avec une hyptohèse: tu n'as pas de ligne completement vide dans ton tableau ou tu connais la taille max d'un tableau.

    Tu peux créer une matrice (Array) de type variant avec un taille max arbitraire (assez grande pour contenir n'importe lequel de tes tableaux).
    Ensuite, tu fais une boucle qui copie la ligne courante de la feuille à copier dans la premiere ligne de ta matrice jusqu'à avoir atteint une ligne vide ou la taille max de ton tableau (en fonction de ce qui marche) en incrémentant la ligne courante.
    et après tu recopies le contenu de ton array dans ta feuille de destination avec une boucle en incrémentant la ligne de la matrice et une condition sur ligne de l'array vide ou taille max d'un tableau atteinte dans l'array.

    Après je suis sur que ponte de l'Excel va nous sortir une solution en trois ligne avec de vrais fonction Excel VBA

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Dev_noob Voir le message
    Pour le moment je cherche simplement à sélectionner le tableaux entier, sachant que :
    - Il n'y a qu'un tableau par feuille
    - Le nombre de ligne est variable
    - La colonne de gauche, de droite et la première ligne sont fixes :
    C'est-à-dire que la premier ligne est toujours la n°2, que la première colonne est la B et que la dernière est la J
    Il y a de nombreuses solutions, par exemple en passant par un Cell(Rows.Count, "B").End(xlUp) mais comme tu ne dis pas s'il y a une colonne dont on est sûr qu'elle est remplie dans la dernière ligne, je préfère opter pour une solution plus fiable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Fin As Long
    Fin = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
    Range("B2:J" & Fin).Copy
    On pourrait se passer de la variable intermédiaire mais ça fait plus propre écrit comme ça.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2019
    Messages : 12
    Par défaut
    Merci beaucoup à vous deux, vous m'avez beaucoup aidé,
    Menhir, ton code correspond parfaitement à mes attentes !

    Encore merci !

  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
    Billets dans le blog
    8
    Par défaut re
    bonjour
    perso pour moi la question est soit mal formulée soit un gros trou dans le raisonnement

    un tableau c'est une cellule de début et une cellule de fin QU IL SOIT REMPLI OU NON !!!

    usedrange.specialcells(xllastcel)
    te donnera la dernière utilisée du usedrange etpas forcement celle du tableau!!!

    si tu devais par exemple c/c ton tableau pour le completer dans une autre feuille ....ben tu est justement dans le trou car tu n'aurais pas les lignes vides au départ avec leurs mises en formes etc....





    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    La propriété qui renvoie un tableau complet à partir d'une de ses cellules c'est .CurrentRegion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("B2").CurrentRegion.Copy

  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
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir patrice
    et ben non c'est pas bon non plus car avec currentregion des qu'une cellule n'est plus entourée d'autre valeurs currentregion s'arrête
    conclusion bonnet blanc/blanc bonnet
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    MsgBox Range("A1").CurrentRegion.Address
    End Sub
    Nom : Capture.JPG
Affichages : 302
Taille : 53,9 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re
    Citation Envoyé par patricktoulon Voir le message
    bonsoir patrice
    et ben non c'est pas bon non plus car avec currentregion des qu'une cellule n'est plus entourée d'autre valeurs currentregion s'arrête
    conclusion bonnet blanc/blanc bonnet
    Non, dans ce cas il ne s'agit plus d'un tableau !!!!
    Je n'ai pas parlé de plage de cellules :
    Citation Envoyé par Patrice740 Voir le message
    ... qui renvoie un tableau ...
    Un tableau ne comporte ni ligne entièrement vide, ni colonne entièrement vide !

  9. #9
    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
    Billets dans le blog
    8
    Par défaut re
    re
    @patrice
    je ne pense pas que le demandeur parle de tcd ou tableau structuré mais bien de range ,parce que sinon la question elle même serait inutile car un tableau porte un nom ( pas besoins d'aller chercher la first et lastcell)
    et entre parenthèses un tableau structuré peut très bien avoir une ligne ou une colonne vide
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    je ne pense pas que le demandeur parle de tcd ou tableau structuré
    Moi non plus !
    Simplement d'une plage de données non interrompue qu'Excel identifie automatiquement comme un tableau, sur lequel il peut mettre un filtre, faire un tri, etc ... sans qu'il soit nécessaire d'en préciser la dimension, ce qui, bien évidemment, s'applique aussi aux autres tableaux (structurés, croisés dynamiques) mais pas seulement.

  11. #11
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il doit y avoir une bonne douzaines de façon de trouver la limite basse d'une liste de données.
    Mais sans savoir exactement à quoi ressemble les données sources, il est impossible de donner une formule qui délimitera à coup sûr cette liste.

    La formule que j'ai donné avec UsedRange était "a maxima" mais ne fonctionnera pas s'il y a des cellules occupées après la liste traitée.
    Une formule avec CurrentRegion est "a minima" mais ne fonctionnera pas s'il y a trop de "trous" dans les données.
    Impossible d'utiliser End sans savoir quelle colonne peut servir de référence.
    Idem pour la poignée d'autres. Chacune peut ne pas fonctionner en fonction des cas de figure.

    Il est impossible de savoir quelle est la meilleure sans connaitre le remplissage des données sources.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je ne peux qu'être d'accord avec Patrice. Si on parle d'un tableau, CurrentRegion fait parfaitement l'affaire, car un tableau ne comporte pas de ligne ou de colonne entièrement vide. Et je ne parle ici ni de TCD ni de table de données.

    Les autres cas illustrés ne parlent pas de tableaux, mais de données éparses dans la feuille, et dans ce cas, il faudra utiliser UsedRange comme le préconise Menhir.




    Citation Envoyé par patricktoulon Voir le message
    [...]
    et entre parenthèses un tableau structuré peut très bien avoir une ligne ou une colonne vide
    Il est impossible d'avoir une colonne entièrement vide dans un tableau structuré. En effet, un tableau structuré impose que chaque colonne ait un intitulé, ce qui empêche la colonne entièrement vide. (cfr ce point de mon tuto sur les tables de données, ainsi que celui-ci)

    Pour ce qui est d'avoir une ligne entièrement vide, c'est possible, mais largement déconseillé, car tout comme il serait à mon avis anormal d'avoir une fiche vierge en plein milieu de tas de fiches complétées, cela n'a pas de sens d'avoir une ligne vide en plein milieu de lignes remplies, et cela complique le traitement des données, notamment par formules (cfr ce point de mon tuto sur les tables de données)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [XL-2003] fonction qui renvoit les coordonnées d'une cellule (As Range)
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/12/2011, 08h56
  2. Retourner les coordonnées d'une cellule excel
    Par boboch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 23/11/2011, 19h53
  3. Décrypter les coordonnées d'une cellule
    Par Adilleroy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/05/2010, 12h08
  4. [E-02] Définir les coordonnées d'une cellule en fonction de son contenu
    Par Karatégirl77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2009, 14h52
  5. listview : Recupérer les coordonnées d'une cellule
    Par gritchou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/05/2008, 19h22

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