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 :

[VBA-E]Lancement macro ouverture Feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut [VBA-E]Lancement macro ouverture Feuille
    Bonjour à tous

    Je voudrais savoir qu'est ce qui cloche dans le code suivant, devant normalement lancer la macro a l'ouverture de la feuille nommé "chant".

    Car quand je click sur l'onglet rien ne se passe.
    Voila le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Activate(ByVal chant As Object)
    Ca doit etre simple mais je seche.

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    tu peux tester cette synthaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
    laMacro
    End Sub
    La procedure doit etre collée dans la feuille "Chant"


    bonne soiree
    michel

  3. #3
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    merci SilkyRoad le truc est que je ne l'avait pas mis dans la feuille mais dans un module.

    Par contre du coup j'ai un message d'erreur à l'execution de la macro qui est:

    Erreur d'execution 1004
    La methode select de la classe range a echoué

    l'erreur ce situe sur la ligne en rouge, bizarre la macro fonctionnait avant que j'essaie de la faire demarrer a l'ouverture de la feuille.

    La macro sert a additionner independemment trois cellule de chaque feuille de la troisieme à l'avant derniere et a coller ces trois adddition dans trois cellules de la derniere feuille.

    Voici le code:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Private Sub Worksheet_Activate()
     Dim NbFeuille, i As Integer
    Dim PFeuille, Chant_a, Chant_b, Chant_c, Chant1, Chant2, Chant3 As Integer
     Dim firstcell, lastcell, zone As Range
     
     'PQR
     
     NbFeuille = Worksheets.Count
     
      PFeuille = 2
         
        
        Chant_a = 0
        Chant_b = 0
        Chant_c = 0
         
        For i = 3 To (NbFeuille - 1) Step 1
            Sheets(i).Select
            Set firstcell = Range("P5")
    Set lastcell = Range("p65536").End(xlUp)
    Set zone = Range(firstcell, lastcell)
    
    Range(firstcell, lastcell).Select
    ActiveCell.Offset(-1, 0).Select
    Chant1 = ActiveCell.Value
    Chant_a = Chant_a + Chant1
    
     Set firstcell = Range("Q5")
    Set lastcell = Range("Q65536").End(xlUp)
    Set zone = Range(firstcell, lastcell)
    
    
    Range(firstcell, lastcell).Select
    ActiveCell.Offset(-1, 0).Select
    Chant2 = ActiveCell.Value
    Chant_b = Chant_b + Chant2
    
    Set firstcell = Range("R5")
    Set lastcell = Range("R65536").End(xlUp)
    Set zone = Range(firstcell, lastcell)
    
    
    Range(firstcell, lastcell).Select
    ActiveCell.Offset(-1, 0).Select
    Chant3 = ActiveCell.Value
    Chant_c = Chant_c + Chant3
            
            
            Debug.Print Chant_a
        Next i
    Worksheets(Worksheets.Count).Select
    Range("b8").Value = Chant_a
    Range("c8").Value = Chant_b
    Range("d8").Value = Chant_c
     
     End Sub

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    Je crois que tu n'as pas initialisé ta variable lastcell.

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    essai de modifier le code de cette ainsi..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      For i = 3 To (NbFeuille - 1) Step 1
      With Sheets(i)
                      .Select 
            Set firstcell = .Range("P5")
             Set lastcell = .Range("p65536").End(xlUp)
           Set zone = .Range(firstcell, lastcell)
     
    .Range(firstcell, lastcell).Select
    ...
    end with
     next i
    en indiquant explicitement la feuille concerné.. sinon les range portent sur la contenant le code...

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par SilkyRoad
    bonsoir

    en complément de la réponse de Bbil ci joint une adaptation sans Select
    ...
    et oublie le "replatrage" que dont je t'ai montré le chemin.. (avec le with... ) l'utilisation des .select c'est pas terrible dans VBA excel..mais en plus dans un code événementiel .. sur l'activation d'une feuille...

    utilise plutôt le code à Michel..

  7. #7
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    bbil j'ai essayé de modifier selon ton code mais j'ai une erreur qui me dit Next sans For est ce du au with ? que tuas rajouter pourtant le next y est encore.

    J'ai essayer de rajouter un end with mais j'ai pas de resultat.

  8. #8
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    SilkyRoad J'ai une erreur de compilation avec ton code qui me dit "objet requis " sur le premier firstcell de la boucle For

  9. #9
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    SilkyRoad ce problème est resolu par contre j'ai une incompatibilité de type apparemment entre chant1(integer l'objet Range) sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chant1 = Sheets(i).Range(firstCell, lastCell).Offset(-1, 0)

  10. #10
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonsoir

    peux tu reexpliquer ce que doit faire ta macro car je suis un peu perdu dans ta procedure ...


    bonne soiree
    michel

  11. #11
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    La macro sert a additionner l'avant derniere cellule de la colonne p de la troisieme feuille à l'avant derniere contenant toute le meme tableau mais pas forcement le meme nombre de ligne.

    La meme chose pous la colonne q et r de la feuille 3 à l'avant derniere et de coller ces trois adddition dans trois cellules de la derniere feuille.

    J'espere que ce coup ci j'ai ete plus claire SilkyRoad

  12. #12
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    rebonsoir


    L'utilisation de Range n'etait pas du tout adaptée dans ta procedure d'origine
    Utilise Range si tu connais l'adresse
    Uilise Cells si tu connais les numeros de lignes et de colonne


    une nouvelle version à tester

    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
    29
    30
    31
    32
    33
    34
    Dim NbFeuille As Integer, i As Integer
    Dim PFeuille As Integer
    Dim Chant_a As Integer, Chant_b As Integer, Chant_c As Integer, _
    Chant1 As Integer, Chant2 As Integer, Chant3 As Integer
    Dim ligneCible As Integer, j As Integer
     
    NbFeuille = Worksheets.Count
    PFeuille = 2
     
    Chant_a = 0
    Chant_b = 0
    Chant_c = 0
     
    For i = 3 To (NbFeuille - 1) Step 1
        j = j + 1
        ligneCible = Sheets(i).Range("P65536").End(xlUp).Row - 1
        Chant1 = Sheets(i).Cells(ligneCible, 15 + j).Value
        Chant_a = Chant_a + Chant1
     
        ligneCible = Sheets(i).Range("Q65536").End(xlUp).Row - 1
        Chant2 = Sheets(i).Cells(ligneCible, 15 + j).Value
        Chant_b = Chant_b + Chant2
     
        ligneCible = Sheets(i).Range("R65536").End(xlUp).Row - 1
        Chant3 = Sheets(i).Cells(ligneCible, 15 + j).Value
        Chant_c = Chant_c + Chant3
     
    Next i
     
    With Worksheets(Worksheets.Count)
        .Range("B8").Value = Chant_a
        .Range("C8").Value = Chant_b
        .Range("D8").Value = Chant_c
    End With

    bonne soiree
    michel

  13. #13
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    Desolé SilkyRoad

    J'ai toujours une "erreur d'execution 13 incompatibilité de type" sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligneCible = Sheets(i).Range("Q65536").End(xlUp) - 1

  14. #14
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    tu peux retester la procedure dans mon precedent message . j'avais oublié le .Row - 1 en fin de ligne ...


    bonne journée
    michel

  15. #15
    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 : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Attention à cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim NbFeuille, i As Integer
    Dim PFeuille, Chant_a, Chant_b, Chant_c, Chant1, Chant2, Chant3 As Integer
    Dim firstcell, lastcell, zone As Range
    Première ligne, seul i est déclaré Integer
    2e, seul Chant3...
    3e, seul zone est déclaré Range

    Tous les autres sont Variant car pas de typage.

    Voir le code de SilkyRoad pour la syntaxe correcte.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  16. #16
    Membre éclairé
    Homme Profil pro
    En reconversion
    Inscrit en
    Mai 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Mai 2006
    Messages : 512
    Par défaut
    Merci SilkyRoad pour ton dernier message Car ton code fonctionne au poil.

    J'ai fai quelque modif car tu avais pas tout a fait saisi ce que je voulais , j'ai du mal exprimé ma pensé.

    Je n'avais pas besoins d'un decalage d'une colonne en passant de feuille en feuille, mais ton code est tres interressant et peu me donner d'autres idées.

    Merci également à Alain Tech pour ton info sur mon ecriture de variable.

    Le code finale est celui-ci:

    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
    29
    30
    31
    32
    33
    34
    Private Sub worksheet_activate()
    Dim NbFeuille As Integer, i As Integer
    Dim Chant_a As Integer, Chant_b As Integer, Chant_c As Integer, _
    Chant1 As Integer, Chant2 As Integer, Chant3 As Integer
    Dim ligneCible As Integer
     
    NbFeuille = Worksheets.Count
     
    Chant_a = 0
    Chant_b = 0
    Chant_c = 0
     
    For i = 3 To (NbFeuille - 1) Step 1
     
        ligneCible = Sheets(i).Range("P65536").End(xlUp).Row - 1
        Chant1 = Sheets(i).Cells(ligneCible, 16).Value
        Chant_a = Chant_a + Chant1
     
        ligneCible = Sheets(i).Range("Q65536").End(xlUp).Row - 1
        Chant2 = Sheets(i).Cells(ligneCible, 17).Value
        Chant_b = Chant_b + Chant2
     
        ligneCible = Sheets(i).Range("R65536").End(xlUp).Row - 1
        Chant3 = Sheets(i).Cells(ligneCible, 18).Value
        Chant_c = Chant_c + Chant3
     
    Next i
     
    With Worksheets(Worksheets.Count)
        .Range("B8").Value = Chant_a
        .Range("C8").Value = Chant_b
        .Range("D8").Value = Chant_c
    End With
    End Sub

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

Discussions similaires

  1. [VBA-E]Lancement de macro à l'ouverture du fichier
    Par bastien62200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/02/2006, 00h20
  2. [VBA-E] Lancement de la macro avant l'ouverture des feuilles
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 17h07
  3. [VBA-E] Lancement automatique d'une macro (débutante)
    Par pom_poir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/11/2005, 18h57
  4. [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/11/2005, 20h24
  5. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 15h30

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