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 :

appliquer le code sauf premier feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut appliquer le code sauf premier feuille
    Bonjour

    Je cherche à appliquer une macro automatique inscrite dans thisworkbook à toutes les feuilles sauf la premiere.

    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 Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
     
     
    'pour spécifier la feuille 2
    For Sheet = 2 To Sheets.Count
     
     
     Dim rwIndex As Long, colIndex As Long
     
    For rwIndex = 2 To 33
        For colIndex = 3 To 8
               If (sh.Cells(rwIndex, colIndex).Value = sh.Cells(8, colIndex - 1).Value Or _
               sh.Cells(rwIndex, colIndex).Value = sh.Cells(9, colIndex - 1).Value Or _
               sh.Cells(rwIndex, colIndex).Value = sh.Cells(21, colIndex - 1).Value) _
               And sh.Cells(rwIndex, colIndex).Value <> "" Then
                MsgBox "vous n'avez pas le droit"
                ActiveCell.Value = ""
                Exit Sub
                End If
        Next colIndex
    Next rwIndex
     
    Next
     
    end sub
    Mais il y a probablement un problème sur Activecell.value. Il semble exécuter le code même si je bricole sur la première feuille.
    La boucle sur sheet n'est pas la bonne instruction ?
    Merci par avance

  2. #2
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Par défaut
    Bonjour docjo,

    ta boucle sur sheet ne sert à rien dans ce cas là (tu répètes uniquement la même opération n-1 fois ton nombre de feuille.
    Si ta feuille 1 s'apelle Feuil1 (attention je ne parle pas du nom donné à l'onglet mais bien du nom de l'objet Feuil qui apparait dans l'éditeur VBA dans l'attribut Name)

    En lève ta boucle sur les Sheet et met une condition du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if Sh.name=Feuil1.name then exit sub

  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,

    tu es dans une évènementielle et tu as d'origine un argument sh...
    vois dans l'aide vba et dans les tutos de forum les références aux évènements de feuilles - classeur

    il faut faire du genre 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
    Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
     
     Dim rwIndex As Long, colIndex As Long
    'pour spécifier la feuille 2
    'For Sheet = 2 To Sheets.Count
    '
    If sh.Index > 1 Then
     
    For rwIndex = 2 To 33
        For colIndex = 3 To 8
               If (sh.Cells(rwIndex, colIndex).Value = sh.Cells(8, colIndex - 1).Value Or _
               sh.Cells(rwIndex, colIndex).Value = sh.Cells(9, colIndex - 1).Value Or _
               sh.Cells(rwIndex, colIndex).Value = sh.Cells(21, colIndex - 1).Value) _
               And sh.Cells(rwIndex, colIndex).Value <> "" Then
                MsgBox "vous n'avez pas le droit"
                ActiveCell.Value = ""
                Exit Sub
                End If
        Next colIndex
    Next rwIndex
    End If
    'Next
     
    End Sub
    et voir ce qu'on veut, si tu es sur que ta feuille 1 est toujours la 1, utilises les index (si elle est renommée tu ne risque rien), si elle est déplacée utilise les noms (mais on sort précisément de ta question).

    cordialment,

    Didier

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Merci pour vos 2 réponses qui marchent. Mais avant de marquer résolu, j'ai 2 questions:
    - Dans le tutorial, sur les évènement de feuille (ici), il est marqué :
    Le paramètre Sh correspond à l'onglet contenant la cellule modifiée.
    Qu'est-ce que l'onglet ? Est-ce le nom de la feuille ?

    - Si je ne veux appliquer le code que sur la feuille où l'on travaille, peut-on utiliser activesheet ? Et dans ce cas, peut-on cumuler activesheet et exclure la première feuille ? (en fait, une partie des autres codes de ma feuille fait appel à des plages de la feuille1. Les noms des personnes figurant dans ces plages font office de liste, que je veux pouvoir modifier).

    Merci pour votre précieuse aide.

  5. #5
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Bonjour,

    Pour répondre à ta première question :

    ---> Il ne faut pas confondre un objet et une propriété.
    Dans l'exemple que t'as avancé, Sh est un objet [dans ton cas feuille (ou onglet)]
    Par contre Sh.Name est le nom de cet objet (Dans ton cas le nom de la feuille). Dit autrement, Name est une propriété de l'objet Sh.


    Pour répondre à ta deuxième question :

    Attention t'as utilisé un évenement sur le classeur, si tu utilises en plus un evénement sheet --> il peut y avoir un conflit et donc erreur.

    Mais tu peux dans ton évenement Workbook, inclure une spécification concernant la feuille 1 dans ta clause if mentionné dans ton code.

    exemple:
    Mais sauf information complémentaire, il ne peut pas y avoir de solution optimale.

    Bonne journée

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Par défaut
    Excellent ! J'ai compris. Je peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     If Sh.Name <> "Feuille1" then
    'Le nom de ma feuille ne changera pas. Le code ne s'appliquera pas sur la feuille nommée "Feuille1"
    Je continu à bricoler et je vous remercie pour votre aide.

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

Discussions similaires

  1. Appliquer un même code sur plusieurs feuilles Excel
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/04/2009, 10h24
  2. Execution de code sur plusieurs feuilles
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/12/2006, 11h12
  3. forcer a prendre la premiere feuille excel
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/10/2006, 09h16
  4. [excel] même code sur plusieurs feuilles
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/11/2005, 12h23
  5. [debutant] comment appliquer le code d'un bouton
    Par philippejuju dans le forum MFC
    Réponses: 3
    Dernier message: 20/01/2004, 10h56

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