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 :

code qui fonctionne dans un module mais pas dans un évènement [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut code qui fonctionne dans un module mais pas dans un évènement
    Bonjour à tou(te)s
    J'ai écris, non sans mal vu mon niveau en vba, un code qui ajoute des colonnes à un tableau sur une autre feuille en fonction du contenu d'une colonne dans un premier tableau.
    Je l'ai d'abord conçu dans un module le temps de le mettre au point. Ça marche. Maintenant je veux que ça se déclenche quand je quitte la feuille. J'ai donc copier/coller le code dans un événement Worksheet_Deactivate et là rien ne va plus.Erreur d’exécution '1014 : La méthode 'Range' de l'objet '_Worksheet' a échoué. Et bien sûr j'ai besoin d'aide pour comprendre...
    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
     
    Private Sub Worksheet_Deactivate() ' dans l'événement
    'Sub transfertAP() ' dans le module
    ' Création des APs dans la feuille élèves
        Sheets("liste_AP").Name = "liste_AP"
        dernLigne = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To dernLigne
            If Range("A" & i).Value <> "" Then
                Valeur_Cherchee = "AP" & Range("A" & i).Value
                Set PlageDeRecherche = Sheets("eleves").Rows(1)
                Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
                If Trouve Is Nothing Then
                    Range("eleves").ListObject.ListColumns.Add.Name = Valeur_Cherchee
                End If
            End If
    'vidage des variables
        Set PlageDeRecherche = Nothing
        Set Trouve = Nothing
        Next
    End Sub
    La seule différence c'est l’entête "Sub transfertAP()" ou "Private Sub Worksheet_Deactivate()" et l'endroit où il se trouve
    merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    Il manques toutes tes déclarations de variables.
    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Citation Envoyé par yalehaire Voir le message
    Ça marche
    ceci fonctionne dans ton module ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("eleves").ListObject.ListColumns.Add.Name = Valeur_Cherchee

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut
    Dans le module standard tout fonctionne parfaitement (du moins pour le moment).
    En effet il manque les déclarations mais pour autant que je saches ça n'est pas indispensable même si c'est plus propre et plus performant. Je m'en occuperai quand j'aurai fini de triturer le code...
    A tout hasard j'ai ajouté les déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
    Ca ne change rien

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Citation Envoyé par yalehaire Voir le message
    Dans le module standard tout fonctionne parfaitement (du moins pour le moment).
    En effet il manque les déclarations mais pour autant que je saches ça n'est pas indispensable même si c'est plus propre et plus performant. Je m'en occuperai quand j'aurai fini de triturer le code...
    J'ai testé ton code; il ne fonctionne pas même en module standard.

    Tout programme doit reposer sur une balise solide et délimitée; c'est une des clés de la réussite = déclaration des variables. Ceci montre que tu as réfléchi à tous le tenants et aboutissants.

    A+

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut
    Pourtant je te garanti que chez moi il fonctionne, sinon je n'aurais pas ouvert ce topic

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    1/ Que souhaites-tu faire avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("eleves").ListObject.ListColumns.Add.Name = Valeur_Cherchee
    exactement ? On va essayer de reformuler le code.
    2/ As-tu une cellule nommée "eleves" dans ton classeur ?

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut
    c'est le nom d'une feuille. c'est aussi, je sais ce n'est pas très malin, le nom du tableau qui se trouve sur la feuille du même nom. "eleves[eleves]" comme adressage ça n'aide pas à la compréhension mais jusque là ça marche...
    Dans un premier tableau "list_AP" j'ai une colonne num_AP" chaque fois que je crée un nouvel AP je dois avoir une colonne équivalente dans le tableau "eleves". Je cherche donc si la colonne existe déja et si non je l'ajoute (.ListColumns) et je la nomme (.Add.Name)
    Pour la ligne concernée oui c'est exactement la même copier/coller plus 25 vérifications

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Il faut alors écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("eleves").Range("eleves").ListObject.ListColumns.Add.Name = Valeur_Cherchee
    et ton code fonctionnera.

    Le problème viens du fait que tu est sur la page "liste_AP" lorsque ton code s’exécute.
    "Range("eleves")." n'existe pas sur cette page.

    A+ OBO
    si ça t'a aidé

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 50
    Points : 50
    Points
    50
    Par défaut
    Merci infiniment, ça marche
    Je vais changer les noms des tableaux dans le genre tb_eleves pour celui de la feuille eleves. ça devrais éclaircir un peu le code
    Merci aussi pour la rapidité de tes réponses.

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si dans ton fichier, tu n'as jamais 2 listobjects sur la même page, tu peux utiliser la collection sans avoir besoin de gérer le nom de ton tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("eleves").ListObjects(1)

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

Discussions similaires

  1. Script qui fonctionne dans un onglet mais pas dans un popup
    Par lwolf dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/08/2012, 20h13
  2. Code qui fonctionne depuis un module mais pas depuis un workbook
    Par Gualino dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2011, 18h48
  3. Réponses: 11
    Dernier message: 09/09/2010, 02h53
  4. [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
  5. Applet qui s'execute dans un dossier mais pas dans l'autre
    Par Battosaiii dans le forum Applets
    Réponses: 11
    Dernier message: 10/12/2005, 15h54

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