Copier une feuille en VBA vers un autre onglet
Bonjour,
j'essaye de mettre un document que l'on remplit de façon annuelle.
Une fois celui-ci rempli je souhaite l'enregistrer sous le nom de l'année et repartir sur le document base "comptes".
la prise en compte de l'absence des coordonnées d l'année fonctionne, mais ..
Mon problème réside dans le fait que je n'arrive pas à accéder à la nouvelle année renseignée.
Ci Joint les lignes de ce programme.
Sub dupliquer()
Dim numAnnée As String
nom$ = InputBox("Entrez l'année du nouvel onglet")
For Each ws In Worksheets
If ws.Name = nom Then MsgBox "La feuille existe déjà veuillez recommencer l'enregistrement": Exit Sub
Next ws
If numFacture = "" Then MsgBox " Veuillez entrer une année"
Exit Sub
Sheets("comptes").Copy after:=Sheets(Sheets.Count)
Sheets("comptes").Unprotect
Sheets("comptes").Range("zoneSaisie").ClearContents
Sheets("comptes").Protect
ActiveSheet.Name = nom$
Sheets("comptes").Activate
End SubEdit modo : merci de mettre le code entre balises SVP avec le bouton </>
Un grand merci pour votre aide
cordialement
Bonjour papychat et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum et notamment
- Pour plus de lisibilité, utilisez le bouton </> pour insérer vos codes VBA (et si possible aussi pour vos formules Excel) entre balises
- Quelques fonctionnalités du forum à connaître
Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)
Concernant votre demande, je pense que votre problème se situe ici
If numFacture = "" Then MsgBox " Veuillez entrer une année"
Exit SubQu'il faut remplacer par
If numFacture = "" Then MsgBox " Veuillez entrer une année" : Exit SubLe deux points est important, car c'est la suite des instructions du If
Merci pour votre participation
Cordialement
Bonjour BrunoM45
Merci de ta réponse rapide, effectivement en bidouillant le code j'avais modifié cet élément
; Exit sub
Mais le problème demeure lorsque j'entre une nouvelle année non inscrite dans les onglets,
le programme se bloque sur la Msgbox du "veuillez entrer une année".
Sub dupliquer()
Dim numAnnée As String
nom$ = InputBox("Entrez l'année du nouvel onglet")
For Each ws In Worksheets
If ws.Name = nom Then MsgBox "La feuille existe déjà veuillez recommencer l'enregistrement": Exit Sub
Next ws
If numAnnée = "" Then MsgBox " Veuillez entrer une année": Exit Sub
Sheets("comptes").Copy after:=Sheets(Sheets.Count)
Sheets("comptes").Unprotect
Sheets("comptes").Range("zoneSaisie").ClearContents
Sheets("comptes").Protect
ActiveSheet.Name = numAnnée
Sheets("comptes").Activate
End SubD'avance merci, j'avais lu les consignes, mais j'ai tout repris en espérant ne pas commettre d'erreur?
Bien cordialement.
papychat
Re,
Désolé, je n'avais pas fais attention au reste du code
Vous demandez l'année dans la variable "Nom", puis vous testez "NumAnnée" = incohérence
Voici le code comme je le ferais
Sub dupliquer()
Dim sNumAnnée As String
Dim Ws As Worksheet
'
sNumAnnée = InputBox("Entrez l'année du nouvel onglet")
' Vérifier si saisie faite
If sNumAnnée = "" Then MsgBox "Veuillez entrer une année": Exit Sub
' Vérifier si saisie d'un nombre
If Not IsNumeric(sNumAnnée) Then MsgBox "L'année doit être au format [AAAA]": Exit Sub
' Vérifier si feuille pas déjà créée
For Each Ws In Worksheets
If Ws.Name = sNumAnnée Then MsgBox "La feuille existe déjà veuillez recommencer l'enregistrement": Exit Sub
Next Ws
'
Sheets("comptes").Copy after:=Sheets(Sheets.Count)
Sheets("comptes").Unprotect
Sheets("comptes").Range("zoneSaisie").ClearContents
Sheets("comptes").Protect
ActiveSheet.Name = sNumAnnée
Sheets("comptes").Activate
End SubA+
re,
c'est super, votre aide est précieuse, merci!
Désolé de vous avoir tutoyé, c'est habituellement la règle dans certains forum.
Encore merci me reste à trouver le like et message résolu!
Re,
Pas de souci pour le tutoiement, en tant que modo je me dois de garder une certaine distance
Du moins je pense