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 :

update automatique cellules


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    j'ai un fichier Excel avec les 12 mois de janvier à décembre et une 13éme feuil année (qui calcul la clôture de l'année.
    Sur chaque SUR j'ai des personnes à partir de la 10éme ligne avec Nom (colonne D), Prénom (colonne E) et un Identifiant (colonne B).
    Je veux faire un programme VBA qui me permettra si je fais une mise à jour sur un nom ou un prénom que ça se répercute sur toutes mes feuils puisque chaque personne a son unique identifiant et les colonnes aussi restent les mêmes sur mes feuils.
    Merci d'avance.

    Je mets un fichier d'exemple.
    Cordialement.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une proposition simple, et uniquement tirée des outils des Tableaux Excel : l'idée est de proposer le choix d'un matricule présent dans le tableau de synthèse
    Cela affiche le nom et le prénom de la personne
    On peut modifier l'un ou l'autre
    on valide et ça se répercute sur les 13 tableaux

    voici, je l'ai fais rapidement, alors test bien :

    1) Créer un Userform avec :

    - une Combobox Appelée Combobox_ID
    - deux textbox appelées TextBox_NOM et TextBox_PRENOM
    - un bouton de commande appelé CommandButton_MODIFIER


    2) Coller dans le module du Userform les trois procédures suivantes

    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
    Private Sub ComboBox_ID_Change()
     
    With Me
        ' gestion des identifiants inexistants
        If .ComboBox_ID.ListIndex = -1 Then
            .ComboBox_ID.Value = ""
            .TextBox_NOM.Value = ""
            .TextBox_PRENOM.Value = ""
            Exit Sub
        End If
     
        ' récupération du nom et du prénom lié à l'identifiant choisi dans le menu déroulant
        .TextBox_NOM.Value = Worksheets("Synthèse").ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 3)
        .TextBox_PRENOM.Value = Worksheets("Synthèse").ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 4)
    End With
     
    End Sub
     
    Private Sub CommandButton_MODIFIER_Click()
     
    With Me
        ' gestion du clic sur le bouton alors qu'on a rien choisi
        If .ComboBox_ID.Value = "" Then
            MsgBox "Veuillez choisir un identifiant et effectuer les modifications souhaitées"
            Exit Sub
        Else
            ' modification des nom/prénoms dans les 13 tableaux
            For i = 1 To 13
                Worksheets(i).ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 3).Value = .TextBox_NOM.Value
                Worksheets(i).ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 4).Value = .TextBox_PRENOM.Value
            Next i
        End If
    End With
     
    End Sub
     
    Private Sub UserForm_Initialize()
    ' chargement de la liste des identifiants du tableau de synthèse
    Dim Tablo
    Tablo = Worksheets("Synthèse").ListObjects(1).ListColumns(1).DataBodyRange
    Me.ComboBox_ID.List = Tablo
    Application.ScreenUpdating = True
    End Sub


    Tiens nous au courant

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    C'est avec un grand soulagement que je reviens vers vous pour vous dire que ça marche super bien.
    Merci encore.

    xlp - essai resolu.xlsm

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ravi que ça te convienne

    une petite suggestion, met l'affichage de ton Userform en non modal quand tu l'appelles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'choisi l'un des quatres, c'est pareil
    'UserForm1.Show 0
    'UserForm1.Show (0)
    'UserForm1.Show (vbModeless)
    UserForm1.Show vbModeless
    ça te permettra de pouvoir continuer à naviguer dans tes différents onglets avec le formulaire affiché

    et au passage, tu peux remplacer le dernier des trois codes par celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    ' chargement de la liste des identifiants du tableau de synthèse
    Me.Combobox_ID.List = Application.Transpose(Worksheets("Synthèse").ListObjects(1).ListColumns(1).DataBodyRange)
    End Sub
    j'ai mal nettoyé avant de te le transmettre

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci pour tout.
    C'est fait avec clarté.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    A ma grande surprise depuis 9h j'essaie de l'implémenter sur la solution en place et oupsss
    erreur"9"l'indice n'appartient pas à la sélection
    qu'est ce qui pourrait etre à de cet
    erreur 9 l'indice n'appartient pas à la sélection
    .

    • Que la feuille de synthèse ne soit plus à la 13ème position ?

    • Ou que mon tableau aulieu de commencer à la 10ème ligne commence à la 11ème.

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    il faut savoir quelle ligne de quelle macro génère l'erreur ... qui signifie qu'en gros on appelle ou utilise un objet introuvable

    montre les macro telles que tu les adaptées et indique la ligne qui plante

    il est vrai que le code que je t'ai proposé repose en partie sur la structure des feuilles, mais j'ai procédé de la même manière que d'autres macros qui étaient dans ton classeur exemple (boucle sur les 13 premières feuilles, qui ne contenaient chacun qu'un unique tableau numéroté de 1 à 13)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    bonjour,
    voici comment j'ai trouvé le répertoire sur l'application d'origine. Pièce jointe 180115
    Pour l'adapter j'ai essayé de tout prendre en compte comme par exemple au lieu de synthèse c'est cloture...
    Pour l'erreur c'est à ce niveau , l'appel de mon formulaire.
    j'ai mis en pj le format exacte des tableaux qu'on utilise dans le classeur. xlp - essai.xlsm
    Merci d'avance

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    je n'arrive pas à reproduire le problème

    j'ai ouvert le classeur
    appuyé sur le bouton de ta feuille janvier
    le formulaire s'est affiché
    j'ai modifié un nom + son prénom + le numéro resident
    les modifications se sont faites sur les 13 tableaux


    selon moi, le problème vient de l'agencement de tes 13 feuilles
    concernant leur positionnement, le principe est simple :

    dans la liste des onglets sur Excel, il faut :

    - en première position : janvier
    - seconde position : février
    - etc... jusque décembre
    - en treizième position : cloture

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Oui la position c'est ok c'est juste le seul changement est qu'au lieu de commencer à la 10ème ça commence à la 9ème ligne mes tableaux dans l'application. Mais c'est vrais que sur ce fichier ça marche à merveille.

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    la ligne où commence le tableau importe peu
    les macros que je t'ai proposé utilisent la zone où sont situées les données dans le tableau, ce qui écarte toute considération de positionnement du tableau au sein de la feuille

    j'ai poussé le vice lors de mes tests : j'ai changé l'emplacement de certains tableaux (et pas d'autres)
    par exemple, celui de janvier commence en ligne 4, février en ligne 9, clôture en ligne 15 .... tout continue de se remplir correctement

    j'ai (enfin) réussi à reproduire ton problème comme ça :

    - j'ai inséré une feuille bidon (feuille créée manuellement, ou la feuille "modèle) entre la feuille janvier et la feuille clôture

    ce qui me laisse à penser que le problème provient bien de là
    mais si tu me confirme que tes 13 feuilles sont à la suite et situées en première position dans excel ... je ne sais plus quoi penser

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Le macro que vous avez fait est vraiment super. Le problème se trouve au niveau de l'appli Excel où j'essaye de l'implémenter. Surtout peut être au niveau des feuilles et il sont bien disposées pourtant (13 premières feuilles du classeur dans l'ordre) sauf que comme je vous ai montré dans le capture d'écrans par exemple "cloture" occupe la feuille11 au lieu de feuille 13.
    Ce qui est aussi étonnent c'est que quand j’appelle le macro qui ne marche pas dans l'appli excel du bureau sur le classeur que j'ai mis comme exemple sur le forum ça marche très bien.

  13. #13
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    De mémoire, j'avais aussi fait des tests en changeant les codename (les noms uniquement visibles dans l'éditeur de code) pour vérifier que c'était indépendant
    et je n'avais pas eu de souci


    je ferai à nouveau le test ce soir par acquis de conscience

    bon, après, on a une solution radicale pour être sûr de n'avoir aucun souci avec tes feuilles :

    on fait un Array contenant le nom des 13 feuilles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ListeFeuille()
     
    ListeFeuille = Array("janvier","février",.........,"clôture")
    et on utilise ce tableau pour parcourir tes feuilles ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = LBound(listefeuille) To UBound(listefeuille)
        Worksheets(listefeuille(i)).ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 3).Value = .TextBox_NOM.Value
        Worksheets(listefeuille(i)).ListObjects(1).Range(.ComboBox_ID.ListIndex + 2, 4).Value = .TextBox_PRENOM.Value
    Next i

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Voila enfin je mets en pj l'outil qu'on utilise au travail avec le macro que j'ai adapté.
    Et vous allez voir l'erreur qu'il me renvoi.
    Je pense que cette fois ci ça va aller mieux.
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Ah ben oui ça ne peut pas marcher

    dans ton fichier exemple, tu utilises des Tableaux Excel (ListObject en VBA)
    c'est grâce à ces tableaux que j'ai pu te proposer une solution ultra simple ... ces tableaux disposant d'outils pour analyser leur différentes zones

    dans ton fichier "réel", il n'y a plus aucun tableau, ce sont uniquement des lignes présentées comme un "simple tableau"


    penses-tu pouvoir mettre en place des tableaux Excel sur tes 13 feuilles ?
    pour les mettre en place c'est très simple, regarde ici comme ça fonctionne : http://silkyroad.developpez.com/excel/tableau/

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Très sincèrement merci.
    J'aurai pu mettre ce fichier depuis mais il comportait bcp de macros, de boutons, ... et il fallait enlever les données clients. Mais bon c'est fait et ça marche très bien quand j'ai transformé les tableaux en tableaux excel.
    Enfin.
    Merci bien.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    J'ai un petit souci et je viens de comprendre la cause,
    J'ai essayé d'implémenter la solution sur appli qui tourne sous office 2010 et pas moyen que ça marche.
    Peut contourner le problème ou faut réécrire le macro ??
    Merci d'avance.

  18. #18
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    qu'appelles-tu "appli qui tourne sur office 2010" ?

    le code que je t'ai proposé a été rédigé et testé sous Excel 2010 justement

    et qu'est ce "qui ne marche pas" ? Résultat inattendu (à expliquer), bug VBA (ligne qui plante et message d'erreur)

    la structure de ton fichier est bien conforme à tout ce qu'on a vu ? (1 listobject par onglet, les 13 onglets au début du classeur, sans aucun autre onglet entre eux)
    une copie de ton code serait grandement utile

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    il ne marche pas sur office 2003. Il renvoie Erreur 438 « l'objet ne gère pas cette propriété ou méthode ».
    Je pense que la version 2003 ne reconnait pas les objet tableau incorporés à partir de la version 2010.
    Les onglets sont conformes rien n'a changé.

  20. #20
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Oui les listobjects ont été implémentés à partir de la version 2007
    ce ne sera pas compatible pour des versions antérieures

Discussions similaires

  1. Update Automatique-script Sql
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/06/2007, 17h17
  2. [VBA-E] - Selection automatique Cellules apres des tris
    Par michel2662 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/04/2007, 10h21
  3. un update automatique
    Par nutix2003 dans le forum Général Java
    Réponses: 9
    Dernier message: 25/01/2007, 12h29
  4. [AJAX] Update automatique de champs tableau
    Par cic_flo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/10/2006, 16h59

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