Microsoft 365 code vba : comment contourner mon msg d'erreur 1004 nom de feuille existant

kuistau

XLDnaute Nouveau
bonjour à toutes et tous
dans mon programme je crée des fiches techniques et tableau fournisseur, donc j'ajoute une feuille je la renomme et la stock ds une base de donnée jusque là tout va bien.
mon msg d'erreur 1004 "nom de feuille existant", vous l'avez compris,.... pas besoin d'en rajouter.
comment faire pour contourner le problème? ou le résoudre? je bloque un peu svp j'ai besoin de vous :
j'ai une erreur sur la ligne 33 : sheets("fournisseur (2)").Name = nom_four

VB:
' nouveaufournisseur
Sub copiefournisseur()

Dim nomfour As String
Dim l As Integer



With Application
    
        .ScreenUpdating = False
        
End With
    
        sheets("fournisseur").Visible = True
        sheets("fournisseur").Select
        sheets("fournisseur").Copy After:=sheets(sheets.Count)
        sheets("fournisseur").Visible = False
        sheets("fournisseur (2)").Select
        nom_four = InputBox("entrez le nom du fournisseur : ")
      
        
        
If nom_four = "" Then

        MsgBox "sans nom la fiche sera éffacé"
        sheets("fournisseur (2)").Delete
        
        Exit Sub
 
Else

        sheets("fournisseur (2)").Name = nom_four
        Range("a1") = nom_four

        sheets("bd").Select
        l = sheets("bd").Range("c100").End(xlUp).Row + 1
        sheets("bd").Range("c" & l).Value = nom_four
    
End If
 
        sheets("tableau de bord").Activate
        btn = InputBox("entrez le numero du bouton à utilser ?")
        lig = (btn * 2)
    
If btn = "" Then

        MsgBox " sans nombre la liaison ne pourra pas se faire"
    
        Exit Sub
 
End If

        If IsNumeric(btn) Then
    
    With ActiveSheet.Shapes.Range(Array("btnf" & btn)).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.text = nom_four
        ActiveSheet.Hyperlinks.add Anchor:=Selection.ShapeRange.Item(1), Address:="", SubAddress:="'" & nom_four & "'!A1", TextToDisplay:=nom_four
        Cells(1, 1).Select
 
    End With
    
        Cells(lig, 3).Formula = "='" & nom_four & "'!R[-6]C[6]"
    
End If

End Sub

merci
kuistau
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

j'ai une erreur sur la ligne 33 : sheets("fournisseur (2)").Name = nom_four

En général, c'est parce que dans le classeur actif, la feuille qui porte le nom fournisseur (2) n'existe pas.
Pour contourner le problème de manière un peu cavalière:
  • avant cette ligne, inserer l'instruction : on error resume next
  • après cette ligne, inserer l'instruction : on error goto 0
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir
je sais pas mais tu n'a pas l'impression de travailler a l'envers ( la charue avant les boeufs)

tu copy fournisseur donc le nouveau devient fournisseur(2) et apres tu demande le nom du fournisseur

et si tu affichais ton inputbox avant !!!!!! et que si c'est pas vide tu copy et nomme ton fournisseur(2)

quand pense tu ca serait pas mieux ? ;)
A mediter
 

patricktoulon

XLDnaute Barbatruc
re
jecommencerais comme ca

VB:
Sub copiefournisseur()

Dim nomfour As String
Dim l As Integer
Application.ScreenUpdating = False
       
  nom_four = InputBox("entrez le nom du fournisseur : ")
   If nom_four <> "" Then
   
        With Sheets("fournisseur")
        .Visible = True: .Copy After:=Sheets(Sheets.Count): .Visible = False
        Sheets(Sheets.Count).Name = nom_four
        Range("a1") = nom_four
        End With
'...
'...
'....
end if
 

kuistau

XLDnaute Nouveau
bonjour patricktoulon

merci de ton aide, je viens de tester ton code
je rentre un nouveau fournisseur tout va bien
je rentre un fournisseur déjà existant et tj une erreur 1004
sur la ligne -
Sheets(Sheets.Count).Name = nom_four
"nom déjà existant "
tant pis je continu à chercher
à plus
kuistau
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
ben bien évidemment il faut tester l’existence du sheets c'est sur
c'est une base propre que j'ai réécrite

VB:
Function SheetsExist(nom): SheetsExist = TypeName(Evaluate(nom & "!A:B")) = "Range": End Function

Sub copiefournisseur()
Dim nomfour As String
Dim l As Integer
Application.ScreenUpdating = False
  nom_four = InputBox("entrez le nom du fournisseur : ")
   If nom_four <> "" 
     if   not SheetsExist(nom_four )  Then
      With Sheets("fournisseur")
      .Visible = True: .Copy After:=Sheets(Sheets.Count): .Visible = False
      Sheets(Sheets.Count).Name = nom_four
      Range("a1") = nom_four
      End With
  else
   sheets(nom_four ).activate
'...
'...
'....
    end if

End sub
 

kuistau

XLDnaute Nouveau
re re

alors j'ai eu testé une version avec une fonction mais je pense ne pas avoir bien compris le principe et j'ai surement fait des erreurs, ça n'a pas fonctionné ...étonnant pour un novice que je suis, non ?
peux tu éclairer ma lanterne?
merci patrick
kuistau
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 130
Membres
112 667
dernier inscrit
foyoman