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 :

Figer et libérer volet par macro dans Thisworkbook [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 645
    Points : 141
    Points
    141
    Par défaut Figer et libérer volet par macro dans Thisworkbook
    Bonjour le forum,

    J'ai la ligne 5 figée
    Je ne peux faire Range ("A1").Select et .Range("A1").Select.
    Donc j'ai fait Range("B6").Select et .Range("B6").Select
    Voyez-vous une possibilité pour incorporer un code ou "morceau" de code dans le Thisworkbook ci-dessous?
    Merci pour vos éventuelles réponses
    Cordialement

    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
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim NombreJour As Integer
    Dim Ladate As Date
    Dim MoisSuivant As String
     
      If Target.Count > 1 Then Exit Sub
      Application.EnableEvents = False
      ' On recherche si la page est surveillée
      If InStr(1, "JanvierFévrierMarsAvrilMaiJuinJuilletAoûtSeptembreOctobreNovembreDécembre", _
                  Split(Sh.Name, " ")(0), vbTextCompare) Then
        ' Calcul du nombre de jour dans le mois indiqué par le nom de la feuille
        NombreJour = Day(DateAdd("m", 1, DateValue(Sh.Name)) - 1)
        If Target.Row - 5 > Day(Date) Then
          Beep
          MsgBox "PAS LE BON JOUR"
          Target = ""
        Else
          ' Surveille la plage du 1er au dernier jours du mois
          If Not Intersect(Range("B6:C" & 5 + NombreJour), Target) Is Nothing Then
            ' Reconstruit la date de fonction du nom de la feuille et du numéro de ligne sélectionnée
            Ladate = DateSerial(Split(Sh.Name, " ")(1), Month(DateValue(Sh.Name)), Target.Row - 5)
            ' Si la colonne B et la colonne C est vide on efface la date
            Range("A" & Target.Row) = IIf(Range("B" & Target.Row) & Range("C" & Target.Row) = "", "", Ladate)
            ' si la ligne modifiée est la dernière du mois et que la colonne est la C
            If Target.Row = NombreJour + 5 And Target.Column = 3 Then
              ' On construit le nom de la feuille du mois suivant
              MoisSuivant = MonthName(Month(DateAdd("m", 1, DateValue(Sh.Name)))) & " " & Year(DateAdd("m", 1, DateValue(Sh.Name)))
              ' On va vérifier si la feuille existe
              If FeuilleExiste(MoisSuivant) = False Then Exit Sub
              Range("B6").Select
              ' La feuille existe
              With Sheets(MoisSuivant)
                'On la rend visible
                .Visible = xlSheetVisible
                ' On masque celle que l'on vient de finir
                ActiveSheet.Visible = xlSheetHidden
                ' et on la sélectionne
                .Select
                .Range("B6").Select
              End With
            End If
          End If
        End If
      End If
      Application.EnableEvents = True
    End Sub

  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
    12 791
    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 : 12 791
    Points : 28 669
    Points
    28 669
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voyez-vous une possibilité pour incorporer un code ou "morceau" de code dans le Thisworkbook ci-dessous?
    Quel bout de code ?
    Je ne vois pas de problème de faire un Range("A1").Select si les lignes de 1 à 5 sont figées
    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
    Membre habitué
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 645
    Points : 141
    Points
    141
    Par défaut
    Bonsoir Philippe Tulliez,
    J'ai un fichier de marche pour chaque mois de l'année et sur la cellule C35 ou C36 correspondant au dernier jour du mois je fais Suppr.
    Malgré un écran de 22 pouces il faut que j'utilise l'ascenseur pour voir les cellules C35 ou C36.
    Donc après l'enregistrement du mois suivant (exemple octobre) si je reviens au mois précédent (septembre) ma feuille Excel se trouve où je l'ai laissée (au 2/3 ou 3/4 de page).
    Il en est ainsi pour tous les mois
    Donc j'ai mis Range("B6").Select et .Range("B6").Select (voir macro ThisWorkbook) et ça fonctionne très bien
    Impossible avec Range("A1").Select et .Range("A1").Select
    La page reste où je l'ai laissée.
    J'ai fais => Fenêtre => Libérer les volets et ça fonctionne donc j'en déduis que ça vient de là.
    Peut-on insérer un code pour Libérer les volets et figer les volets?
    Moi je ne sais pas où le placer.
    Si astuce je suis preneur.
    Bonne fin de soirée à vous tous
    Bien cordialement

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Figer et libérer volet par macro
    L'enregistreur de macro ne te donne pas la réponse ?

    Sinon plus simplement tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Goto Sheets("Feuil1").[A1], True
    eric

  5. #5
    Membre habitué
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 645
    Points : 141
    Points
    141
    Par défaut
    Bonjour Eric,
    Effectivement l'enregistreur me le donne mais si ce que tu as fait fonctionne je le met où?
    D'autant plus que mon classeur est constitué de 12 feuilles : Janvier 2014, février 2014 mars 2014 etc...
    Bonne journée Bien cordialement à tous

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Une possibilité est de le mettre à l'activation de la feuille. Dans thisworkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        If InStr(1, "JanvierFévrierMarsAvrilMaiJuinJuilletAoûtSeptembreOctobreNovembreDécembre", _
                 Split(Sh.Name, " ")(0), vbTextCompare) Then
            Application.Goto Sh.[A1], True
        End If
    End Sub

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 791
    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 : 12 791
    Points : 28 669
    Points
    28 669
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si les premières lignes (ici de 1 à 6) sont figées effectivement lorsque l'on utilises les méthodes Select comme GoTo d'ailleurs ne font pas remonter les lignes.
    Pour cela, tu peux utiliser la propriété ScrollRow comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.ScrollRow = 1
    Quant à savoir où le placer dans ton code, il me semble que c'est toi qui doit le savoir.
    Normalement, il n'y a aucune raison d'utiliser les méthodes Select, Activate, etc. puisque l'on peut accéder à n'importe quelle cellule de n'importe quelle feuille,de n'importe quel classeur sans pour autant l'activer.

    [EDIT]
    Erreur de ma part, je n'avais pas vu que l'argument Scroll de la méthode GoTo avait la valeur à TRUE et permet de faire la même chose que ActiveWindow.ScrollRow = 1
    N'utilisant jamais ce genre de commande, cela m'avait échappé
    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

  8. #8
    Membre habitué
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 645
    Points : 141
    Points
    141
    Par défaut
    Re-bonjour eriiic
    Effectivement ça va bien dans A1 mais comment on le remet par la même macro STP?
    Merci d'avance.
    Très gentil de ta part.
    Bien cordialement

    Je n'ai pas été très explicite.
    Je veux parler de re-figer les volets dans la même macro.
    Merci d'avance Bien cordialement

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 791
    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 : 12 791
    Points : 28 669
    Points
    28 669
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    1) Tu actives l'enregistreur de macros
    2) tu figes les volets
    3) tu arrêtes l'enregistreur
    4) tu regardes le code ainsi généré et tu l'adaptes
    Si tu n'arrives pas à l'adapter, tu reviens sur le forum pour que l'on t'aide
    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

  10. #10
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    pour defiger les volets, la commande est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.FreezePanes = false

    Pour les refiger, il faut d'abords selectionner la cellule, la ligne, la colonne puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Feuil14.Rows(8).Activate
        ActiveWindow.FreezePanes = True
    Il suffit d'incorporer cela dans le code au bon endroit

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Si tu utilises Application.Goto Sh.[A1], True tu n'as pas besoin de dé-figer re-figer la fenêtre.
    eric

  12. #12
    Membre habitué
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 645
    Points : 141
    Points
    141
    Par défaut
    Bonjour eriiic,
    Mon gros c'est l'emplacement de ce code.
    Je ne suis pas grand spécialiste du VBA
    Si tu peux me placer ça au bon endroit pour moi c'est un plus ENORME
    Encore merci
    Bien cordialement

    OH!!! QUEL C$N!!!
    Pas vu que la ligne était dans le code.
    Merci beaucoup pour ton aide.
    Bonne journée à tous
    Bien cordialement

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/11/2011, 00h59
  2. [WD-2003] Alimentation signet par macro dans un formulaire
    Par Akane42 dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/04/2011, 16h29
  3. [XL-2003] Ecrire avec une macro dans Thisworkbook
    Par rmmonaco dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/05/2010, 17h41
  4. [XL-2003] Macro ANNULER une suppression (par macro) dans une feuille
    Par Airone1CF03 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/03/2010, 10h26
  5. créer un évenement dans ThisWorkbook par une macro
    Par jmcrib dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/09/2007, 11h56

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