Problème de lancement de macro a l'ouverure d'un classeur excel

Résolu
cco86260 - 21 févr. 2013 à 13:22
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 22 févr. 2013 à 11:29
Bonjour a tous,

Donc voilà, j'ai un soucis avec une macro, je m'explique :

Ce que je veux :

A l'ouverture du classeur, une feuille appelée "matrice" sert à la duplication donc celle ci doit être cachée, et afficher une feuille vierge dupliquer via cette matrice... voici le code que j'utilise :

Private Sub Workbook_Open()
    ' A l'ouverture du classeur on masque la Matrice
        Sheets("MATRICE").Visible = False
    'copie de la feuille Matrice
        Sheets("MATRICE").Select
        Sheets("MATRICE").Copy After:=Sheets(3)
    'On renome la nouvelle feuille
        ActiveSheet.Name = "VIERGE"
End Sub


Le problème est qu'il y a une erreur...voici le message :

"erreur d'exécution "1004"
impossible de définir la propriété Visible de la classe Worksheet.
Le debogueur pointe cette ligne :
Sheets("MATRICE").Visible = False


Si quelqu'un aurais une solution... je suis preneur...

Merci à tous,

Christian

23 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 févr. 2013 à 14:00
Bonjour,

Je viens de faire quelques tests et il semblerais qu'il faut au minimum 1 feuille visible a ton classeur. Le problème viens peut être de là.

Test :
Private Sub Workbook_Open()
    'copie de la feuille Matrice
        Sheets("MATRICE").Select
        Sheets("MATRICE").Copy After:=Sheets(3)
    'On renome la nouvelle feuille
        ActiveSheet.Name = "VIERGE"
    ' A l'ouverture du classeur on masque la Matrice
        Sheets("MATRICE").Visible = False
End Sub


Tout simplement

Si ça ne fonctionne pas, quel est ta version Excel ?

Amicalement
0
Bonjour Polack77,

Tout d'abord merci pour votre réponse, mais cela ne fonctionne pas, parcontre j'ai un nouveau message d'erreur :

"erreur d'exécution 9"
l'indice n'appartient pas a la sélection

Ma version est office pour mac 2011 ver 14.0.0

Voici la ligne qui contient l'erreur :

Sheets("MATRICE").Copy After:=Sheets(3)


Merci encore,

Cordialement,

Christian
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 févr. 2013 à 17:43
Bonjour,

Pas de Matrice.Select !
Prévoir de ne pas créer la feuille VIEGE si existe déja ==>>

Private Sub Workbook_Open()
    Sheets("MATRICE").Visible = False
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(3)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub

