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 date de dernière mise à jour + ajustement automatique des cellules [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Par défaut Automatiser date de dernière mise à jour + ajustement automatique des cellules
    Bonjour à tous,

    Je cherche à faire des options avancées pour une base de données excel. Certaines peuvent impliquer l'usage de macro (que je ne maîtrise pas du tout mais suis prêt à essayer). J'ai cherché sur google avant, ce qui m'a permis de résoudre un grand nombre de questions. Voici celles qui subsistent néanmoins. Peut-être sauriez-vous y répondre, si c'est le cas, je vous en serais extrêmement reconnaissant.


    1 -
    Dans mon tableau excel, chaque ligne représente une personne, et chaque colonne est une information sur la personne. Dans chaque ligne, il y a une cellule "date de la dernière mise à jour". Je cherche un moyen qui mette à jour automatiquement la cellule DATE dès qu'une modification est effectuée sur la même ligne, comme ça je sais de quand date la dernière modification apportée sur une personne. Est-ce que c'est possible ?


    2 -
    J'utilise une fonction (index) qui permet de transférer du contenu de ma feuille A sur une feuille B mise en page selon le numéro de ligne que je sélectionne. Ce qui m'embête c'est que chaque fois que je décide de transféer une ligne spécifique sur la mise en page de la feuille B, il faut ensuite que je sélectionne toutes les cellules de cette feuille B et que je fasse "Ajuster la hauteur de ligne", car cela ne se fait pas automatiquement. Je voudrais trouver un moyen pour que les cellules de la feuille B détectent quand elles sont modifiées et qu'elles s'ajustement automatiquement à leur nouveau contenu.


    J'ai plusieurs autres questions mais voici mes deux plus importantes pour l'instant.

    Je vous remercie infiniment pour votre aide. Bonne journée !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    l'utilisation d'Access eut-ete ici tellement plus efficace =]

    1- Concernant la mise a jour automatique, tu peux regarder les evenement Worksheet_Change() + Target + Intersect()
    2- En VBA, ca se fait simplement, est-ce une option possible pour toi ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Pour ton premier point, code VBA :
    10 est pour la colonne de date de dernière mise à jour
    => à remplacer (les deux 10) par le vrai numéro de colonne

    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 Target.Column <> 10 Then
             Cells(Target.Row, 10).Value = Date
         End If
     
    End Sub


    Pour le point 2, j'ai du mal à voir comment tu transfères d'un onglet à l'autre.
    Si c'est aussi par VBA, ajoute à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("4:4").EntireRow.AutoFit
    avec 4 : le numéro de la ligne modifiée.

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour
    Pour le point 2, je pense que tu peux facilement trouver quelque chose en utilisant l'enregistreur de macro.

  5. #5
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Par défaut
    Bonjour,

    Merci à tous.

    Pour le point 1, j'ai utilisé le code VBA de Bob et ça marche parfaitement. Jean-Philippe André je n'ai pas compris à quoi tu faisais référence désolé

    Pour le point 2, j'ai essayé le code de Bob mais ça ne marche pas étrangement, je dois mal m'y prendre. J'ai copié ce code dans ma feuille B et j'ai fait le test pour la ligne 37, donc j'ai remplacé les deux "4" du code par deux "37". En fait j'ai besoin de ce code pour les lignes 17 à 63, donc j'ai aussi essayé hasardeusement d'écrire 17:63 dans la formule. Dans les deux cas ça n'a pas marché. Je pense que ça ne marche pas car les cellule

    Je n'ai pas essayé l'enregistrement de macro mais je ne suis pas sûr que cela marche dans mon cas. Peut-être qu'une meilleure explication de mon processus pourra débloquer le problème.

    En fait j'ai un tableau sur la feuille A avec une ligne par personne. J'utilise une fonction qui permet de cibler une des lignes du tableau et la retranscrire en-dessus du tableau. Pour cibler la ligne, j'ai déterminé une cellule spéciale (une cellule de commande si on peut appeler ça comme ça) dans laquelle j'ai juste à écrire le numéro de la ligne. Dans cette case, je vais par exemple écrire "25" et ça va automatiquement retranscrire toute la ligne 25 sur une ligne Y en-dessus du tableau. Puis, j'utilise une simple fonction "=" pour reporter les valeurs de cette ligne Y sur une feuille B. Cette feuille B est mise en page et j'ai fait en sorte que chaque cellule de la ligne Y tombe sur un compartiment spécial mis en page.

    Ainsi, la feuille B change de contenu chaque fois que j'écris un numéro de ligne différent dans ma cellule de commande. Je pense que c'est à cause du fait que j'utilise une fonction de "=" pour ramener des informations d'une autre feuille que la feuille B ne détecte pas de changement de contenu et donc ne se réajuste pas.

    Merci beaucoup pour votre aide !

  6. #6
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    Bon, j'ai compris pour ton point 2. Essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    if Target.Row = 1 and target.Column = 1 then
         Sheets("FeuilleB").Rows("17:63").EntireRow.AutoFit
    end if
    End Sub
    Ce code est à mettre dans la FeuilleA
    Target.Row = 1 and target.Column = 1 => position de ta cellule spéciale (celle où tu mets 25 dans ton exemple).


    Oups, alors les deux points ensemble, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Target.Row = 1 And Target.Column = 1 Then    ' si tu modifies ta cellule spéciale alors
         Sheets("FeuilleB").Rows("17:63").EntireRow.AutoFit   ' ajustement automatique des lignes de 17 à 63 de la feuille B
    ElseIf Target.Column <> 10 Then                                ' sinon si tu modifies une cellule n'appartenant pas à la colonne 10 alors
         Cells(Target.Row, 10).Value = Date                        ' on met la date du jour dans la colonne 10 de la ligne modifiée
    End If

  7. #7
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Par défaut
    Super, ça a marché !!!! Merci infiniment. Juste un petit détail, en fait ma cellule spéciale est sur une feuille C. Comment est-ce que je peux intégrer cette information au code VBA ?

    Aussi deuxième petit problème, celui-ci je ne sais pas s'il peut être résolu. C'est un problème que j'avais aussi quand je faisais l'ajustement automatique à la main. En fait, toutes mes cellules de la feuille B sont en réglage "renvoyer à la ligne automatiquement". Et la taille de la colonne est fixe. Parfois, l'ajustement de la taille de la ligne crée un retour à la ligne indésirable, alors même qu'il n'y a pas de retour à la ligne inscrite dans la cellule. Cela disparaît si j'élargis ou rétrécit la taille de la colonne, mais dans l'idéal je souhaiterais que la taille de la colonne reste fixe. D'où vient ce retour à la ligne ? Y a t-il un moyen d'éviter qu'il survienne ?

    Merci encore !

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

Discussions similaires

  1. [Joomla!] Date de dernière mise à jour du site
    Par LLD35235 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 28/12/2014, 22h21
  2. [JavaScript]fonction date de dernière mise à jour
    Par rgdu86 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/03/2008, 08h48
  3. [MySQL] Récupérer date de dernière mise à jour + envoie mail
    Par gueud dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/03/2008, 16h25
  4. date de dernière mise à jour d'un site
    Par laurentSc dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 03/09/2007, 14h02
  5. Réponses: 14
    Dernier message: 04/01/2007, 22h35

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