Problème de copie de feuille sous excel

Résolu
cco86260 - 11 avril 2013 à 08:53
 cco86260 - 12 avril 2013 à 10:12
Bonjour a tous,

Donc, après quelques temps d'absence, je reviens vers vous afin de continuer mon apprentissage sous VBA. La bonne nouvelle est que cette fois ci je suis sous win 8 avec office 2010 ProPlus.

Pour ceux qui ne connaisse pas mon sujet, je vous explique vite fais. Je suis en train de simplifier une feuille de pointage hebdomadaire de la société ou je travaille, sur cette feuille sera placer 2 ou 3 boutons dont je vais détailler les fonctions plus bas..

Voici ce qui fonctionne :

A l'ouverture du fichier il m'ouvre une feuille nommer nommer "Vierge" a partir d'une feuille "MATRICE" qui elle est cachée au préalable. Voici le code qui est utilisé :

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


Jusqu'ici, tout va bien, par contre là commence mon souci:

J'ai ajouter un bouton nommé "Pointage Suivant", son rôle est donc de nommer le feuille en cour en fonction d'une cellule de cette même feuille et d'un copier une autre a la fin du classeur nommée "Vierge2" par exemple et ainsi de suite, tout en sachant que si la cellule est vide, pas de copie.

Voici donc le code que j'utilise pour cela :

Voici les macros :

M1: Nomme la feuille en fonction d'une cellule
Sub NomFeuille()
With ActiveSheet 'agit sur la feuille active, à adapter
    On Error Resume Next
    .Name = .Range("O9") 'le nom de la feuille prend le nom inscrit cellule A1
    If Err.Number <> 0 Then 'Test d'erreur, par exemple onglet existant déjà, ou caractère invalide
        MsgBox ("Veuillez entrez un nom") ' messsage d'information en cas d'erreur
        Exit Sub 'sortie de la macro en cas d'erreur
    End If
End With
End Sub


M2: Copie la feuille "MATRICE" pour un nouveau pointage mais doit absolument rester cachée.
Sub CopieFeuille()
    Sheets("MATRICE").Visible = False
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub


Macro attachée au bouton :

Sub Suivant()
Call NomFeuille
Call CopieFeuille
End Sub


A priori il n'y a aucune erreur de code mais il ne fonctionne pas comme je le veut... en faite si la cellule est vide j'ai bien le message "veuillez entrer un nom", si je le fais, il me copie effectivement une feuille... mais il me la nomme "MATRICE2" et me la cache... c'est balo...

Donc si quelqu'un aurais une solution ou une piste a me donner je suis preneur...

Merci a tous, et j'espère avoir été clair dans mon post...

Chris

4 réponses

Coucou, de retour pour de bonne nouvelle !!


Donc voilà, après des milliers d'essaie et de prise de tête pendant les heures de travail , j'ai enfin réussi à faire ce que je voulais, je vous donne donc les codes fini, ils ne sont surement pas propre, mais comme vous le savez je suis débutant... Et c'est donc une première pour moi...

Macro N°1 = nomme la feuille en fonction d'une cellule

Sub NomFeuille()
With ActiveSheet 'agit sur la feuille active, à adapter
    On Error Resume Next
    .Name = .Range("O9") 'le nom de la feuille prend le nom inscrit cellule O9
    If Err.Number <> 0 Then 'Test d'erreur, par exemple onglet existant déjà, ou caractère invalide
        MsgBox ("Veuillez entrez un nom") ' messsage d'information en cas d'erreur
        Exit Sub 'sortie de la macro en cas d'erreur
    End If
End With
End Sub


Macro N°2 = Affiche et copie Copie la feuille matrice et la nomme vierge

Sub CopieFeuille()
    Sheets("MATRICE").Visible = True
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub


Macro N°3 = Cache la feuille matrice

Sub Cache_Matrice()
    Sheets("MATRICE").Visible = False
End Sub


Et pour finir...

La macro final qui nomme la feuille en fonction d'une cellule et affiche et copie la matrice pour en faire une vierge pour ensuite la recacher

Sub Suivant()
    Call NomFeuille
    Call CopieFeuille
    Call Cache_Matrice
End Sub


En tout cas, c'est grae a VBFrance et donc a vous que j'ai reussi cette premiere étape... je vous en remercie et reviendrais pour d'autre projet...

A bientôt,

Christian
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2013 à 09:43
Bonjkour,
en cherchant parmi mes interventions dans plusieurs discussions (notamment au cours des 30 derniers jours), tu devrais trouver une réponse "collant" à ton cas, avec, en plus, l'utilisation de InputBox.


________________________
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
Utilisateur anonyme
12 avril 2013 à 03:14
Bonjour,

Pour ajouter à ce que ucfoutu a dit. Ordinairement, une ligne de cette race-là:


On Error Resume Next


est plutôt malfaisante dans la phase de test. Elle fait comme si l'erreur n'existe pas et la ligne en erreur n'est pas exécutée. Donc tout ce qui suit et qui dépend de l'instruction erronée est probablement erroné.
0
Bonjour a tous,

Donc, en premier merci a tous d'avoir pris le temps de me lire.

Je vous donne quelques suite de mes essais :

pour mes macro en fait, elles fonctionnent toute, seulement, je vous explique :

J'ai tester les macro 1 par 1 avec le un contrôle de formulaire et, pour nommer la feuille en fonction de la cellule ça fonctionne, la duplication fonctionne toute seul sur le bouton également mais uniquement si la matrice est visible... donc mon soucis se trouve ici...

cmarcotte: crois-tu que ça viendrais de cette ligne :

On Error Resume Next


Si c'est le cas, il faut que je supprime cette dernière uniquement ou y a d'autre lignes avec ?

Merci pour les réponses,

Christian
0
Rejoignez-nous