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 :

Ajout automatique de ligne sur calendrier


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Ajout automatique de ligne sur calendrier
    Bonjour, je créé un tableau qui représente les jours du mois pour y rentrer le programme du jour.

    Au départ, j'avais laissé par défaut 7 lignes par jour, or il y a des jours ou l'on ne fait rien et d'autre ou l'on fait beaucoup de choses, plus que les 7 lignes prévus. Donc je me suis dit que j'allais mettre 2 lignes pour chaque jour et récupérer une macro (je précise je suis novice) qui permet de rajouter une ligne en dessous lorsque la dernière ligne (des 2 de base) est renseignée.

    J'ai trouvé la macro ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("Esp")) Is Nothing Then
        ''AjoutLigneMacro onglet Espèces
            Dim Lg%
            Lg = Range("Esp").Row
     
                Application.EnableEvents = False
                Rows(Lg).Copy
                Rows(Lg).Insert
                Range("Esp").ClearContents
                Application.CutCopyMode = False
                Application.EnableEvents = True
        End If
    End Sub
    J'ai nommé Esp la dernière ligne du jour 1.
    Ce code marche très bien et me rajoute bien une nouvelle ligne en dessous de la dernière lorsque cette dernière commence à être remplie.

    Le problème c'est que ça ne fonctionne pas sur plusieurs jours. J'ai tous les jours de l'année sur un onglet et du coup quand je met ce code dans l'espace macro, ça ne fonctionne qu'une seule fois (pour le jour 1). Mais ca ne fonctionne pas pour les jours suivants, lorsque j'écris qqch dans la dernière ligne du jour 2 (et ainsi de suite pour toutes les dernières lignes des autres jours).

    J'espère avoir été suffisamment clair
    Moi ce que j'aimerais c'est qu'une ligne se rajoute automatiquement lorsque la dernière ligne de chaque jour (qui comporte 2 lignes) est renseigné.

    Désolé pour ce roman, j'ai essayé d'expliquer au mieux, j'espère que quelqu'un pourra m'aider, car j'ai beau chercher et chercher et je n'y arrive pas.

    Je vais joindre dans un prochain message un fichier joint pour que ce soit un peu plus clair.

    Merci d'avance
    Au fait ce site est super

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Afin de partir tout de suite sur une solution adaptée, peux tu nous mettre a dispo un fichier (léger) avec le format de la feuille qui contient les jours

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut suite - Envoi du fichier et qqs explications
    Pas de problèmes, voila en PJ le fichier joint.

    Les 5 premiers jours de janvier je les ait mis avec 2 lignes par jour. le jour 1 (1er janvier) comporte 3 lignes car ayant rempli la 2e ligne une 3e ligne s'est rajouté automatiquement.

    Après je n'ai pas encore vérifié mais j'espère que les propriétés et formules contenus dans les lignes sont toujours présentes dans les nouvelles lignes automatiques.

    les autres jours (à partir du 6 janvier sur le fichier) comporte 10 lignes, du coup si on ne remplit rien certains jours ça fait beaucoup de lignes pour rien, à l'impression pareil.

    Donc là si je ramène chaque jour à 2 lignes uniquement, je veux qu'une nouvelle ligne se rajoute automatiquement mais à chaque jour, car là ça fonctionne que pour le 1er janvier (où j'ai nommé "Esp" la ligne 9 c'est-à-dire la dernière ligne de ce 1er jour)

    J'ai pensé à renommé toute les dernières lignes de chaque jour "Esp" mais ca ne marche pas ca me ramène à la 1re ligne qui porte ce nom. Du coup j'ai renommé "Esp1" pour jour 1, "Esp2" jour 2 ... mais là ca me renvoit à la colonne ESP ligne 2 ... Enfin bref, pas mal de tentative infructueuses. et même si ça fonctionnait ce serait lourd de renommé toutes les dernières ligne de chaque jour de l'année.

    PS : j'ai envoyé le fichier enregistré en xlsx car avec macro en xlsm ne passe pas.

  4. #4
    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 926
    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 926
    Points : 28 919
    Points
    28 919
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi n'écris-tu pas tout simplement les tâches les unes en dessous des autres toutes journées confondues.
    Ensuite il suffit de trier la feuille par la colonne où se trouve les dates.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    en fait j'ai essayé, j'ai copier le code et l'ai rajouter à la suite mais ça ne fonctionne pas, ça me met qu'il y a une erreur dans le code et ça surligne le début.

    Et puis en fait, copier le code et le mettre à la suite, il faudrait donner un nom différent à la dernière ligne de chaque jour, et 365 jours ça serait un peu fastidieux. Car déjà je ne peux pas nommer toutes les dernières lignes de chaque jour pareil, ça me renvoie vers la 1re ligne qui porte déjà ce nom.

    c'est vrai que si je pouvais donner le même nom à toutes les dernières lignes de chaque jour et avoir un code unique ça serait bien. Car là le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Application.Intersect(Target, Range("Esp")) Is Nothing Then
        ''AjoutLigneMacro onglet Espèces
            Dim Lg%
            Lg = Range("Esp").Row
     
                Application.EnableEvents = False
                Rows(Lg).Copy
                Rows(Lg).Insert
                Range("Esp").ClearContents
                Application.CutCopyMode = False
                Application.EnableEvents = True
        End If
    End Sub
    ne fonctionne que pour la ligne nommée "Esp", et je ne peux appeler qu'une seule ligne avec ce nom.

    et puis je ne veux pas que les colonnes ou lignes soient triées, je voudrais que tout reste comme ça et que l'on défile suivant l'ordre chronologique des jours.

    Il semblerait que le fichier en PJ n'est pas apparu dans mon 2e message. je le renvoie en extension xlsx

    TEST envoi.xlsx

  6. #6
    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 926
    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 926
    Points : 28 919
    Points
    28 919
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par Cerinos Voir le message
    et puis je ne veux pas que les colonnes ou lignes soient triées, je voudrais que tout reste comme ça et que l'on défile suivant l'ordre chronologique des jours.
    A moins de ne rien avoir compris à ton problème, je ne vois pas très bien où est la différence entre insérer des lignes afin de garder les actions d'une façon chronologique et les entrer sans tenir compte de cet ordre et d'effectuer le tri ensuite.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je ne comprends pas ta remarque, je me demande pourquoi trier en fait.
    car tout ce que je veux c'est que des lignes ce rajoutent automatiquement dès que la dernière est renseignée. J'ai réussi mais uniquement pour une seule ligne de tout l'onglet.

    Dans le code que j'ai créé, j'ai dit : la ligne nommée "Esp" (donc la dernière ligne du 1er janvier) si elle commence à être remplie alors rajouter une nouvelle ligne en dessous. Etant donné que je ne peux donner le nom "Esp" qu'à une seule ligne de tout l'onglet je n'arrive pas à appliquer ce code à toutes les dernières lignes de chaque jour.

    J'ai joint le fichier, peut être que ce sera plus clair en pratique, là j'essaie de faire au mieux.

    PS : je repense à ce que tu me disait :
    Pourquoi n'écris-tu pas tout simplement les tâches les unes en dessous des autres toutes journées confondues.
    Ensuite il suffit de trier la feuille par la colonne où se trouve les dates.
    je pense avoir compris ou tu voulais en venir. En fait le fichier je l'ai déjà créé comme ça avec déjà un espace prévu pour chaque jour. C'est vrai que je pourrais écrire les taches à la suite et peut-être précisé la date après ... j'y réfléchis.

  8. #8
    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 926
    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 926
    Points : 28 919
    Points
    28 919
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La bonne pratique d'utilisation d'excel est d'organiser ses feuilles de données comme des tables dans Access et utiliser d'autres feuilles comme des formulaires afin de visualiser les données se trouvant sur plusieurs feuilles.
    Ainsi dans ton cas, l'idéal serait d'utiliser la première ligne avec les étiquettes de colonnes Date, Code, Tiers, Libellé, Montant etc... ensuite à partir de la deuxième ligne les données concernées.
    Tu pourrais ensuite créer une feuille avec les tiers Nom, Adresse etc.. et ainsi de suite.
    Une feuille de consultation pourrait te permettre d'obtenir le total par poste des tiers et ce à l'aide de la formule SOMMEPROD dans un tableau que tu pourrais rendre dynamique en utilisant le mois de référence grâce à la formule DATE où l'argument année et mois serait l'année et le mois de la date du jour et ensuite obtenir les mois qui précèdent toujours à l'aide de la formule DATE en faisant référence à la cellule de gauche.

    Synopsis
    Pour notre exemple, prenons une feuille nommée MVT qui contient les mouvements d'argent (Salaire, Télécom, Gaz électricité etc).
    Toutes les colonnes de la feuille MVT sont nommées avec le préfixe dbMvt_ suivi du nom de la colonne. Ainsi la colonne Date est nommée dbMvt_Date
    La feuille de consultation contient en colonne A le nom des tiers, la B le libellé (Proprio, Electricité etc...) en C la somme totale par tiers en D le mois en cours (Date calculée dynamiquement par la formule DATE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(ANNEE(_workDay);MOIS(_workDay);1)
    _workDay est une formule nommée qui correspond à la date du jour mais qui me permet lors de mes tests de simuler une autre date du jour donc _workDay peut-être remplacé par la fonction AUJOURDHUI().
    Ensuite les colonnes E à K les mois qui précèdent et ce calculé toujours à l'aide de la formule DATE (cf formule de la cellule E1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(ANNEE(D1);MOIS(D1)-1;1)
    Les dates de la ligne 1 peuvent être formatée avantageusement à l'aide du format personnalisé avec cette syntaxe mmm aa
    Ensuite de la cellule D1 à Kx (x représentant le nombre de lignes) la formule SOMMEPROD qui reprend par tiers (ligne correspondante) et par mois correspondant à la colonne les montants des dépenses ou recettes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((ANNEE(D$1)=ANNEE(dbMvt_Date))*(MOIS(D$1)=MOIS(dbMvt_Date))*($A2=dbMvt_Tiers)*dbMvt_Montant)
    Ensuite tu pourrais créer une feuille pour consulter par tiers les mouvements par années, mois etc... que tu pourrais activer par l'outil Validation de données - Liste ou un contrôle ActiveX ComboBox ou ListBox
    L'organisation de la feuille MVT permet bien entendu de profiter de l'extraordinaire outil qu'est le Tableau croisé dynamique.

    Attention pas de cellules fusionnées dans les feuilles de données cela perturbe les tris, filtres et le tableau croisé dynamique.

    En conclusion, l'utilisation du VBA n'est absolument pas nécessaire pour ce type d'application et je suis convaincu que l'apprentissage des formules et outils natifs d'excel est bien plus profitable au début que d'apprendre le VBA qui peut toujours venir par la suite mais alors avec une très bonne connaissance d'Excel ce qui est un atout majeur et pour moi indispensable pour utiliser le VBA pour excel.
    Bonne chance pour ce projet.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Modif. fichier >> Pb : ajout ligne / calcul Solde
    Merci Philippe Tulliez pour ta réponse. Je réponds un peu tardivement..

    Concernant mon projet, je comprends que le VBA n'est pas forcément utile dans toutes les situations, mais n'ayant pas beaucoup de temps, j'applique le premier moyen que je trouve et qui fonctionne dans mon cas, même si ça peut dévier des méthodes classiques.

    Là j'ai modifié mon fichier, grâce à vos réponses.
    Désormais : au début, en 1re ligne, j'ai toujours les colonnes classiques : date opération, code, libellé, solde ....

    et je rentre au début des lignes suivantes les dates souhaitées pour lesquelles des informations sont à apportées. J'ai une liste déroulante pour choisir la date et le mois. Le jour lui se calcule automatiquement suivant la date complète entrée.

    DATES Libellé Mode Débit Crédit Solde ....
    -100
    mer 7 Janvier X1 12 -112
    jeu 8 Janvier X2 100 - 12

    ...

    J'ai utilisé en VBA le code afin de rajouter automatiquement une ligne à la fin de mon tableau. Jusqu'à présent tout fonctionne bien, vu la nouvelle disposition de mon fichier je n'ai plus besoin de demander un ajout automatiquement de ligne en VBA chaque dernière ligne de chaque jour (ce qui était mon problème initial). Maintenant il n'y a qu'un code qui fonctionne ajoutant une nouvelle dernière ligne lorsque la dernière existante commence à être remplie.

    mon soucis, est avec le solde. Ce dernier se calcule évidemment en prenant le solde 1 - débit 2 + crédit 2 = solde 2 (du jour).
    le problème c'est que en ajoutant automatiquement une nouvelle ligne, excel ne prend plus comme référence le solde de la ligne précédente mais prend le solde 2 lignes plus haut. Du coup ça saute à chaque ajout de nouvelle ligne, le solde est faussé.

    Quelqu'un pourrait m'aider ?
    PS : j'envoie le fichier modifié en format xls (macro désactivé)
    Modif-B.xlsx

  10. #10
    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 926
    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 926
    Points : 28 919
    Points
    28 919
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il serait plus utile dans un premier temps que tu publies le code qui fonctionne et également celui qui pose problème.
    D'après ce que je crois comprendre cela semble très proche d'un mauvais référencement mais je peux me tromper.

  11. #11
    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 926
    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 926
    Points : 28 919
    Points
    28 919
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Alors j'ai consulté ton classeur et j'ai quelques remarques.
    1) Malgré le fait que la structure est maintenant correcte, tu confonds encore liste de données et consultation. Les étiquettes de colonnes doivent être en ligne 1 et pas en 4.
    2) Pourquoi trois colonnes pour introduire une date ?
    Une seule suffit avec la date formatée jjj* jj mmm aaaa (Format personnalisé) ainsi le 2 janvier 2013 sera affiché mer 02 janv 13 (avec cadrage à gauche du jour).
    Cela simplifie grandement le temps d'encodage et si tu effectues ce travail journalièrement, tu peux en plus utiliser le raccourcis clavier Ctrl + ; pour introduire la date du jour.
    3) A propos de l'introduction automatique d'une ligne.
    J'ai utilisé en VBA le code afin de rajouter automatiquement une ligne à la fin de mon tableau. Jusqu'à présent tout fonctionne bien, vu la nouvelle disposition de mon fichier je n'ai plus besoin de demander un ajout automatiquement de ligne en VBA chaque dernière ligne de chaque jour (ce qui était mon problème initial). Maintenant il n'y a qu'un code qui fonctionne ajoutant une nouvelle dernière ligne lorsque la dernière existante commence à être remplie.
    Pas besoin de VBA pour cela, tu transformes ta plage en tableau et c'est automatique.
    4) A propos de calcul du solde
    mon soucis, est avec le solde. Ce dernier se calcule évidemment en prenant le solde 1 - débit 2 + crédit 2 = solde 2 (du jour).
    le problème c'est que en ajoutant automatiquement une nouvelle ligne, excel ne prend plus comme référence le solde de la ligne précédente mais prend le solde 2 lignes plus haut. Du coup ça saute à chaque ajout de nouvelle ligne, le solde est faussé.
    Une simple formule SOMME fait l'affaire mais avec un bon référencement des cellules.
    Imaginons en colonne B les montants (négatif pour les sorties et positif pour les entrées et en colonne C, nous aurons le solde par ligne. Nous placerons donc en cellule C1, la formule suivante qui doit ensuite être recopiée vers le bas.
    5) Pour revenir sur les montants, débit, crédit placés sur deux colonnes.
    A nouveau, ne pas confondre Liste de données et tableau de consultation.
    Prévoir une colonne avec des montants positifs pour les entrées et négatifs pour les sorties.
    C'est dans une deuxième feuille où l'on placera le tableau de consultation que l'on prévoira deux colonnes. Une pour les débits et une pour les crédits.

    Ce que je viens de décrire, est la même chose pour des mouvements de stocks ou toutes autres données.
    Tout cela sans une ligne de programmation.

Discussions similaires

  1. [Débutant] Désactiver l'ajout automatique dernière ligne datagridview
    Par jeremyvb11 dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/01/2013, 12h29
  2. [XL-2007] ajouter automatiquement une ligne à la première ligne
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/11/2011, 00h01
  3. [OL-2007] ajouter un rendez vous sur calendrier en cour
    Par neuneu1 dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 14/07/2011, 15h04
  4. [XL-2002] aide insertion automatique de lignes sur Excel
    Par Bendrien dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/04/2009, 11h49
  5. Réponses: 4
    Dernier message: 02/12/2007, 08h31

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