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 une plage sur une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : avril 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut trouver une plage sur une autre feuille
    Voila, je dois me servir de donnée situées dans, par exemple, la feuille2, je suis sur la feuille1 et le script est lancé à partir de la feuille1.

    Les donnée sur le feuilles deux ne sont pas à un endroit fixe. Afin de délimiter ces données j'ai placé sur la ligne au dessus dans la cellule A le mot limitU et sur la ligne du dessous encore dans la cellule A limitD.

    Alors, comment ferais-je pour a partir du script de la feuille 1 pour trouver ces cellules dans la page deux?

  2. #2
    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
    la dernière ligne remplie de la colonne A de Feuil2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig=sheets("Feuil2").cells(sheets("Feuil2").rows.count,1).end(xlup).row
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : avril 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par mercatog Voir le message
    la dernière ligne remplie de la colonne A de Feuil2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig=sheets("Feuil2").cells(sheets("Feuil2").rows.count,1).end(xlup).row
    Ce n'est malheureusement pas ce que je cherche, je veux trouver un endroit particulier, pas la dernière ligne ou la première. Je ne sais pas non plus combien de lignes y seront contenu, Donc ma plage pourrais être par exemple:

    E1:H8 la première fois
    H1:M8 la seconde
    C1:E8 la troisième...

    Je ne sais pas ou elle se situera quand je ferai mon script. Le script doit donc d'abord trouver cette plage et ensuite se servir du data qui s'y trouve.

    Il y a des éléments au dessus et en dessous.

    Pour délimiter la plage j'ai mis limitU dans la première cellule (colonne A) de la ligne au dessus et limitD dans celle du dessous, le data sera toujours entre ces deux lignes:
    donc:
    D1=limitU
    E1 = première ligne contenant des données
    -
    -
    H1 = dernière ligne H8 = dernière colonne
    I1 = limitD

    Ça fait plus de sens?

    merci

  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 273
    Points
    15 273
    Par défaut
    Regarde ici, tu trouveras certainement le code qui te permettra de connaître la plage que tu cherches

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : avril 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Regarde ici, tu trouveras certainement le code qui te permettra de connaître la plage que tu cherches
    Assez excellent mais encore une fois si je comprend bien ça ne me permet pas de trouver quelquechose sinon que les limites en rapport avec mon contenu, ce qui en soi est très bien mais pas ce que je cherche. Donc si j'ai une plage de donnée sur la feuille 3 et qu'en dessous de celle-ci se trouve une autre plage de donnée aucune de ses routines me m'aidera à trouver la première, qui plus est je dois m'assurer que ma plage est à un endroit fixe ou démarre à un endroit connu.

    J'ai pensé faire une boucle qui trouve le mot limitU et assigne une variable à cette cellule, faire une seconde boucle qui trouve le mot limitD et assigne une variable à cette cellule. J'aurais donc ma plage, mais je suis assez débutant avec vba et je ne pige pas bien les boucles je crois. Dois-je sélectionner une cellule pour vérifier son contenu dans une boucle?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    do range("A1") select
    loop until activecell.formular1c1="limitU"
    Tourne très bien si je le fais à partir de la feuille2 sur la feuille2, mais pas si je le fais à partir de la feuille1 sur la feuille2, je crois car il contient "select", y-t'il une autre façon de faire sans activement sélectionner la cellule?

  6. #6
    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 273
    Points
    15 273
    Par défaut
    Tu n'as rien d'autre que "limitU" pour délimiter les plages ?
    Si tu n'as rien, alors utilise find sur ce mot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
    Dim c As Range
        With Worksheets("TuMetsLeNOmDeLaFeuille").Columns("A:A")
            Set c = .Find("limitU")
            If Not c Is Nothing Then
                  MsgBox "La ligne où se trouve limitU est la ligne N° " & c.Row
            End If
        End With
    End Sub
    Valable aussi bien pour une feuille que pour l'autre
    Après, tu dis si tu as besoin de trouver plein de mots on peut aussi le faire

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 969
    Points : 55 592
    Points
    55 592
    Billets dans le blog
    129
    Par défaut
    Salut.

    Sur le plan de la conception, il y aurait probablement des choses à revoir si tu veux que ton classeur soit évolutif et pérenne.

    Tu peux aussi (c'est ce que je te conseille ici) nommer tes cellules de début et de fin, par exemple en Debut et en Fin. Ainsi, tu détermines rapidement la plage via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim Plage as range
     
    set plage = range(feuil2.range("debut"), feuil2.range("fin"))
    Feuil2 étant le codename de ta feuille.

    Cela étant dit, aide-toi dans l'utilisation de VBA par une bonne conception de ton classeur et par l'utilisation d'outils Excel (plages nommées, fonction DECALER, ...)

    Sans réflexion, point de salut.
    Pense aussi que, si tu veux aller loin avec Excel, il est impératif de séparer les données de leur présentation, et vu ce que exposes, cela n'a pas été fait dans ton classeur.
    "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...
    ---------------

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : avril 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Tu n'as rien d'autre que "limitU" pour délimiter les plages ?
    Si tu n'as rien, alors utilise find sur ce mot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
    Dim c As Range
        With Worksheets("TuMetsLeNOmDeLaFeuille").Columns("A:A")
            Set c = .Find("limitU")
            If Not c Is Nothing Then
                  MsgBox "La ligne où se trouve limitU est la ligne N° " & c.Row
            End If
        End With
    End Sub
    Valable aussi bien pour une feuille que pour l'autre
    Après, tu dis si tu as besoin de trouver plein de mots on peut aussi le faire
    Je crois que ça y est!! Je rentre sous peu et pourrai tester... :]

    et tellement plus élégant qu'une boucle
    Mais non j'ai juste pensé à limitU, ou un mot, n'importe quel, y-a-t'il des méthodes plus appropriées?

    If not c is nothing then, me confond un peu, j'essaie de saisir la méthode pour m'en servir dans d'autres circonstances, au cas ou...
    Le else serait donc: il n'a pas trouvé une cellule contenant limitU?

  9. #9
    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 273
    Points
    15 273
    Par défaut
    If not c is nothing then
    Provient de l'aide en ligne à Find. Jète un oeil, les explications seront meilleures que les miennes.

    D'autres méthodes pour gérer des plages consécutives ?
    Pierre Fauconnier t'a indiqué les plages nommées mais sans connaître tes besoins... C'est à toi de définir une méthode qui te permette une mise à jour des données permettant une gestion pérenne de ton classeur.

    L'autre erreur signalée par Pierre et que commettent tous les débutants est de vouloir utiliser la base de donnée comme document final (il est impératif de séparer les données de leur présentation)
    Sans ton classeur on ne peut que supposer...

    Enfin, une chose qu'on oublie facilement est qu'Excel permet d'utiliser un nombre de feuilles de calculs le plus souvent bien supérieur à ses besoins : Profites-en ! Tu peux répartir tes données sur plusieurs feuilles sans incidence sur la lourdeur de tes applis.

    Bref, structure tes données afin de faciliter leur exploitation, non pour faire joli ni pour tout avoir dans la même feuille.

    Bon week-end

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : avril 2009
    Messages : 49
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.
    Tu peux aussi (c'est ce que je te conseille ici) nommer tes cellules de début et de fin, par exemple en Debut et en Fin. Ainsi, tu détermines rapidement la plage via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim Plage as range
     
    set plage = range(feuil2.range("debut"), feuil2.range("fin"))
    Feuil2 étant le codename de ta feuille.
    Croyez-moi je réfléchi mais sans formation il est plus ardu de s'y retrouver

    J'aime bien votre méthode mais elle ne semble pas fonctionner, par exemple je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub wow ()
    range("limit").select
    end sub
    et que je le place sur un bouton, ça ne sélectionne pas la cellule contenant le mots limit. Je croyais que c'était l'idée de votre suggestion...

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 969
    Points : 55 592
    Points
    55 592
    Billets dans le blog
    129
    Par défaut
    Ma méthode ne consiste pas à trouver une plage contenant une valeur. Cela, c'est la méthode proposée par Ouskel'n'or.

    Ma méthode consiste à nommer les cellules qui bornent tes données, et à utiliser ces plages nommées en VBA.

    Pour nommer la cellule Debut, tu te positionnes sur cette cellule, puis tu saisis le nom souhaité dans la zone des noms


    Cela étant, je reviens sur ce que tu as dit plus haut
    Citation Envoyé par needlesurfer Voir le message
    ...Donc si j'ai une plage de donnée sur la feuille 3 et qu'en dessous de celle-ci se trouve une autre plage de donnée aucune de ses routines me m'aidera à trouver la première, qui plus est je dois m'assurer que ma plage est à un endroit fixe ou démarre à un endroit connu....
    Je n'ai pas vu ton classeur, mais je crains un problème de conception au départ. Si tu souhaites une aide plus efficace, il sera nécessaire de préciser l'organisation de ton classeur, soit en mettant des copies d'écran, soit en mettant ton classeur.
    "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...
    ---------------

  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 273
    Points
    15 273
    Par défaut
    Citation Envoyé par needlesurfer Voir le message
    J'aime bien votre méthode mais elle ne semble pas fonctionner, par exemple je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub wow ()
    range("limit").select
    end sub
    et que je le place sur un bouton, ça ne sélectionne pas la cellule contenant le mots limit. Je croyais que c'était l'idée de votre suggestion...
    Non ! Cette méthode ne permet pas de trouver un mot dans une cellule mais de trouver une plage de cellules nommée. Dans Excel c'est -> Sélection de la plage -> Menu Insertion -> Nom -> Définir.
    Ainsi que le dit Pierre, tu peux nommer une cellule, une ligne ou une colonne plutôt qu'une plage et que cette cellule, ligne ou colonne te serve de repère dans la feuille. Mais jamais je n'utiliserais l'une ou l'autre méthode avant d'avoir examiné toutes les autres possibilités citées plus haut.

    Ceci dit, ta méthode avec un bouton permet de trouver un mot contenu dans une cellule en utilisant la recherche -> Pour ça, regarde Find dans l'aide VBA.

    A toi de voir la méthode qui convient le mieux à ton appli.

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 18h46
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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