XL 2013 Plantage sur la copie d'onglets

Phio79

XLDnaute Nouveau
Bonsoir à toutes et à tous,

J'ai un tableau créé il y a longtemps qui me permet de suivre les véhicules de ma famille (Consommation, Entretien, Contrôle Technique, Coûts...)
J'ai créé plusieurs macros dont une qui me permet d'ajouter un véhicule en faisant une copie des onglets (4) d'un véhicule existant.
En laçant cette macro je me rend compte qu'elle plante sur la copie des onglets avec le message suivant

Capture d'écran 2020-09-16 18.45.48.png

Le nom indiqué dans le message n'est pas le nom d'une feuille !
Je précise que je suis sur Excel 2013 (le tableau a été créé sur une version bien plus ancienne) et que je n'ai pas cette erreur sur d'autres fichiers.
Je me doute que c'est mal programmé :) mais j'utilise ce tableau depuis des année et j'aurais bien du mal à m'en passer.

J'aimerais bien savoir d'où vient cette erreur.
Merci par avance de votre aide
Philippe
 

Pièces jointes

  • Voitures.xlsm
    442.3 KB · Affichages: 51

Phio79

XLDnaute Nouveau
fanch55, non je n'ai pas ce problèmes sur d'autres classeurs que j'utilise, pas plus sur un nouveau !
Par contre j'ai bien l'erreur sur celui que tu as modifié. Et également sur celui où j'ai modifiée toutes les zones nommées pour leurs donner le nom des onglets :(
 

fanch55

XLDnaute Barbatruc
Peux-tu remplacer le module2 par celui-ci et le tester ?
Nota: les erreurs seront dans la fenêtre Exécution du VBE.
VB:
Sub New_Car()
On Error GoTo Error_New_car

' Comptage des véhicules et déverrouillage des feuilles
100    For Each Sh In Sheets
110        Sh.Unprotect
120        If Right$(Sh.Name, 5) = ".Carb" Then indice = indice + 1
130    Next

' Choix d'un nom
150    Message = "Entrez un nom pour le nouveau Véhicule"
160    Title = "Création d'une nouvelle fiche"     ' Définit le titre.
170    NomDefault$ = "AUTO" & (indice + 1)        ' Définit la valeur par défaut.
180    NomCar2$ = InputBox(Message, Title, NomDefault$, 1000, 2500)
190    If NomCar2$ = "" Then End
195    NomCar2$ = UCase(NomCar2$)
       
' Suppression des zones nomées avant copie des feuilles

200    Range("A.CUM_ASSUR").Name.Delete
210    Range("A.CUM_PNEUS").Name.Delete
220    Range("A.CUM_JOURS").Name.Delete
230    Range("A.CUM_KM").Name.Delete
240    Range("A.CUM_VIDANGE").Name.Delete
250    Range("A.DER_COMPTEUR").Name.Delete
260    Range("A.DER_DATE").Name.Delete
270    Range("A.DER_KMJ").Name.Delete

' Copie et renomage des feuilles
     
300   Sheets("A.Entr").Copy after:=Sheets("A.Entr")
310        ActiveSheet.Name = NomCar2$ & ".Entr"
320        [A1] = "ENTRETIEN " & NomCar2$
330        [A14:K1000].ClearContents
340        [C7:F10].ClearContents
350        [I7:K8].ClearContents
360       [I10].ClearContents
370        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".CUM_ASSUR", _
            RefersToR1C1:="=" & NomCar2$ & ".Entr!R14C7:R1000C7"
380        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".CUM_PNEUS", _
            RefersToR1C1:="=" & NomCar2$ & ".Entr!R14C6:R1000C6"
390        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".CUM_VIDANGE", _
            RefersToR1C1:="=" & NomCar2$ & ".Entr!R14C5:R1000C5"
       
400        Cells.Replace What:="A.", Replacement:=NomCar2$ & ".", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
410        [A13].Select

450    Sheets("A.Carb").Copy after:=Sheets("A.Entr")
460        ActiveSheet.Name = NomCar2$ & ".Carb"
470        [A1] = "CARBURANT " & NomCar2$
480        [A14:J1000].ClearContents
490        [I8:J10].ClearContents
         
500        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".CUM_JOURS", _
            RefersToR1C1:="=" & NomCar2$ & ".Carb!R14C6:R1000C6"
510        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".CUM_KM", _
            RefersToR1C1:="=" & NomCar2$ & ".Carb!R14C4:R1000C4"
520        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".DER_COMPTEUR", _
            RefersToR1C1:="=" & NomCar2$ & ".Carb!R14C2"
530        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".DER_DATE", _
            RefersToR1C1:="=" & NomCar2$ & ".Carb!R14C1"
540        ActiveWorkbook.Names.Add Name:=NomCar2$ & ".DER_KMJ", _
            RefersToR1C1:="=" & NomCar2$ & ".Carb!R8C8"
   
