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 :

Automatiser une mise a jour


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut Automatiser une mise a jour
    Bonjour le forum
    Chaque feuille de mon fichier est nommé avec cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Name = "PDG" & "_" & [année]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Name = "P1" & "_" & [année]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Name = "P2" & "_" & [année]
    etc etc

    année étant le nom d'une cellule dans PDG qui correspond à une date .
    donc des que je change cette date je dois ouvrir chaque feuille pour que la mise a jour des noms des onglets se fasse.
    Question
    il y a t il moyen d'automatiser dés que je change la valeur de cellule [année]
    merci de d'aide
    amicalement

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    oui tu peux utiliser les évènement d'une feuille ou d'un classeur au changement de la cellule voulu (avec utilisation Intersect en plus) :
    Les liens :
    Les évènements dans la feuille de calcul Excel
    Les évènements du module objet ThisWorkbook, dans Excel


    tu utliseras surtout change dans ton cas :
    II-E. Worksheet_Change

    après selon les paramètre tu pourrais le faire sur le classeur en une seule fois
    II-20. Workbook_SheetChange

    Donc au changement de la cellule voulu, vérification si le nom de la feuille différent de "PDG" & "_" & [année] par exemple
    si c'est le cas changé le nom
    la réponse au si devrait être true ou false

    Edit : qq petits ajouts + petite modif
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut suite
    merci beaucoup pour la réaction rapide
    Mais je dois rectifier mon niveau qui est vraiment un débutant en vba, et je dois t'avouer que je n'ai pas tout compris dans ta solution.
    si tu peux m'aiguiller davantage je t'en serai reconnaissant
    merci

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    juste avec les liens données un test rapide :
    Intersect ici sert juste à cibler le changement de la cellule incriminé moi j'ai choisi A1 renommé "année" (pour Intersect si les autres cellules de la feuille sont modifiés la macro ne s'applique pas)

    ici j'ai fait au plus simple j'ai choisi l'événement de la feuille donc le code est à mettre dans la feuille concerné; l'évènement choisi est (au changement de la feuille) :
    Private Sub Worksheet_Change(ByVal Target As Range)

    ce qui donne avec un test de réponse par MsgBox (change l'année de la cellule, une différente, puis remet la même)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
            MsgBox ActiveSheet.Name = "PDG" & "_" & [année]
        End If
    End Sub
    Edit : donc au final on aura :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
            If ActiveSheet.Name <> "PDG" & "_" & [année] Then
                ActiveSheet.Name = "PDG" & "_" & [année]
            End If
        End If
    End Sub
    Voilà je suis allé au plus simple.
    PS : Pense à utiliser l'aide avec en te positionnant sur la partie du code voulu puis faire F1
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut
    re
    j'ai donc mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
            If ActiveSheet.Name <> "PDG" & "_" & [année] Then
                ActiveSheet.Name = "PDG" & "_" & [année]
            End If
        End If
    End Sub
    dans le code de ma page PDG
    mais il se passe rien ou alors j'ai rien pigé
    merci

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    sans plus d'explication difficile de dire pourquoi
    voilà un fichier exemple, année est en A1 - modifie A1 manuellement
    Test.xls
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut
    en effet ton code marche très bien sur ton essai.
    Donc pourquoi cela ne marche pas avec mon fichier
    J'ai peut être oublié de te dire que ma cellule référence [année] était conditionné par une barre de défilement (controle active x)
    voila pourquoi peut être cela ne fonctionne pas

    POur t'informer au maximun voici le code de ma page
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    Private Sub Worksheet_Activate()
    ActiveSheet.Name = "PDG" & "_" & [année]
     
    End Sub
    Private Sub BDN_Click()
    Sheets("BDN" & "_" & [année]).Select
    End Sub
     
     
     
    Private Sub CommandButton1_Click()
    Sheets("Recette Oeuvres Sociales" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton10_Click()
    Sheets("Situation Fonct ccourant" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton11_Click()
    ActiveWorkbook.Save
    End Sub
     
    Private Sub CommandButton12_Click()
    appel2.Show
     
    End Sub
     
    Private Sub CommandButton13_Click()
     
    ActiveWindow.DisplayWorkbookTabs = False
     
     
     
    End Sub
     
    Private Sub CommandButton14_Click()
    ActiveWindow.DisplayWorkbookTabs = True
    End Sub
     
    Private Sub CommandButton15_Click()
    Sheets("appart").Select
    End Sub
     
    Private Sub CommandButton16_Click()
    Sheets("CADO_Chèques").Select
    End Sub
     
    Private Sub CommandButton17_Click()
    appel1.Show
     
    End Sub
     
     
     
     
     
    Private Sub CommandButton18_Click()
    Sheets("CV" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton19_Click()
    Sheets("T.R." & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton2_Click()
    Sheets("Dépense Oeuvres Sociales" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton20_Click()
    Sheets("Remb Spect" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton21_Click()
    Sheets("situation OS" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton22_Click()
    Sheets("Situation Fonct" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton23_Click()
    Sheets("Graph recette" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton24_Click()
    Sheets("Graphdepense" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton3_Click()
    Application.DisplayFullScreen = True
    Range("a1:af54").Select
    ActiveWindow.Zoom = True
      Range("a1").Select
    End Sub
     
    Private Sub CommandButton4_Click()
    Application.DisplayFullScreen = False
    Range("a1:af54").Select
    ActiveWindow.Zoom = True
      Range("a1").Select
    End Sub
     
    Private Sub CommandButton5_Click()
    Sheets("Recettes Fonct" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton6_Click()
    Sheets("Dépenses fonct" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton7_Click()
    Sheets("Situation livret " & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton8_Click()
    Sheets("Situation C.courant" & "_" & [année]).Select
    End Sub
     
    Private Sub CommandButton9_Click()
    Sheets("Situation C Livret Fonct" & "_" & [année]).Select
    End Sub
     
     
     
     
     
    Private Sub Virement_Click()
    Sheets("Virement" & "_" & [année]).Select
    End Sub
     
     
     Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("O10")) Is Nothing Then
            If ActiveSheet.Name <> "PDG" & "_" & [année] Then
                ActiveSheet.Name = "PDG" & "_" & [année]
            End If
        End If
    End Sub

    En espérant avoir pas trop fait d'erreur

  8. #8
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    désolé mais pour ma part je ne vois rien dans ton code me donnant une indication du pourquoi du comment
    un fichier test représentatif de ce que tu as avec les explications adéquates du fonctionnement de celui-ci me serait surement plus favorable
    sans oublié que apparement cette action peut se faire sur plusieurs feuilles, donc le fichier test doit donner une vision globale pour que l'on n'oublie rien

    Edit : tout ce que je sais, c'est que ta modif sur "année" se fait en O10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Not Application.Intersect(Target, Range("O10")) Is Nothing Then
    je ne vois pas de code se rapportant à une quelconque modification en O10 ou si c'est fait manuellement
    je ne sais pas si tu es sur la feuille concernée pour la modification du nom de l'onglet
    … etc
    à part une multitude de boutons pour passer d'un onglet à l'autre ou masquer/afficher les onglets et 2 useform en show
    sans compter que je n'ai vraiment aucune indication dans le fonctionnement de ton fichier

    difficile de dire ce qui ne va pas

    si tu récupères la valeur pour [année] d'une variable alors utilise cette variable; le code dépendra du contexte que je ne connais pas
    les explications doivent être claires et exhaustives

    Edit2 : une autre solution si tu as une formule sur [année] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Calculate()
            If ActiveSheet.Name <> "PDG" & "_" & [année] Then
                ActiveSheet.Name = "PDG" & "_" & [année]
            End If
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  9. #9
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut merci
    bonsoir
    avec le dernier code cela fonctionne tres bien sur ma page de garde , mais il y a t il possibilité de changer le nom de tous les onglets puisqu'il on tous en [année]
    merci

  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    Je vais te mettre sur la piste afin que tu puisses faire le code toi même (en partant de l’hypothèse que tous les onglets concernés aient la même année) :

    -Indication le code sera à mettre dans : II-19. Workbook_SheetCalculate

    -il faut que tu fasses une recherches internet pour boucler sur les feuilles comme par ex. : "vba boucle sur feuille"
    Attention prendre en compte les feuilles non incluses dans le changement de nom => utilisation donc d'un If - genre Si MaFeuille <> NomDeLaFeuilleExclue alors ... j'applique mon code
    pour tester la boucle il faudra que tu affiches le nom des feuilles via un MsgBox LaFeuille.name - Attention c'est juste pour illustrer là
    C'est pour te rendre compte de ce qui se passe

    -Dans ta boucle il faudra récupérer une partie du nom pour chaque feuille, donc ici tu devras utiliser : Manipuler les chaînes de caractères
    je te laisse découvrir et faire qq tests sur un des noms
    puis il faudra appliquer ce que tu as fait dans ton code final
    Exemple : si tu as PDG_2016 il faut te débrouiller pour récupérer PDG_

    -tu pourras alors dire NomDeTaFeuille = LaPartieDuNomRécupéré & [année] => donc tu auras ton nouveau nom pour chaque onglet

    Fais étape par étape dans l’ordre
    1 -Travail sur la boucle sur feuille
    2 -Exclure les feuilles non concernées
    puis l'intégrer dans le code
    3-Travail les chaînes de caractères pour récup une partie du nom
    puis l'intégrer dans le code
    4-Finaliser le tout avec le Workbook_SheetCalculate

    PS : j'ai oublié il faudra vérifié [année] dans l'un des onglets pour voir si le code doit s'appliquer ou pas - là aussi tu peux utiliser les chaînes de caractères
    mais il faut récupérer par ex. : dans PDG_2016 juste 2016
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  11. #11
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut
    merci
    je me mets au boulot

  12. #12
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonjour,
    si tu as quelques difficultés (après x et x essais), n'hésites pas à me montrer le code entrepris et ce qui coince,
    on regardera
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  13. #13
    Membre confirmé
    Homme Profil pro
    jeanlucmartin
    Inscrit en
    Avril 2009
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : jeanlucmartin

    Informations forums :
    Inscription : Avril 2009
    Messages : 101
    Par défaut
    encore merci
    j'essaye de construire quelque chose mais ma connaissance étant tres limité cela me prend bcp de temps , mais je désespère pas de te montrer qq chose
    merci

  14. #14
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Dis moi ou tu bloques ou la partie que tu ne comprends pas
    Et ce que tu as vu dans les renseignements / indications que je t'ai donné

    Edit : Conseils :

    - Les choses à faire lorsque l'on apprend c'est d'attaquer une action par une action en test (donc dans plusieurs Sub) pour la maitriser et la comprendre; exemple
    si tu veux comprendre comment boucler sur les feuilles alors tu ne fais que le code pour boucler sur les feuilles de ton classeur = une action
    si tu dois vérifier une condition tu ne fais que la conditions en code dans un sub tjs à part
    => une fois maitriser tu assembles le tout dans l'ordre logique du déroulement des actions

    - Utiliser le pas à pas (touche F8) en n'oubliant pas d'afficher la fenêtre des variables locales pour voir ce qui se passe dans le code
    et bien sur dans tes codes tu peux abuser du MsgBox et Debug.print pour afficher des valeurs ou partie de ton code afin de voir si tu fais fausse route ou pas
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Recuperer un logiciel complet A partir d'une mise a jour
    Par salimooo dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 29/03/2006, 09h28
  2. TADOTable VS TADOQuery pour une mise a jour
    Par okparanoid dans le forum Bases de données
    Réponses: 7
    Dernier message: 07/11/2005, 11h53
  3. [sqlserver][debutant] organiser une mise a jour
    Par cladsam dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/10/2005, 12h21
  4. Requete SQL permettent une mise a jour dans la base
    Par themagaly dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/06/2004, 09h32

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