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 :

Problème de sélection de feuilles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut Problème de sélection de feuilles
    Bonjour,

    Voilà quelques mois que je me mets à faire des petits programmes et je bute encore sur un problème qui j'en suis sûr est une évidence pour vous.
    J'ai un bout de code qui s'exécute sur une feuille (appellons la "feuil1"). Ensuite, je souhaite copier des données de "feuil2" vers "feuil3", voilà ce que j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveSheet = Sheets("feuil2")
            Set Matrix = ActiveSheet.Cells
            Set MStart = Matrix.Find("Account Number")
            Set Matrix = Range(MStart, MStart.End(xlToRight).End(xlDown))
            Matrix.Copy
            Sheets("feuil3").Select
            Range("A1").Select
            ActiveSheet.Paste
        End With
    Ma dernière action avant ce code se situe sur la feuil1, mon problème est donc qu'à l'exécution de la macro, ça foire parce que elle (la macro) tente de repérer ma cellule MStart (donc toute ma matrice) sur la feuil1.
    Je pensais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ActiveSheet = Sheets("feuil2")
    me permettait de bien définir le rayon d'action du code situé entre les deux . Du coup, j'en viens à me dire "bon ben très bien, je vais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Select
    et n'en parlons plus, ça va marcher. Sauf que de ce que j'ai compris en lisant à droite à gauche, le .Select ne fait que ralentir la macro alors j'essaye d'en utiliser le moins possible (je sais, il y en a dans le code que j'ai collé, mais je débute alors...).

    Pouvez-vous m'expliquer pourquoi ma macro ne se fait pas sur ma feuil2 et comment bien utiliser le With avec les Sheets ?

    Merci d'avance !

    Runsh

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Au niveau de la déclaration de variables,il y a problème.

    Essaie ce code et reviens si nécessaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub essai()
    Dim Matrix As Range
    Dim MStart As Range
    With Sheets("feuil2")
            Set MStart = .Cells.Find("Account Number", LookIn:=xlValues)
            Set Matrix = Range(MStart, MStart.End(xlToRight).End(xlDown))
            Matrix.Copy Destination:=Sheets("feuil3").Range("A1")
        End With
    Application.CutCopyMode = False
    Set MStart = Nothing
    Set Matrix = Nothing
    End Sub

  3. #3
    Expert éminent 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
    Par défaut
    En effet, pas besoin des Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Sheets("Feuil2")
        Set c = .UsedRange.Find("Account Number")
        If Not c Is Nothing Then
            .Range(c, c.End(xlToRight).End(xlDown)).Copy Sheets("Feuil3").Range("A1")
            Set c = Nothing
        End If
    End With

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut remarque sélection
    D'autre part, j'aurais 2 remarques dont l'une a été reprise par l'ami mercatog dans son code

    1 - Cells peut être remplacé par UsedRange afin de gagner en performance

    2 - Je me méfie comme de la peste des End(xlDown) et End(xlTo Right)

    Voir tous les posts à ce sujet sur le forum, afin de définir la dernière cellule.
    Je sais que mercatog est d'accord.

    Voir cette discussion pour un aperçu des liens existants

    Ici

  5. #5
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Bonjour MarcelG, bonjour mercatog,

    Merci pour vos infos (ce n'est pas la première fois que vous m'aidez, c'est très appréciable). Vos deux solutions fonctionnent et je ne vais utiliser que l'une des deux, donc l'un de vous deux va être jaloux, je ne dirai pas lequel, je ne veux pas me brouiller avec vous ! Je plaisante... J'ai compris l'utilisation de With avec la feuille, c'est mon "Active" qui a tout fait loupé chez moi.
    Ce qui me surprend : l'utilisation de .Copy sans le .Paste, et malgré ça les données sont copiées correctement ! J'ai du mal à comprendre mais ça marche alors... Surtout dans ton code mercatog car nulle part je ne vois le "Destination:=" qui présent dans le code de MarcelG.

    Quoiqu'il en soit, encore un grand merci à vous deux, vous n'êtes pas étrangers aux progrès que j'ai réalisé depuis deux mois même si le chemin qu'il me reste à parcourir pour maîtriser correctement VB est encore sacrément long.

    MarcelG,

    Je suis la personne à qui tu as déja répondu avec le lien proposé sur un post dont je suis l'auteur (post d'il y a quelques jours) et qui s'intitulait "Problème avec l'adressage d'une formule" ou un truc du genre.
    Je comprends parfaitement ta méfiance avec mes .End et la partage mais pour cette macro là car :

    - La cellule "Account Number" est une ligne d'en-tête et tous les en-têtes sont renseignés. Ma dernière colonne contient des montants, qui même lorsqu'ils sont à 0, sont indiqués, et jamais vides !

    - Suite à tes excellents liens (celui d'Ousskelnord notamment), j'aime utiliser le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:" & Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy
    qui est très pratique. Seulement pour le fichier que je manipule là, je ne sais pourquoi mais au lieu de me copier "A1:J2500" par exemple, il estime que la dernière cellule se trouve certe sur la bonne colonne mais il me prend jusqu'à la ligne 15.000 !! Alors qu'il n'y a rien du tout... Mon fichier est issue d'une extraction de logiciels type BO, alors est-ce que ça vient de là... Aucune idée. Quoiqu'il en soit, voilà pourquoi j'utilise les .End ici.

    Merci quand même pour tes explications et remarques constructives.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Disons que dans le code de mercatog, la méthode

    est tacite, car non obigatoire.

    Personnelement, je ne l'utilise pas mais je la fais toujours figurer dans une réponse.

    C'est le même cas de figure avec la propriété Value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavaleur = Range("A10").Value
    signifie la même propriéte que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavaleur = Range("A10")
    C'est une question de choix, ...... et de débats aussi.

  7. #7
    Membre éclairé Avatar de Runsh63
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2011
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 476
    Par défaut
    Merci beaucoup pour toutes ces infos qui me sont vraiment utiles. Bonne fin de journée et bon WE !

    Au plaisir d'un futur post ^^

    Runsh

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

Discussions similaires

  1. [XL-2010] Problème de chemin sur sélection de feuille
    Par Arnaud41 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/11/2012, 09h57
  2. [VBA Excel] problème de sélection de feuilles
    Par fab011 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/06/2007, 15h09
  3. Réponses: 3
    Dernier message: 08/03/2007, 17h25
  4. [VBA] Problème de sélection de feuille
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2005, 10h44
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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