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 :

Modifier plusieurs modules de feuilles de calcul en même temps


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut Modifier plusieurs modules de feuilles de calcul en même temps
    Bonjour,

    J'ai le code:

    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 Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
        Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives"
       ENREGISTRERMODIFETMAILOUIMlR2
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
     
     
    End Sub
    que je répète dans 115 feuilles de calcule différentes fois avec, à chaque fois le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlRX
    qui change:

    ENREGISTRERMODIFETMAILOUIMlR est un appel à un code contenu dans un module


    X=1
    X=2
    X=3......


    Comment pourrais-je le dupliquer par copier/coller sans avoir, à chaque fois à rouvrir chaque le code de chaque worksheet pour changer 1; 2; 3....


    J'ai essayé d'inscrire 1; 2; 3... dans une cellule de la feuille et de rédiger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR & Range("IV1").Value
    avec, dans chaque feuille 1; 2; 3....: IV1=1; 2; 3...

    Mais excel ne reconnaît pas cette syntaxe.


    qdois-je corriger?

    MErci beaucoup d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,
    tu as
    Code dans ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     
    End Sub
    Dernière modification par Invité ; 21/05/2014 à 12h44.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    ok, comment je rédige pour indiquer à Excel de faire l'action dans chaque feuille ?

    et surtout


    comment j'appelle chaque module propre à sa feuille ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    et surtout


    comment j'appelle chaque module propre à sa feuille ?
    tu faits selon le nom de la feuille?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        Select Case Sh.Name
            Case "Feuille1"
                MacroFeuille1 Target ,Cancel 
            Case "Fueille2"
                MacroFueille2 Target ,Cancel 
        End Select
    End Sub
    Code Dans un module séparé : 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
    sub MacroFeuille1(ByVal Target As Range, Cancel As Boolean)
     Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives"
       ENREGISTRERMODIFETMAILOUIMlR2
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    end sub
    en revanche si il n'y a qu'une valeur qui change exemple le N° de colonne 45,46,.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        Select Case Sh.Name
            Case "Feuille1"
                MacroToutesLesFeuille Target, Cancel, 45
            Case "Fueille2"
                MacroToutesLesFeuille Target, Cancel, 46
        End Select
    End Sub
    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
    Sub MacroToutesLesFeuille(ByVal Target As Range, Cancel As Boolean, Col As Integer)
     Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, Col), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives"
       ENREGISTRERMODIFETMAILOUIMlR2
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    End Sub
    Dernière modification par Invité ; 21/05/2014 à 13h05.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    ok tu m'avance déjà beaucoup. Aurais tu un solution pour appeler mon code modifmail 1 ; 2 ; 3......

    avec ce code, je continue à faire un module sépare par feuille ?
    Existe t il un moyen, en terme profane d'instituer un nom de macro feuillen pour que le code workbook appelle la feuille 1 quand je double clic dedans la 2, la 3......
    Auquel cas modifmail deviendrait modifmail 1 2 3 .... mais je n'ai pas trouver la syntaxe pour appeler une macro avec une variable dans son nom


    en fait il n'y a qu'une chose qui change c'est cet appel aux macros modifmail n

  6. #6
    Invité
    Invité(e)
    Par défaut
    non tu peux faire un module pour toutes le feuille je t'es explique dan mon dernier poste relis tous si le traitement est exactement le même pour toute les feuilles.
    Code Module ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     
               MaMacro Target ,Cancel 
     
    End Sub
    Code Module1 : 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
    Sub MaMacro (ByVal Target As Range, Cancel As Boolean)
     Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives"
       ENREGISTRERMODIFETMAILOUIMlR2
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Oui, OK, j'avais oublié ma recherche dans la feuille X.

    En l'occurence, une chose change:

    Dans ton dernier code, la macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR2
    Sera toujours celle appelée or pour la feuille 1 ça sera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR1
    La 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR2
    Etc....

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        Select Case Sh.Name
            Case "Feuille1"
                MacroToutesLesFeuille Target, Cancel, "ENREGISTRERMODIFETMAILOUIMlR1"
            Case "Fueille2"
                MacroToutesLesFeuille Target, Cancel,"ENREGISTRERMODIFETMAILOUIMlR2"
        End Select
    End Sub
    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
    Sub MacroToutesLesFeuille(ByVal Target As Range, Cancel As Boolean, Ref As string)
     Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives " & Ref 
     
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    End Sub
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     
                MacroToutesLesFeuille Target, Cancel, Sh.Index
     
    End Sub
    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
    Sub MacroToutesLesFeuille(ByVal Target As Range, Cancel As Boolean, I As integer)
     Dim Recherche As Range
    Set Recherche = Sheets("X").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives ENREGISTRERMODIFETMAILOUIMlR" & i
     
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    End Sub
    Dernière modification par AlainTech ; 26/05/2014 à 01h08. Motif: Suppression de la citation inutile

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Ta première solution m'a l'aire idouane car dans la seconde, je ne comprends pas le passage de la msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Il y a des réponses positives ENREGISTRERMODIFETMAILOUIMlR" & i
    à l'appel de la macro concernée?

    Une dernière question avant que je teste et que je te dise ce qu'il en est:

    Dans mon code, dans chaque feuille, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Recherche = Sheets("Feuil1").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Recherche = Sheets("Feuil2").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    .......

    que dois-je faire de 1 2 3 ...derrière Feuil?

    dans le code unique, si je mets Feuil1 seulement ça sera toujours elle qui sera concernée.

    Comment faire pour que la feuil concernée soit la feuille du double clic?

  10. #10
    Invité
    Invité(e)
    Par défaut
    c'est mois qui comprends plus ce que je te propose le fait sur toutes le feuilles. par contre tu veux changer ENREGISTRERMODIFETMAILOUIMlR 1,2,x
    il faut bien lui dir à ta macro de quoi il s'agi faire une macro unique non?
    Dernière modification par AlainTech ; 26/05/2014 à 01h09. Motif: Suppression de la citation inutile

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    En fait, ça correspond à un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ENREGISTRERMODIFETMAILOUIMlR1
    pour la Feuil1

    2 pour la 2
    3.........


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR1
    2 3 .....

    Sont des modules saisies à part (Ils lancent Word et une impression sous word mais c'est une autre histoire)

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ENREGISTRERMODIFETMAILOUIMlR & i
    ne fonctionne pas

    Pour le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Recherche = Sheets("Feuil1").Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    Dans le code unique pour toutes les feuilles du workbook, Feuil1 ne risque t il pas de poser un problème.
    J'avais oublié de le préciser avant j'avai mis un X mais le code changeait pour chaque feuille de calcul, dans Feuil1, Sheets("Feuil1")....idem pour Feuil2: Sheets("Feuil2")....3....
    Mais dans le cadre d'un code qui gère toutes les feuilles, le code va rechercher "OUI" uniquement dans la feuille de calcul Feuil1, non?

    Je précise:

    La recherche doit se faire dans chaque feuille de calcule du classeur dans laquelle je double clic.

    Je pense que ton code dans le workbook qui gère chaque feuille sera ok sans problème mais c'est moi qui avait mal expliqué ce point.

    Le code ne doit pas rechercher dans sheets("X") en fait mais à chaque fois que je double clic dans la cellule définie de chaque feuille......

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    En fait, ça correspond à un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ENREGISTRERMODIFETMAILOUIMlR1
    pour la Feuil1

    2 pour la 2
    3.........


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ENREGISTRERMODIFETMAILOUIMlR1
    2 3 .....

    Sont des modules saisies à part (Ils lancent Word et une impression sous word mais c'est une autre histoire)
    ok
    toi tu veux créer une macro qui génère des macro pour chaque feuille? d'ou le titre :Modifier plusieurs modules de feuilles de calcul en même temps

    comment veux tu le faire (par macro) si les dites macron on un contenu différent!
    si leurs contenues est identique alors utilise le double click au niveau du classeur comme je te le propose!
    en réalité il est tout a possible de réaliser une macro commune qui gère les particularité de chaque feuille.

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Il s'agit de déclencher un action sur double clic dans chaque feuille de calcule et dans le code de l'action, appeler d'autres macros.

    2 choses changent:

    - La feuille dans laquelle je double clic

    - La macro a appeler qui a toujours le même nom sauf que celle rattachée à la feuille 1 s'appellera modifmail1; à la feuille2, modifmail2...... jusqu'à 115

    Jusqu'à présent, j'avais un code par feuille qui appelait son module correspondant et je cherchait à passer à un code unique dans workbooks qui ferait la même chose, oui, je crois qu'on peut le dire comme ça

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Il s'agit de déclencher un action sur double clic dans chaque feuille de calcule et dans le code de l'action, appeler d'autres macros.

    2 choses changent:

    - La feuille dans laquelle je double clic

    - La macro a appeler qui a toujours le même nom sauf que celle rattachée à la feuille 1 s'appellera modifmail1; à la feuille2, modifmail2...... jusqu'à 115
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        
                MacroToutesLesFeuille Sh , Target, Cancel
          
    End Sub

    ici on passe la feuille de calcul on peut définir en foction de ça modifmail1,modifmail2...,modifmailx
    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
    Sub MacroToutesLesFeuille(ByVal Sh As Object,ByVal Target As Range, Cancel As Boolean, I As integer)
     Dim Recherche As Range
    Set Recherche = Sh.Columns("AS").Find("OUI", LookIn:=xlValues, LookAt:=xlWhole)
    If Not Recherche Is Nothing Then  'donc trouvé
       'ici tu appelles ta procédure
     
        'En supposant que les adresses courriels sont en colonne J
        If Range("A2") > "" And InStr(1, Cells(Target.Row, 45), "OUI") > 0 Then
     
     
            MsgBox "Il y a des réponses positives "
     
        Else
            MsgBox "Il n'y a pas de réponses positives"
     
        End If
     End If
     
     
         Target.Offset(1, 0).Select
    End Sub

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    Jusqu'à présent, j'avais un code par feuille qui appelait son module correspondant et je cherchait à passer à un code unique dans workbooks qui ferait la même chose, oui, je crois qu'on peut le dire comme ça
    tu as la même chose dans ThisWorkbook et ça s'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    
    End Sub

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je venais justement de penser à cela pour la rechecherc dans la feuille.

    Mais je ne vois pas ton ?

    Ou alors je cherche mal

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/10/2010, 09h45
  2. Plusieurs mise à jour d'une bd en même temps
    Par missd12 dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 14/08/2009, 10h51
  3. Réponses: 16
    Dernier message: 31/05/2009, 02h13
  4. Modifier l'échelle et redimensionner une image en même temps
    Par Pierrow dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 7
    Dernier message: 26/05/2009, 14h36
  5. Réponses: 6
    Dernier message: 01/07/2008, 13h39

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