Aplliquer macro sur plusieurs onglets

Résolu
PLAYA2 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
 PLAYA2 -
Bonjour,

J'ai créé une macro sur un onglet d'un fichier excel ; savez-vous comment appliquer cette même macro sur d'autres onglets de ce fichier (15 au maximum) ?
De plus, pour 2 onglets de ce fichier, il ne faut pas appliquer cette macro... Eh oui ce serait trop simple...

D'avance merci pour vos lumières !!!

14 réponses

  1. PLAYA2 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    Cette demande est pour excel 2002.

    Merci
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    sans voir la dite macro, peu d'espoir de solution...
    et le nom des 2 exclus
    au besoin
    mettre le classeur sans données confidentielles en pièce jointe sur
    https://www.cjoint.com/
    puis copier l'adresse du lien et la coller dans le message de réponse

    Michel
    0
  3. PLAYA2 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    La macro est la suivante :

    If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
    Rows("8:133").Hidden = True
    Else
    Rows("8:133").Hidden = False
    End If
    If Cells(258, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
    Rows("134:263").Hidden = True
    Else
    Rows("134:263").Hidden = False
    End If
    End Sub

    et les 2 onglets auxquels ne pas appliquer la macro se nomment : DptVAL et MDG
    L'onglet qui contient la macro se nomme VAL01et les autres onglets auxquels appliquer la macro : VAL02, VAL 03, VAL04 etc...

    J'espère que ces infos suffiront!!!

    D'avance merci
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    re,

    essaies
    Sub cacher_ou_non()
    Dim Nbre As Byte
    Application.ScreenUpdating = False
    Nbre = ThisWorkbook.Sheets.Count
    For cptr = 1 To Nbre
    
         If Sheets(cptr).Name <> "DptVAL " And Sheets(cptr).Name <> "MDG" Then
              If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
                   Rows("8:133").Hidden = True
              Else
                   Rows("8:133").Hidden = False
              End If
              If Cells(258, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
                   Rows("134:263").Hidden = True
              Else
                   Rows("134:263").Hidden = False
              End If
         End If
    
    Next
    
    End Sub

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. PLAYA2 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
     
    Ok, je tente ça dès demain et te tiens au courant.

    Merci et bonne soirée !!!
    0
  7. playa2
     
    Re Miche-m,

    Désolée de n'avoir répondu plus rapidement.

    J'ai essayé ta macro mais je n'ai pas le résultat escompté, en effet elle fonctionne bien sur un onglet mais ne s'applique pas sur les autres !!!
    Pour être sûre de ne pas faire d'erreur de frappe, j'ai fait un copier coller de ta macro et je n'ai pas eu de message d'erreur.

    N'y a t-il pas, plus simplement, de syntaxe permettant de "boucler " ???

    D'avance merci de votre aide à tous,

    Et bonne journée !!!
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour

      Effectivement, une erreur grossière de ma part, excuse-moi
      Sub cacher_ou_non()
      Dim Nbre As Byte
      Application.ScreenUpdating = False
      Nbre = ThisWorkbook.Sheets.Count
      For cptr = 1 To Nbre
           With Sheets(cptr)
                     If .Name <> "DptVAL " And .Name <> "MDG" Then
                          If .Cells(129, "AK").Value = 0 And Not IsEmpty(.Cells(129, "AK").Value) Then
                               .Rows("8:133").Hidden = True
                          Else
                               .Rows("8:133").Hidden = False
                          End If
                          If .Cells(258, "AK").Value = 0 And Not IsEmpty(.Cells(129, "AK").Value) Then
                               .Rows("134:263").Hidden = True
                          Else
                               .Rows("134:263").Hidden = False
                          End If
                End If
           End With
      Next
      
      0
  8. PLAYA2
     
    Re,

    Je viens d'essayer mais j'ai le message d'erreur suivant :

    Erreur d'exucution "1004"
    Impossible de définir la propriété Hidden de la classe Range

    et dans la macro la ligne suivante est surlignée en jaune :
    .Rows("8:133").Hidden = False

    Je rappelle que je travaille sur Excel 2002, serait-ce la raison ????

    D'avance merci.
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      curieux... j'avais testé sur une maquette et c'était OK !
      pour XL2002 je ne pense pas mais je ne l'ai plus, donc...

      Je viens de faire l'opération avec l'enregistreur
      et après élagage de select-sélection j'ai cette ligne

      Rows("10:21").EntireRow.Hidden = True

      à essayer, peut-^tre que...

      Tu dis, ca peut servir
      :o)
      0
  9. PLAYA2
     
    Hello,

    J'ai retesté mais ça ne fonctionne toujours pas enfin que sur l'onglet dans lequel j'ai saisi la macro...

    Pour être sûre d'avoir bien compris ton dernier message, voici la macro finalisée (les numéros de lignes ont changés) :

    Sub Macropage()
    '
    'Dim Nbre As Byte
    application.ScreenUpdating = False
    Nbre = ThisWorkbook.Sheets.Count
    For cptr = 1 To Nbre

    If Sheets(cptr).Name <> "MDG" Then
    If Cells(136, "AK").Value = 0 And Not IsEmpty(Cells(136, "AK").Value) Then
    Rows("8:140").EntireRow.Hidden = True
    Else
    Rows("8:140").Hidden = False
    End If
    If Cells(280, "AK").Value = 0 And Not IsEmpty(Cells(280, "AK").Value) Then
    Rows("163:284").EntireRow.Hidden = True
    Else
    Rows("163:284").Hidden = False
    End If
    End If

    Next

    End Sub

    Cdlt.
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Ce n'est pas la dernière macro que je t'ai transmis, le 14/1 à 14:31H...
      d'autre part "entirerow" est à écrire aussi pour les "false"
      0
  10. PLAYA2
     
    Salut,

    En effet désolée, j'ai posté la mauvaise macro mais j'avais bien tenté la deuxième version et même problème => Erreur d'exucution "1004"
    Impossible de définir la propriété Hidden de la classe Range

    Voici la macro testée :

    'Dim Nbre As Byte
    application.ScreenUpdating = False
    Nbre = ThisWorkbook.Sheets.Count
    For cptr = 1 To Nbre
    With Sheets(cptr)
    If .Name <> "MDG" Then
    If .Cells(129, "AK").Value = 0 And Not IsEmpty(.Cells(129, "AK").Value) Then
    .Rows("8:133").EntireRow.Hidden = True
    Else
    .Rows("8:133").EntireRow.Hidden = False
    End If
    If .Cells(258, "AK").Value = 0 And Not IsEmpty(.Cells(258, "AK").Value) Then
    .Rows("134:263").EntireRow.Hidden = True
    Else
    .Rows("134:263").EntireRow.Hidden = False
    End If
    End If
    End With
    Next

    End Sub

    Pour info, quel élément dans cette macro donne l'ordre d'appliquer sur plusieurs onglets ??? J'essaie de décrypter pour mieux apprendre la logique et progresser - merci

    A bientôt
    0
  11. PLAYA2
     
    Pour info, j'ai également la message suivant :

    Erreur de compilation : Next sans For
    0
  12. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    J'avais testé la macro et c'était OK....
    donc, sur une maquette, essaies avec l'enregistreur de macro de cacher une sélection de lignes et regarde le code

    relance la macro avec les lignes masquées
    0
  13. PLAYA2
     
    Je ne suis pas sûre d'avoir bien compris !!!

    Cette macro fonctionne très bien (masquage de ligne selon condition) :
    If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
    Rows("8:133").Hidden = True
    Else
    Rows("8:133").Hidden = False
    End If
    If Cells(258, "AK").Value = 0 And Not IsEmpty(Cells(258, "AK").Value) Then
    Rows("134:263").Hidden = True
    End If
    End Sub

    Par contre pour celle-ci (appliquer masquage sur tous les onglets) :
    Dim Nbre As Byte
    application.ScreenUpdating = False
    Nbre = ThisWorkbook.Sheets.Count
    For cptr = 1 To Nbre

    With Sheets(cptr)
    If .Name <> "MDG" Then
    If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
    Rows("8:133").Hidden = True
    Else
    Rows("8:133").Hidden = False
    End If
    If Cells(258, "AK").Value = 0 And Not IsEmpty(Cells(258, "AK").Value) Then
    Rows("134:263").Hidden = True
    Else
    Rows("134:263").Hidden = False
    End If
    End If

    Next

    End Sub

    Me renvoie le message d'erreur => Next sans For
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      C'est pas possible! fais un peu attention !!! :-(

      regarde la macro que je t'ai envoyé et dis moi si hasard il n'y aurait pas un point devant les références cells et rows...

      Abandon du suivi
      0
  14. PLAYA2
     
    Ok, un grand mea culpa mais vu que sur la 1ère macro qui fonctionne très bien, il n'a pas de point devant rows et cells...

    Quoiqu'il en soit un grand merci pour ta patience qui je l'ai compris et c'est normal à des limites !!!
    0
  15. PLAYA2
     
    Pour info,

    Afin que cette macro fonctionne, il faut supprimer les lignes (pour excel 2002):

    .Rows("10:20").Hidden = False

    Encore un grand merci à ceux qui m'ont bien aidé sur ce forum.

    A bientôt.
    0