devrait faire l'affaire

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 févr. 2013 à 17:45
Ok, alors je pense que le problème vient du 3 (3 voudrais dire que tu insère ta feuille après la 3eme feuille de ton classeur, sans doute que celui ci n'en à que 1 ou 2 au lancement).

Test :
Sheets("MATRICE").Copy After:=Sheets("MATRICE")


arf je n'ai pas le même excel que toi mes tests ne seront bon pas valide dans 100% des cas.

Amicalement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 févr. 2013 à 17:46
Hep là !
office pour mac 2011

Il est temps d'en parler.
J'ignore si ta version Mac accepte VBA, qui est un langage dérivé de VB, lequel nécessite Windows !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 févr. 2013 à 17:47
Oui ucfoutu à réson c'est beaucoup plus propre éviter les ".select"
surtout que dans ton code cette ligne est totalement inutile

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Merci Polack pour ta rapidité et ton efficacité... ça fonctionne, je clique sur mon fichier, il m'ouvre une feuille vierge comme je le voulais... un grand merci...

Je classe ce sujet comme résolu...

Mais tout n'est pas fini, mon projet risque d'être long... car je le fais en essayant d'apprendre VBA... c'est pas évident...

Amicalement,

Christian
0
Bonjour ucfoutu,

Alors pour info, VBA fonctionne bien sous mac office 2011, je pense logique que le language VBA certe pour windows fonctionne sous mac étant donnée qu'il fait par microsoft, il y a même les controle activeX et tout...

Tu as rencontrer des soucis avec office pour mac ?

Cordialement,

Christian
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 févr. 2013 à 17:59
Par contre méfie toi ucfoutu si "option explicit" est active ton code vas planter.


Voila ça devrais faire ce que tu veux + rendre de nouveau visible la feuille à la fermeture + impose que les varaibles utilisées soient déclarer
Option Explicit
'"Option Explicit" impose la déclaration ;)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("MATRICE").Visible = True
End Sub

Private Sub Workbook_Open()
    Dim TOTO As Worksheet
    Dim cpt As Integer
    
    Sheets("MATRICE").Copy After:=Sheets("MATRICE")
    Set TOTO = ActiveSheet
    
    On Error Resume Next
    TOTO.Name = "VIERGE"
    Do While Err
        Err.Clear
        cpt = cpt + 1
        TOTO.Name = "VIERGE_" & cpt
    Loop
    On Error GoTo 0
End Sub


Amicalement
0
Pour reprendre ucfoutu,

il y a peut quelque différence entre les 2 versions mais jusqu'à présent les macro que j'ai utilisé fonctionne, et à la base elle sont pour windows... et heureusement d'ailler car ce que je suis entrain de faire est pour la societé ou je bosse et il n'ont pas mac, ils ont windows...

mais je n'hésiterais pas a revenir si je rencontre des soucis... mais ça reste du VBA...

Amicalement,

Christian
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 févr. 2013 à 18:09
mais ça reste du VBA

Il est possible que les fonctions de base aient pu être "reprises".
Je vois par contre mal comment tout le VBA de Windows aurait pu l'être, dès lors que certaines fonctions de VBA s'appuient directement sur des fonctions de Windows. Je pense en particulier, par exemple, aux fonctions qui concerneraient le traitement de fichiers textes (ouverture, lecture, écriture ...).
M%ais bon ... je n'ai pas Mac et ne peut donc rien affirmer.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Complètement d'accord en théorie, mais sachant que les xls sur mac peuvent être enregistrée en version 97-2003 je crois... et là je viens de tester sur un pc winXP et pour l'instant pas de soucis pour la macro au démarrage du fichier...

Après ce n'est qu'un avis...

Amicalement,

Christian
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 févr. 2013 à 22:12
et là je viens de tester sur un pc winXP et pour l'instant pas de soucis pour la macro au démarrage du fichier...

je te crois sur parole en ce qui concerne ce que tu as fait "pour l'instant" ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Dis moi, pourrais tu m'en dire un peu plus sur le code que tu m'as laissé ?

Private Sub Workbook_Open()
    Sheets("MATRICE").Visible = False
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(3)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub


Je debute avec VBA, par exemple : pourquoi TOTO ?

Merci a toi,

Amicalement,
Christian
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2013 à 07:11
Si TOTO te gêne change-le don par TITI (c'est son copain).
Plus sérieusement :
relis-moi :
Prévoir de ne pas créer la feuille VIEGE si existe déja ==>>

la ligne :
TOTO = Sheets("VIERGE").Name
provoquera une erreur si la feuille VIERGE n'existe pas déjà
Or, analyse la suite du code ===>> je ne crée cette feuille que si erreur
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2013 à 08:12
Je t'ai par ailleurs trouvé cette lecture :
Tapez le texte de l'url ici.
pour faire suite à une partie de notre conversation.
Elle est en anglais, désolé, mais suffisamment compréhensible si tu as quelques connaissances dans cette langue.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci ucfoutu,

Je vais tacher de potasser tout ça, je trouve VBA assez intéressant, mais il faut réellement que j'apprenne... pour l'anglais, je me dépatouille, ça devrait le faire... as tu quelques liens pour les UserForm ? Je voudrais en créer un comportant des boutons... UN = pointage suivant, DEUX convertir en PDF et enregistrer dans un dossier donner... je possède les macros... mais il faut que je mette les mains dans le cambouis...

J'aime bien ton message sur ton profil... il est vrai.. et franc et je vais tacher de respecter ça

Je te souhaite une bonne journée,

Amicalement,

Christian
0
bien chef...

Bon je vais aller dans le monde du travail... et ce we... ecole VBA...

Bonne journée,
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 févr. 2013 à 09:51
Maiiissss heeeeee mon code il est parfait et tu me demande même pas des précisions

Sérieusement, vue que tu semble vouloir progresser, j'ai ajouter des commentaires histoire que tu comprenne ce qui est fait :
Option Explicit
'"Option Explicit" impose la déclaration ;)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Ajouter pour que si un excel avec les macros désactivé ouvre ton document 
    '(volontairement ou non), on puisse modifier ta feuille MATRICE
    Sheets("MATRICE").Visible = True
End Sub

Private Sub Workbook_Open()
    Dim TOTO As Worksheet 'La variable qui pointeras vers ta nouvelle feuille (tu la nome comme tu veux)
    Dim cpt As Integer 'Utile pour nommer de façon unique ta nouvelle feuille (voir plus bas ;))
    
    Sheets("MATRICE").Copy After:=Sheets("MATRICE") 'Création de la nouvelle feuille (ça tu savais déjà ^^)
    Set TOTO = ActiveSheet 'Place la nouvelle feuille dans ta variable
    
    On Error Resume Next 'Si une erreur est rencontré alors le code continueras de s’exécuter (habituellement à éviter), il vaux toujours mieux gérer une erreur plutôt que de la supporté
    TOTO.Name = "VIERGE" 'Renomme la feuille
    Do While Err 'Temps qu'une erreur est rencontré 
        Err.Clear 'Suppression de l'erreur
        cpt = cpt + 1 'Incrémentation du compteur. En VBA les variables sont automatiquement initialisées, dans d'autre langage (en C/C++ par exemple) il aurait fallu faire cpt=0 avant le "Do While Err"
        TOTO.Name = "VIERGE_" & cpt 'On renomme la nouvelle feuille en ajoutant le compteur (en résumer si VIERGE existe alors ta nouvelle feuille se nommera VIERGE_1 puis VIERGE_2 jusqu'à trouver un nom disponible)
    Loop 'Retour au "Do While Err"
    On Error GoTo 0 'Désactive le faite du supporter les erreurs
End Sub


Si tu cherche un cour celui ça à l'aire plutôt pas mal (même si j'avoue ne pas l'avoir lut ) :
http://www.excel-pratique.com/fr/vba.php

Amicalement
0
Merci polack77,

Je ne t'avais pas oublié, et te remercie beaucoup pour m'orienter sur le développement VBA, je remercie tout le monde d'ailleur...

Si vous voulez... on peut rester en liens, soit MP ou Mail, et parcontre toute les solution qui me seront apporter seront transformer en tuto sur ce forum... qu'en pensez-vous ?

Amicalement,

Christian
0
Rejoignez-nous