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 :

Macro d'incrément de date [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut Macro d'incrément de date
    Bonjour à tous,

    Je souhaite incrémenter la date contenue dans une cellule d'une valeur contenue dans une autre cellule et écrire ce résultat dans une troisième cellule.
    un petit exemple:


    je voudrais donc afficher dans la colonne B le résultat de mai 2008 + 5ans = mai 2013

    Mais le classeur Excel contenant 500 lignes environ, j'aimerais pouvoir définir les cellules avec quelque chose comme: "la cellule à droite de celle active"

    De plus, il faudrait que cette macro ne soit active que sur ces 3 colonnes (et pas sur les 20 autres que j'utilise dans le classeur) si c'est possible, je ne vois pas trop comment définir ceci. Je pense activer la macro en utilisant un raccouci du style ctrl + alt + une touche

    Voici le code que j'ai écrit pour le moment:

    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
    Sub Incrementdate()
    '
    ' Incrementdate Macro
    ' Macro enregistrée le 23/12/2010 par delavs20
    '
    ' Touche de raccourci du clavier: Ctrl+d
    '
     
    Columns("N:N, O:O, P:P").NumberFormat = "yy-mmm"
     
    somme = Val(DatePart("yy", ActiveCell)) +
    '
    'la valeur contenue dans la cellule de la colonne C dans l'exemple'
     
    'cellule de la colonne B de l'exemple = somme
     
     
    End Sub
    Merci d'avance pour votre aide
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    On peut aussi faire cela avec une formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(ANNEE(A2)+C2;MOIS(A2);JOUR(A2))

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Bonjour,

    Oui tout à fait, le fonctionnement est ce que je recherche, mais il nécessite d'entrer cette formule dans chaque cellule. Pour le moment j'en ai qu'une dizaine, mais à l'avenir il pourrait y en avoir beaucoup plus, ce serait moins fastidieux avec une macro.

    Est-t'il possible de définir "la cellule à droite de celle activée"?
    il me serait alors possible via une macro d'écrire cette formule dans la cellule activée en prenant comme valeur de départ les valeurs contenues dans les cellules situées à droite et à gauche de celle activée, ou je me trompe?

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Est-t'il possible de définir "la cellule à droite de celle activée"?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 1).Value
    Cela dit, tu pourrais tout simplement copier la formule se trouvant sur la ligne du dessus et ainsi de suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.Offset(-1, 0).Copy
    ActiveCell.PasteSpecial xlPasteFormulas

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Cette solution marche assez bien, mais toutes mes lignes ne sont pas toujours remplies. Si la précédente est vide, la macro ne recopie rien.

    Je pensais utiliser une boucle If ... else comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If ActiveCell.Offset(-1, 0) <> "" Then
    ActiveCell.Offset(-1, 0).Copy
    ActiveCell.PasteSpecial xlPasteFormulas
    Else
    ActiveCell.Offset(-X, 0).Copy
    ActiveCell.PasteSpecial xlPasteFormulas
    End If
    mais je ne vois pas comment définir ce -X :/

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    s'il y a des lignes vide, une solution consiste a prendre la formule qui se trouve sur la première ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cells(1, ActiveCell.Column).Copy
    ActiveCell.PasteSpecial xlPasteFormulas

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Merci beaucoup pour ton aide, la macro fonctionne pile poil comme je le souhaite.

    voici le code pour les personnes qui en aurait besoin:

    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
     
    Sub IncrementDate()
    '
    ' IncrementDate Macro
    ' Touche de raccourci du clavier: Ctrl+d
    '
    If ActiveCell.Offset(-1, 0) <> "*" Then
    Cells(11, ActiveCell.Column).Copy
    ActiveCell.PasteSpecial xlPasteFormulas
    Else
    Cells(11, ActiveCell.Column).Copy
    ActiveCell.PasteSpecial xlPasteFormulas
    End If
     
    End Sub
    @++

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Bon, mon patron à décider de changer le cahier des charges de la base de donnée sur laquelle je travaille et la macro précédente ne convient plus.

    J'ai désormais un nouvel onglet où j'y "entrepose" certains paramètres et plus particulièrement la colonne C de mon exemple de départ. Dans cet onglet, j'ai remplacé les valeur que j'avais écrit directement dans une cellule par un bouton pour que lorsqu'on clique dessus le calcul s'effectue. Il y aura un bouton par valeur, il me suffira de changer la valeur à l'intérieur de la formule pour chaque bouton.



    Voici donc le code que j'ai; il marche nickel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TypeAA_Click()
    Workbooks.Open "C:\Documents and Settings\delavs20\Desktop\recensement\IncrementDate.txt"
    Selection.Copy
     
    Workbooks("Listing.xls").Activate
    Worksheets("Usinage").Activate
    ActiveCell.PasteSpecial xlPasteFormulas
    Workbooks("IncrementDate.txt").Close
    End Sub
    (Je sais pas pouquoi ca me met les références aux fichiers en rouge, ca y est pas sur Visual Basic)
    Ce qui ne vas pas c'est que la formule contenue dans le fichier texte qui est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(ANNEE(ActiveCell.offset(0,-1))+3;MOIS(ActiveCell.offset(0,-1));JOUR(ActiveCell.offset(0,-1)))
    ne parche évidement pas. Excel demande des nombres dans ANNEE() MOIS() etc etc, pas du VB ^^

    J'ai beau me torturer les méninges, je ne vois pas comment faire pour qu'un appui sur le bouton fasse le calcul avec comme précédement la valeur située à côté de la case sélectionnée.

    A moins que je ne parte pas du tout dans la bonne direction...
    Images attachées Images attachées  

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Essaie plutot comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ActiveCell.FormulaLocal= "=DATE(ANNEE(" & ActiveCell.offset(0,-1).value & ")+3;MOIS(" & ActiveCell.offset(0,-1).value & "));JOUR(" & ActiveCell.offset(0,-1).value & ")))
    A tester car j'ai tapé directement

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Salut,

    Il me copie la formule dans la cellule selectionnée, et ca reste tel quel, comme si ce n'était pas une fonction.

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Peux tu envoyer un fichier test

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Voici un zip avec la feuille .xls et le fichier texte.
    Inutile de vous faire penser à changer l'adresse du fichier texte dans la macro
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Je ne comprend pas bien l'utilité de mettre les formules dans un fichier texte

    Si tu veux utiliser un nombre d'année variable, tu peux faire une procedure qui attendra comme argument le nombre d'année

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub AjoutAnnee(nbAnnee As Integer)
     
    Worksheets("Usinage").Activate
    ActiveCell.Value = DateAdd("yyyy", nbAnnee, ActiveCell.Offset(0, -1).Value)
     
    End Sub
    qui sera appelé par le bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub TypeAA_Click()
    AjoutAnnee 3
    End Sub

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Par défaut
    Génial, merci beaucoup. Je partais pas dans la bonne direction.

    A une prochaine

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

Discussions similaires

  1. incrémenter une date par une période de temps
    Par bilouk dans le forum VBA Access
    Réponses: 22
    Dernier message: 16/06/2023, 10h43
  2. Comment incrémenter une date d'un an ?
    Par imedg dans le forum SQL
    Réponses: 13
    Dernier message: 22/01/2021, 17h12
  3. Comment incrémenter une date
    Par hamadi_insat dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2006, 22h53
  4. [SQL-Server] Incrémentation de date
    Par mathieu77186 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/07/2006, 15h36
  5. Incrémentation de dates
    Par emie31 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2006, 10h36

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