550        Cells.Replace What:="A.", Replacement:=NomCar2$ & ".", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False
560        [A13].Select
       
600    Sheets("A.Cons").Copy after:=Sheets("A.Km")
610        ActiveSheet.Name = NomCar2$ & ".Cons"
620        ActiveChart.ChartTitle.Characters.Text = "CONSOMMATION " & NomCar2$
630        ActiveChart.SetSourceData Source:=Sheets(NomCar2$ & ".Carb").Range( _
            "A14:A1000,G14:G1000"), PlotBy:=xlColumns
       
650    Sheets("A.Km").Copy after:=Sheets(NomCar2$ & ".Cons")
660        ActiveSheet.Name = NomCar2$ & ".Km"
670        ActiveChart.ChartTitle.Characters.Text = "KILOMETRAGE QUOTIDIEN " & NomCar2$
680        ActiveChart.SetSourceData Source:=Sheets(NomCar2$ & ".Carb").Range( _
            "A14:A1000,J14:J1000"), PlotBy:=xlColumns

' Re-création des zones nommées sur feuille origine
700    ActiveWorkbook.Names.Add Name:="A.CUM_ASSUR", _
        RefersToR1C1:="=A.Entr!R14C7:R1000C7"
710    ActiveWorkbook.Names.Add Name:="A.CUM_PNEUS", _
        RefersToR1C1:="=A.Entr!R14C6:R1000C6"
720    ActiveWorkbook.Names.Add Name:="A.CUM_JOURS", _
        RefersToR1C1:="=A.Carb!R14C6:R1000C6"
730    ActiveWorkbook.Names.Add Name:="A.CUM_KM", _
        RefersToR1C1:="=A.Carb!R14C4:R1000C4"
740    ActiveWorkbook.Names.Add Name:="A.CUM_VIDANGE", _
        RefersToR1C1:="=A.Entr!R14C5:R1000C5"
750    ActiveWorkbook.Names.Add Name:="A.DER_COMPTEUR", _
        RefersToR1C1:="=A.Carb!R14C2"
760    ActiveWorkbook.Names.Add Name:="A.DER_DATE", _
        RefersToR1C1:="=A.Carb!R14C1"
770    ActiveWorkbook.Names.Add Name:="A.DER_KMJ", _
        RefersToR1C1:="=A.Carb!R8C8"

           
    ' Verrouiller toutes les feuilles
800    For Each Sh In Sheets
810        Sh.Protect
820    Next
    Exit Sub
Error_New_car:
Debug.Print "Ligne numéro=" & Erl(), "Erreur " & Err.Number & " " & Err.Description
Resume Next
 
End Sub
 

Phio79

XLDnaute Nouveau
Je viens de tester ton module, et j'ai toujours les 4 mêmes messages d'erreurs pour chaque feuilles copiées (donc 16 en tout), mais ce ne sont pas des erreurs "VBA" et la macro va bien jusqu'au bout sans erreur avec N° de ligne !

Du coup mon module d'avant avait le même fonctionnement, ce qui voudrait dire que c'est dans les feuilles de données que se trouve les problèmes qui empêchent la copie ?
 

ChTi160

XLDnaute Barbatruc
Bonsoir Phio79
Bonsoir fanch55
pour moi c'est tout Ok
pas de message d'erreur , les feuilles Sont Créées.
Question pourrais tu par exemple gérer les Noms avec Espace Ex : C5 Turbo , pour obtenir :
C5.Turbo par exemple
VB:
NomCar2$ = UCase(Replace(NomCar2$ ," ","."))
on pourrait aussi dans les feuilles "A.xxx" supprimer les Noms Ex : A.CUM_ASSUR Etc etc
ça éviterait de les supprimer pour les rajouter (On laisse les formules) puisqu'on les met a jour.
Bonne fin de Soirée
jean marie
 

Phio79

XLDnaute Nouveau
Bonsoir Jean Marie,

Les messages d'erreur sont toujours présents, mais pas causés par VBA (chose que j'ignorais au départ), mais tu as raison, je me rend compte maintenant que la macro fait bien ce qu'on lui demande je ne vais sans doute pas chercher plus loin.

Effectivement on peux gérer les espace dans les noms, mais comme c'est pour mon usage je n'aurai sans doute jamais les 2 versions d'un même véhicule ;-)

Pour ce qui est des zones nommées, elles sont utilisées dans les calculs et me facilitaient l'effacement dans les macros.
Mais bon le fichier a évolué avec le temps (pas depuis un moment) et je suis certain que la programmation est grandement perfectible.

Merci beaucoup à tous les deux d'avoir pris de votre temps pour m'aider, je pense que je vais quand-même profiter des optimisations que j'ai pu voir dans les fichiers de fanch55.
Bonne soirée
Philippe
 

Discussions similaires