IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Test sur un nom de feuille [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Par défaut Test sur un nom de feuille
    Bonjour,
    Je cherche via un UserForm à dupliquer une feuille servant de maquette pour créer un onglet par semaine (je recupere via une liste le n° de la semaine avant de lancer mon code).
    Mon problème:
    1 - quand je test si le n° de semaine n'as pas déjà été créer (ligne 14), Excel n'en fait pas cas.
    2- pour que la copie de la feuille soit opérationnel, il me faut la renommer avec le N° de la semaine désiré et je veux placer la nouvelle toujours au même endroit. J'ai mis en commentaire (ligne 20) le code dont je n'arrive pas a trouver la bonne syntaxe.
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton1_Click()
    'Création de onglet semaine
    Dim Sht As Worksheet
    Dim Test As Boolean
    Test = True
    Application.ScreenUpdating = False
     
    On Error Resume Next
        Select Case Range("No_semaine").Value
        Case ""
            MsgBox ("Veuillez saisir un n° de semaine")
        Case 1 To 52
            For Each Sht In Worksheets
            If Sheets(Sht.Name) = Range("No_semaine").Value Then Test = False
            Next Sht
            If Test Then
                        MsgBox ("Semaine deja existante, veuillez saisir un autre n° de semaine")
                    Else
                        Sheets("MAQUETTE A COPIER").Copy before:=Sheets("Affectation")
    '                    Sheets("Affectation").Index) - 1.Name = Range("No_semaine").Value
            End If
        Case Else
            MsgBox "N° de semaine non valide" & vbNewLine & vbNewLine & "Réessayez!"
    End Select
     
    On Error GoTo 0
    Application.ScreenUpdating = True
    Unload Me
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie comme ceci, ton numéro devant au format texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(Sht.Name) = CStr(Range("No_semaine").Value) Then test = False
    ou mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(Sht.Name) = Format(Range("No_semaine").Value, "00") Then test = False

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Essaies comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub CommandButton1_Click()
    Dim Sht As Worksheet
    Dim NumSem As Integer
     
    Application.ScreenUpdating = False
    NumSem = Val(Worksheets("Affectation").Range("No_semaine").Value)
    Select Case NumSem
        Case 1 To 52
            If IsExist(CStr(NumSem)) Then
                MsgBox "Semaine deja existante, veuillez saisir un autre n° de semaine"
            Else
                Worksheets("MAQUETTE A COPIER").Copy Before:=Worksheets("Affectation")
               ActiveSheet.Name = CStr(NumSem)
            End If
        Case Else
            MsgBox "N° de semaine non valide" & vbNewLine & vbNewLine & "Réessayez!"
    End Select
    'Unload Me
    End Sub
     
    Private Function IsExist(ByVal Nom As String) As Boolean
     
    On Error Resume Next
    IsExist = Worksheets(Nom).Name = Nom
    On Error GoTo 0
    End Function

  4. #4
    Membre confirmé Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Par défaut
    Bonjour,
    Daniel, merci d'avoir essayé mais ta première proposition que j'avais déjà tenté ne fonctionne pas. La 2ème non plus mais elle m'as permis de me rendre compte que je n'avais pas pris en compte le format.
    Citation Envoyé par Daniel.C Voir le message
    Bonjour,
    Essaie comme ceci, ton numéro devant au format texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(Sht.Name) = CStr(Range("No_semaine").Value) Then test = False
    ou mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets(Sht.Name) = Format(Range("No_semaine").Value, "00") Then test = False
    Bonjour mercatog,
    Très efficace la petite fonction pour vérifier si le nom existe dans les onglets du fichier (et le test en seule ligne ). Comme tu avais gentiment adapté le code a mon cas perso, je n'ai pas eu grand chose a modifier.
    J'adopte! Un grand merci.
    Citation Envoyé par mercatog Voir le message
    Essaies comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub CommandButton1_Click()
    Dim Sht As Worksheet
    Dim NumSem As Integer
     
    Application.ScreenUpdating = False
    NumSem = Val(Worksheets("Affectation").Range("No_semaine").Value)
    Select Case NumSem
        Case 1 To 52
            If IsExist(CStr(NumSem)) Then
                MsgBox "Semaine deja existante, veuillez saisir un autre n° de semaine"
            Else
                Worksheets("MAQUETTE A COPIER").Copy Before:=Worksheets("Affectation")
               ActiveSheet.Name = CStr(NumSem)
            End If
        Case Else
            MsgBox "N° de semaine non valide" & vbNewLine & vbNewLine & "Réessayez!"
    End Select
    'Unload Me
    End Sub
     
    Private Function IsExist(ByVal Nom As String) As Boolean
     
    On Error Resume Next
    IsExist = Worksheets(Nom).Name = Nom
    On Error GoTo 0
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. test sur le nom d'une propriété
    Par Hefbee dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/11/2007, 08h46
  2. Test sur le nom d'un dossier
    Par romu69 dans le forum Windows
    Réponses: 1
    Dernier message: 27/09/2006, 16h48
  3. Test sur un nom de fichier
    Par Ribéry dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/07/2006, 11h17
  4. test sur le nom d'une fonction
    Par Art19 dans le forum C
    Réponses: 6
    Dernier message: 26/06/2006, 18h29
  5. [XSL] Test sur le nom d'une balise
    Par KibitO dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 18/12/2005, 13h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo