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 :

problème de code sur dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut problème de code sur dates
    Bonjour,

    Je suis novice en VBA sur Excel
    Je souhaite faire une fonction qui génère la date automatiquement (dans la cellule A4 pour la première)dès qu'une certaine cellule n'est pas vide (en l'occurrence la B4 et en incrémentant cette dernière , B5, B6 ... pour que la date soit dans A5, A6, ...)
    Mon code semble bon, aucune erreur n'y est détectée, je fais exécuter mais il ne se passe rien, merci de m'aider à comprendre ce que je fais mal; Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub automatiser_date()
    Dim nb As Integer ' nb = le nombre de lignes max
    Dim c As Integer ' c = le n° de la ligne
        For c = 4 To nb ' pour faire les cellules de la 4 au max
            If Cells(c, 2).Value <> "" Then ' cells(n°cellule, n°colonne) différent de vide
                If Cells(c, 1).Value = "" Then ' et si la cellule de date n'est pas vide
                Cells(c, 1).Value = Date ' y mettre la date
                End If ' sinon il ne se passe rien, cela évite que la date ne s'ecrase chaque jour
            End If
        Next
    End Sub

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    dans le code, evenement "change" de ta feuille, copie cette procédure :
    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)
    Dim nb As Integer ' nb = le nombre de lignes max
    Dim c As Integer ' c = le n° de la ligne
    If Target.Column = 2 And Target.Row > 3 Then
       With ActiveSheet
          nb = .Range("B" & .Rows.Count).End(xlUp).Row
          For c = 4 To nb ' pour faire les cellules de la 4 au max
             If .Cells(c, 2).Value <> "" And .Cells(c, 1).Value = "" Then ' cells(n°cellule, n°colonne) différent de vide
                .Cells(c, 1).Value = Date
             End If
          Next c
       End With
    End If
    End Sub
    PS : j'ai ajouté certains "."
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 124
    Par défaut
    Bonjour,

    Une petite simplification pour le numéro de la dernière ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb = Range("b4").End(xlDown).Row

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Pour aereno,
    Pas d'accord avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nb = Range("b4").End(xlDown).Row
    si une cellule est vide nb sera egal à la cellule anterieure, exemple B4, B5 sont remplies B6 est vide B7 est remplie donc avec ton code nb = 5

    Bien qu'il s'agisse d(incrémentation, je préfère ma solution, que va faire l'utilisateur par la suite ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    casefayere : qu'entends tu par "evenement "change" de ta feuille", sur excel j'ai cliquer sur visualiser le code, ça m'a ouvert visual basic j'ai fait insertion d'une procédure private en sub du nom de automatiser_date ....

    Par ailleurs afin que je puisse comprendre et pouvoir ensuite m'en servir et m'améliorer, peux tu m'expliquer ton code ... pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    merci beaucoup de ton aide

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    re,
    ma procédure se place dans le code de la feuille concernée, c'est à dire, dans l'éditeur VBA, cliques 2 fois sur la feuille (à gauche) et sytematiquement, 'éditeur va te proposer un évènement "selection_change", ignore-le et colles mon code qui agira dès que tu modifiera une cellule de B4 à b..., le code découpé :
    ci-dessous, l'évènement expliqué ci-dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim nb As Integer ' nb = le nombre de lignes max
    là ce n'est qu'une déclaration, plus bas je mets la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim c As Integer ' c = le n° de la ligne
    ci-dessous, le code n'agira que si la cellule est en B et minimum 4eme ligne, target remplace la ligne active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column = 2 And Target.Row > 3 Then
    evite de répeter activesheet, mais dans ton cas => facultatif mais il faut enlever les "." avant "range" ou "cells"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb = .Range("B" & .Rows.Count).End(xlUp).Row
    nb = dernière cellule renseignée, la formule part du bas et remonte juqu'à trouver une cellule renseignée
    le reste tu l'as compris ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For c = 4 To nb ' pour faire les cellules de la 4 au max
             If .Cells(c, 2).Value <> "" And .Cells(c, 1).Value = "" Then ' cells(n°cellule, n°colonne) différent de vide
                .Cells(c, 1).Value = Date
             End If
          Next c
       End With
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre averti
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Par défaut
    merci casefayere
    une derniere question, lorsque je suis sur VBA je double click sur la feuillle concernée par le code je mets mon code dans la fenêtre qui s'ouvre néanmoins lorsque que je ferme mon dossier, que je l'enregistre meme en mode prenant en compte les maccros, à la réouverture plus rien ne fonctionne je ne comprend pas pourquoi, j'active les maccros mais ma fonction ne fait pas partie de la liste des maccros
    Peux tu m'expliquer le fonctionnement des pages de code avec excel pour que cela fonctionne direct à chaque ouverture du dossier?

    Merci

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour le forum, aurogrady

    ...à la réouverture plus rien ne fonctionne je ne comprend pas pourquoi...
    moi c'est cette phrase que j'aimerais comprendre, qu'est qui ne fonctioone pas ?, peux-tu envoyer ton fichier ?

    ...ma fonction ne fait pas partie de la liste des macros...
    de quelle liste parles-tu ?

    Dans l'éditeur VBA, tu retrouves tes macros, si tu as bien copié la macro comme je l'ai dit, dans l'éditeur, tu la retrouveras en double-cliquant sur la feuille concernée.

    Bonne journée, (j'attends ta réponse)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. [BOXI] Problème de filtre sur date
    Par Julien59 dans le forum Deski
    Réponses: 6
    Dernier message: 10/06/2008, 10h25
  2. problème de requête sur date de naissance
    Par EdithB dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/11/2007, 21h56
  3. Problème de précision sur date de création des fichiers
    Par Bruno Orsier dans le forum Delphi
    Réponses: 2
    Dernier message: 07/06/2007, 14h26
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Problème de lien sur date entre Access et MySQL-4.1
    Par michou42 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/04/2005, 23h31

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