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 :

Tester si des feuilles existent [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Par défaut Tester si des feuilles existent
    bonjour a tous!

    j'ai comme un prb
    je voudrais voir si une une feuille (Analyse) existe, la supprimer si c'est le cas puis la créer vierge.
    ensuite rentrer des données d'autre feuille ("RESUME_"&Mois).
    cependant elles aussi existe ou pas

    comment faire?

    j'ai fait un debut de code mais il est tres aproximatif.


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Public Function FeuilleExiste(ByVal strNomFeuille As String) As Boolean
    'Retourne TRUE si strNomFeuille est le nom d'une feuille qui existe dans le classeur actif
    ' FALSE dans le cas contraire
    FeuilleExiste = Not (IsError(Evaluate("='Analyse'!A1")))
    End Function
     
    Public Function Feuille2Existe(ByVal strNomFeuille As String) As Boolean
    Feuille2Existe = Not (IsError(Evaluate("='RESUME_" + Mois + "'!A1")))
    End Function
     
    Sub reception()
    Dim Mois As String, FeuilleExiste As Boolean, Feuille2Existe As Boolean
     
     
    If FeuilleExiste = True Then
        Sheets("Analyse").Delete
        'créer une nouvelle feuille
        Sheets.Add.Name = "Analyse"
        Sheets("Analyse").Select
    Else
        'créer une nouvelle feuille
        Sheets.Add.Name = "Analyse"
        Sheets("Analyse").Select
    End If
     
        i = 0
        For i = 0 To i = 12
        i = i + 1
     
        Mois = Sheets("Parametre").Cells(i, 6)
     
            If Feuille2Existe = True Then
            Sheets("RESUME_" & Mois).Select
            Range("K2").Select
            Range(Selection, Selection.End(xlToRight)).Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
            Sheets("Analyse").Select
        nb_ligne = Range("A1000000").End(xlUp).Row + 1
            Range("A" & nb_ligne).Select
            ActiveSheet.Paste
            Range("D" & nb_ligne) = Mois
        End If
        Next i
     
    End Sub
    merci de votre aide

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plusieurs solutions sont possibles.
    L'une d'elles consiste à parcourir la collection des feuilles
    Exemple avec une fonction booléenne qui renvoie TRUE si le nom de la feuille existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub testSheet()
     Debug.Print isSheetExist("toto")
    End Sub
    Function isSheetExist(Name as string) As Boolean
     Dim sht As Worksheet
     For Each sht In Worksheets
      If sht.Name = Name Then isSheetExist = True: Exit Function
     Next
    End Function
    Bonjour,
    A la relecture de ton post, je me rends compte que ma réponse était incomplète
    J'ai modifié la fonction isSheetExist pour éviter le problème lié à la casse.
    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
    Sub testSheet()
     If isSheetExist("Toto") Then
      Application.DisplayAlerts = False
      Sheets("toto").Delete
      Sheets.Add before:=Sheets(1)
      Sheets(1).Name = "Toto"
      Application.DisplayAlerts = True
     End If
    End Sub
    Function isSheetExist(Name) As Boolean
     Dim sht As Worksheet
     For Each sht In Worksheets
      If UCase(sht.Name) = UCase(Name) Then isSheetExist = True: Exit Function
     Next
    End Function
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    voir dans la même page, hier :
    http://www.developpez.net/forums/d12...he-sil-existe/

    PS : Les noms de feuilles ne sont pas sensibles à la casse, mais la recherche, oui.

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Didier,
    Citation Envoyé par Ormonth Voir le message
    Bonjour,
    voir dans la même page, hier :
    http://www.developpez.net/forums/d12...he-sil-existe/
    PS : Les noms de feuilles ne sont pas sensibles à la casse, mais la recherche, oui.
    Cordialement,
    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points
    Didier
    C'est pour cela que j'avais modifié le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If UCase(sht.Name) = UCase(Name) Then isSheetExist = True
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Salut Philippe

    j'avais, vu, c'est pour "jean bapt'" que je précisais car la fonction citée par Kiki29, elle, n'y est pas sensible grâce à la bonne écriture de Kiki29 .

    En effet si on écrit pour une feuille nommée "TOto":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print worksheets("toto").name
    , on aura en retour :
    "TOto" ce qui est logique.

    Le fait d'employer, sinon, l'opérateur de comparaison "=" en amont (qui travaille par défaut en binaire et non en texte) entraîne du coup une sensibilité à la casse, ce qui peut paraître bizarre si on ne sait pas...

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 39
    Par défaut
    bonjour!!

    merci pour vos réponses ça ma bien aidé!!

    j'ai cependant un prb que je n'arrive pas a résoudre...

    j'ai l'erreur:
    Argument ou appel de procédure incorrect

    pour une table dynamique que je crée dans le nouvel onglet Analyse...

    je ne vois vraiment pas d'ou ça peut venir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Analyse!R1C1:R1048576C5", Version:= _
            xlPivotTableVersion14).CreatePivotTable TableDestination:= _
            "Analyse!R1C7", TableName:="Tableau", _
            DefaultVersion:=xlPivotTableVersion14

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

Discussions similaires

  1. Tester si un feuille existe deja dans un workbook
    Par developpeur82 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/02/2013, 19h06
  2. Copie des feuilles spécifiques dans un classeur existant
    Par breizhgen dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/01/2012, 15h26
  3. [XL-2003] Tester si un TextBox existe sur la feuille Excel
    Par Skangell dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2010, 15h30
  4. Réponses: 1
    Dernier message: 27/02/2009, 12h29
  5. [langage] tester si un fichier existe
    Par schnecke dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2004, 11h24

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