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 :

Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^


Sujet :

Macros et VBA Excel

  1. #1
    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 Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^
    Je viens d'écrire, à l'intention d'un "lioné" ou d'un "ronien", une macro servant à copier les feuilles d'un classeur dans une nouvelle feuille crée pour l'occasion.
    La macro fonctionne sans anicroche mais je ne comprends pas ni pourquoi ni comment.
    La macro (En rouge la ligne "contestable" et contestée) :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub CopieToutesLesFeuillesAlaSuiteDansUneNouvelleFeuille()
    Dim LaFeuille As Worksheet
    Dim FL2 As Worksheet
        'WorkBooks("NomDuClasseurConcerné.xls").Activate          '-> A ADAPTER ***
        Set FL2 = ActiveSheet   'Feuille dont l'entête sera copiée -> A ADAPTER ***
        ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) 'Ajoute une feuille
        Set FL1 = ActiveSheet       'instancie la feuille
        FL1.Name = "FeuilleCumul"   'Renomme la feuille
        FL2.Rows(1).Copy destination:=FL1.Range("A1")
        For Each LaFeuille In ActiveWorkbook.Worksheets 'Passe toutes les feuilles en revue...
            If Not LaFeuille.Name = FL1.Name Then       '... à l'exception de la feuille créée
            
                'Copie de la plage de donnée de chaque feuille et collage à partir de la...
                '... première cellule vide de la feuille ajoutée
                'Corriger "A2" en "A1" si pas d'entête dans les feuilles copiées A ADAPTER ***
                LaFeuille.Range(LaFeuille.Range("A2:" & _
                LaFeuille.Range("A1").SpecialCells(xlCellTypeLastCell).Address).Address).Copy _
                destination:=Cells(FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1, 1)
                DoEvents
            End If
        Next
        'Copie du format de la feuille FL2
        'FL2.Cells.Copy
        'FL1.Cells.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                  'SkipBlanks:=False, Transpose:=False
        Set FL1 = Nothing 'libère la mémoire de l'instance
        Set FL2 = Nothing
    End Sub
    Au pas par pas, si je glisse la souris sur FL1.name (ligne en rouge) j'ai le message "Name = <Variable objet ou nom de bloc non défini>"
    Or la macro identifie bien la feuille.
    Si je supprime name après FL1, j'ai une erreur "blocante"
    Si je supprime name à LaFeuille et à FL1, itout.
    L'explication d'un érudit me siérait beaucoup
    Par avance, merci.

  2. #2
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    bonjour ouskel'nor

    je suis mort de rire
    c'est la premiere fois que je vois quelqu'un qui cherche pourquoi ca marche

    je ne sais pas mais une question qui pourrait t'aiguiller :

    Au pas par pas, si je glisse la souris sur FL1.name (ligne en rouge) j'ai le message "Name = <Variable objet ou nom de bloc non défini>"
    c'est peut etre que tu n'as pas defini FL1 et que l'option explicite n'ayant pas été mse que ca ne plante pas

    c'est une idée en l'air comme ca

    Bonne journée,
    Wil

  3. #3
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Avant le If, si tu fais une msgbox sur la valeur de FL1.Name ça te donne quoi ?


    D'ailleurs oui ça me surprend tu n'as pas défini dans ta procédure FL1 donc ça vient peut etre de la le soucis, c'est qu'il la prend en vairant au départ, et après il voit que tu veux l'utiliser comme worksheet, donc ça fait comme si

  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 illight
    Avant le If, si tu fais une msgbox sur la valeur de FL1.Name ça te donne quoi ?
    C'est une bonne question ! Ça me donne "FeuilleCumul"


    Citation Envoyé par illight
    D'ailleurs oui ça me surprend tu n'as pas défini dans ta procédure FL1 donc ça vient peut etre de la le soucis, c'est qu'il la prend en vairant au départ, et après il voit que tu veux l'utiliser comme worksheet, donc ça fait comme si
    Citation Envoyé par Ainsi que wilfried qui lui
    c'est peut etre que tu n'as pas defini FL1 et que l'option explicite n'ayant pas été mse que ca ne plante pas
    Deux miros pour le prix d'un ! Et ces deux lignes, c'est quoi ?
    Set FL1 = ActiveSheet 'instancie la feuille
    FL1.Name = "FeuilleCumul" 'Renomme la feuille
    Mais je vous remercie bien quand même
    Si vous avez d'autres suggestions... elles seront toujours les bienvenues

  5. #5
    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
    Autant pour moi, je ne l'avais pas "DÉCLARÉE" !
    Vous n'aviez qu'à moitié raison, pour moi et certains autres, "définir une feuille" a un autre sens
    On s'en sort comme on peut
    Merci à tous les deux

    Edit
    J'aurais dû mieux lire
    Citation Envoyé par Ce que wilfried
    c'est peut etre que tu n'as pas defini FL1 et que l'option explicite n'ayant pas été mse que ca ne plante pas

    Ce n'est pas "option explicite" mais "option explicit", c'est pour ça

  6. #6
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re:

    je suis sur excel 2002

    J'ai repris ta macro, avec un point d'arret sur le if lafeuille.name=FL1.name
    Quand je passe avec la souris, lafeuille.name c'est Ok, FL1, j'ai que dale

    Si je Mets Dim FL1 a worksheet

    je refais la manip : FL1.name m'affiche le bon nom ---> c'est Ok

    @ te lire

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ceci n'est pas la réponse à la question mais, pour travailler plus "propre", remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) 'Ajoute une feuille
        Set FL1 = ActiveSheet       'instancie la feuille
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set FL1 = ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) 'Ajoute une feuille en l'affectant à l'objet FL1

  8. #8
    Expert éminent sénior

    Avatar de Deepin
    Homme Profil pro
    Ingénieur - Chef de projet Modélisation/Simulation
    Inscrit en
    Avril 2004
    Messages
    3 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Ingénieur - Chef de projet Modélisation/Simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 164
    Points : 51 026
    Points
    51 026
    Par défaut
    et ce serait plus simple d'utiliser UsedRange que ta construction pour copier le contenu

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

Discussions similaires

  1. [XL-2003] Le calendrier fonctionne mais je ne sais pas pourquoi !
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/01/2013, 23h44
  2. Ca marche mais je ne comprend pas pourquoi
    Par murgen23 dans le forum Composants
    Réponses: 5
    Dernier message: 14/11/2008, 13h25
  3. Cargo - Ca fonctionne mais je ne sais pas pourquoi.
    Par RémyYves dans le forum Maven
    Réponses: 1
    Dernier message: 07/02/2008, 13h13
  4. Réponses: 4
    Dernier message: 07/01/2008, 23h48
  5. COM : _com_ptr_t ca marche mais je ne comprend pas pourquoi
    Par dockurt2k dans le forum Visual C++
    Réponses: 4
    Dernier message: 21/08/2006, 12h28

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