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 :

Macro qui fonctionne en pas à pas mais pas en "direct" [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur de projets
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur de projets

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Par défaut Macro qui fonctionne en pas à pas mais pas en "direct"
    Bonjour,

    J'ai écrit une marco permettant de traiter des données dans un fichier excel. Cette macro doit être appelée par un autre fichier, dans lequel le résultat viendra se coller.

    Quand je lance ma macro dans le fichier de traitement, tout se passe bien et j'obtiens mon résultat, mais quand je le lance depuis le fichier de destination, alors deux solutions sont possibles:
    - soit je lance via un bouton et j'obtiens une erreur (que je détaille dans un instant)
    - soit je lance au pas à pas en mode debug et tout se passe bien

    L'erreur est liée au fait que dans le fichier de traitement, la macro exécute les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Call activate
        Sheets("Data").Select
        Columns("A:E").Select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub activate()
        AppActivate ("ThermocouplesData - Excel")
    End Sub
    pour m'assurer que les actions soient bien effectuées dans ce workbook.

    Quand l'erreur debug arrive (L'indice n'appartient pas à la sélection), il me suffit d'aller en mode debug et de relancer (le petit "play") et tout repart sans problème.

    Toutes les suggestions sont les bienvenues.

    J'ai déjà essayé de supprimer la ligne "activate", même résultat.

    Merci d'avance

    Alex

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Il est fortement déconseillé de faire appel à la sélection ou à l'activation qui sont sources de nombreux problèmes.
    Utilisez plutôt quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Sheets("Data")
        <votre_code>
    End With

  3. #3
    Membre habitué
    Homme Profil pro
    ingénieur de projets
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur de projets

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Par défaut
    Merci pour l'info.

    Je viens d'essayer mais avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With ThisWorkbook.Sheets("Data")
            Columns("A:E").Select
            Selection.ClearContents
        End With
        With ThisWorkbook.Sheets("Résumé")
            Columns("A:c").Select
            Selection.ClearContents
        End With
        With ThisWorkbook.Sheets("Final")
            Columns("d:aq").Select
            Selection.ClearContents
        End With
    Toutes les opérations s'effectuent à la suite sur la feuille active

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Comme dit précédemment, il convient d'éviter d'utiliser la sélection...

    Quant à l'utilisation du bloc With, elle permet de faire implicitement référence à un objet.
    Mais pour cela, il faut mettre un point avant la propriété souhaitée. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Sheets("Data")
        .Columns("A:E").ClearContents
    End With
    Toutefois, un bloc With est inutile si vous ne réalisez qu'une seule action sur l'objet que vous référencez.
    Dans votre cas, il serait plus simple d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ThisWorkbook.Sheets("Data").Columns("A:E").ClearContents
    ThisWorkbook.Sheets("Résumé").Columns("A:C").ClearContents
    ThisWorkbook.Sheets("Final").Columns("D:AQ").ClearContents
    Cordialement

  5. #5
    Membre habitué
    Homme Profil pro
    ingénieur de projets
    Inscrit en
    Octobre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur de projets

    Informations forums :
    Inscription : Octobre 2017
    Messages : 8
    Par défaut
    Ok ça a fonctionné. En effet les select posent problème dès que plusieurs classeurs sont ouverts en même temps.

    J'ai maintenant du coup des problèmes ailleurs dans mon code, de la même nature, mais en suivant la même procédure ça ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim nb As String
        nb = CStr(WorksheetFunction.CountA(Range("a:a")))
     
        ThisWorkbook.Sheets("Data").Range("F1:H" + nb).Copy
    Dans ce code, la dernière ligne bloque si je ne vais pas manuellement sur la feuille concernée (alors que pour le problème au-dessus, je ne devais pas bouger)

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je répète et explicite le point soulevé par Ben_L

    quand on fait référence à un objet de type Range, nous avons deux hypothèses :

    - on n'indique pas la feuille hôte et le classeur hôte ==> VBA traitera le Range de la feuille active du classeur actif
    - on indique l'ensemble de la filiation, il n'y a plus aucun souci car on a bien indiqué où on voulait travailler

    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb = CStr(WorksheetFunction.CountA(Range("a:a")))
    fait référence à la colonne A du la feuille active du classeur actif, ce qui est une source potentielle du problème
    la seconde source possible, c'est que tu convertis un nombre (résultat de la formule CountA) en String via CStr, et ensuite tu l'utilises dans un range qui attend de son côté un chiffre


    EDIT : et l'opérateur de concaténation est esperluette &, le "+" est à proscrire, ce n'est pas sa vocation première que de concaténer des String, il sert à additionner des valeurs

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

Discussions similaires

  1. Macro qui fonctionne en faisant F8 mais pas en auto
    Par krapoulos dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/06/2015, 13h20
  2. [XL-2007] Macro qui fonctionne sur un poste mais pas sur un autre
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2012, 10h24
  3. [ZF 1.10] Clause where qui fonctionne avec type int mais pas avec type String
    Par shadypierre dans le forum Zend_Db
    Réponses: 5
    Dernier message: 30/04/2010, 13h00
  4. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  5. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 11h56

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