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 :

Incrémenter un mois au format text [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut Incrémenter un mois au format text
    Bonjour à tous.

    J'aurai besoin de savoir s'il est possible d'incrémenter un mois de l'année écrit en lettre? en gros, je veux passer de janvier puis à février,....
    Je vous met un extrait de mon fichier.
    Il faut que je remplisse l'onglet "Triangulation".
    en cellule c3, j'aurai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i= 2 to 24
         If worksheets ("triangulation").cells(2,2) = worksheets("primes).cells(i,2)
             If worksheets ("triangulation").cells(1,2) = worksheets("primes).cells(i,3)
                 If worksheets ("triangulation").cells(2,2) = worksheets("primes).cells(i,5)
                     If worksheets ("triangulation").cells(1,2) = worksheets("primes).cells(i,6)
                         prime = prime +  worksheets("primes").cells(i,7)
    et en colonne D3, c'est le même principe mais pour le 3ème if, il faudrait que j'arrive à avoir octobre et non septembre. Donc en gros "septembre + 1 mois" et ainsi de suite jusqu'à ma dernière colonne.
    Va aussi se poser le problème du changement d'année quand on va passer de décembre à janvier. Mais je pensais mettre une condition : si mois = janvier alors année = année +1 mais il y a peut être mieux à faire?
    J'aimerai garder les mois en lettres mais si ce n'est pas possible, je les modifierai en chiffre mais je trouve ça moins "convivial".

    Je remercie par avance les personnes qui pourront m'éclairer.
    Je vous souhaite un excellent après-midi.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si ça ne te dérange pas d'avoir le mois en anglais, tu peux utiliser la fonction Format.

    En supposant que le numéro du mois soit dans la variable MoisNum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MoisTxt = Format(DateSerial(2000, MoisNum, 1), "mmmm")
    Si c'est pour mettre dans une cellule, il suffit de mettre n'importe quelle date de ce mois et de passer le format à "mmmm".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").Value = DateSerial(Year(Now()), MoisNum, 1)
    Range("A1").NumberFormat = "mmmm"

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Avec une bonne conception de classeur, tu n'as pas besoin de VBA pour réaliser ce genre de tableau. Un peu d'astuce et des fonctions telles que SOMME.SI.ENS suffisent

    Tu aurais franchement intérêt à travailler avec des dates partout, plutôt que du texte. Tu simplifieras grandement tes formules et, grâce aux formats de cellule, tu pourras avoir la présentation que tu souhaites.

    • En colonne A, modifier le format des cellules et mettre le format personnalisé "AAAA"
    • En A3, saisir la date 1/09/2018
    • En A4:A30, saisir la formule =mois.decaler(a3;1) pour incrémenter d'un mois et valider avec CTRL+ENTER
    • En B3:B30, saisir la formule =a3 et valider avec CTRL+ENTER
    • En B3:B30, mettre au format "MMMM"
    • En C3:AI30, saisir la formule =MOIS.DECALER($B3;COLONNE()-3) et valider avec CTRL+ENTER (juste pour voir tes dates s'incrémenter).


    Voici ce que cela pourrait donner sur le plan visuel:
    Nom : 2020-08-17_175807.png
Affichages : 293
Taille : 21,7 Ko


    La rédaction des formules en C3:AI30 sera plus aisée car tu pourras travailler avec SOMME.SI.ENS par exemple, en bornant tes critères sur les dates de début et de fin de mois pour chaque cellule, et tu n'auras plus à te soucier des passages d'année et autres. De plus, tu te passes complètement de VBA (au moins pour cette partie du travail). Il faudrait que tu en dises plus sur ce que tu souhaites obtenir dans les cellules C4 et suivantes pour que l'on puisse t'aider au mieux.


    Excel étant un tableur plus à l'aise avec les valeurs numériques (les dates sont des nombres) qu'avec du texte, tes formules seront plus simples à rédiger.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut Merci
    Je vais commencer par changer mes formats et je vais voir si j'arrive à mettre les formules voulues dans mes cellules plutôt que de faire du VBA.
    J'étais parti sur du VBA pour que tout soit automatisé mais c'est vrai que des formules sont tout aussi valable.
    Je n'hésiterai pas à revenir si j'ai encore besoin d'aide ou pour clore la discussion si j'ai réussi :-)

  5. #5
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut Encore besoin d'aide
    Bonjour .

    J'ai changé les formats comme conseillé ; ce qui devrait m'aider aussi dans d'autres fichiers.
    Je n'arrive cependant pas à faire ce que j'aimerai.
    J'ai mis une autre version du fichier, avec des données différentes pour une meilleure compréhension de ce que je voudrai faire.
    En cellule C3, il faudrait que j'additionne les primes de la colonne G de ma feuille "Primes" quand le mois et l'année de souscription sont les mêmes qu'en A3 et B3 et le mois et l'année de paiement sont les mêmes qu'en A3 et B3.
    En D3, j'additionne les primes toujours si le mois et l'année de souscription sont les même qu'en A3 et B3 mais cette fois-ci l'année et le mois de paiement doivent être 2018 et octobre (donc septembre 2018 + 1 mois)
    Et donc en D6, par exemple, je dois additionner les primes dont l'année et le mois de souscription sont décembre 2018 et l'année et le mois de paiement janvier 2019.

    J'espère que c'est assez claire :-) Ce n'est pas toujours facile d'expliquer.
    Je remercie d'avance les personnes qui pourront m'aider.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    C'est un SOMME.SI.ENS qui te permettra cela. Note que tes dates ne sont pas bien saisies pour certaines valeurs dans ton tableau de primes. Veille bien à chaque fois saisir des dates, car c'est cela qui permet à Excel de travailler avec ton tableau tel qu'il est conçu.

    La formule est longue mais pas complexe. Elle est longue à cause des intitulés de tes colonnes d'une part et parce que tu as 4 critères pour ta somme (Souscription >= 1er jour du mois en A3 et <= fin du mois de A3, Paiement > fin du mois précédent et <= à la fin du mois actuel). Dans la formule que je te donne, j'ai calculé par rapport à la structure de ton tableau. Tu ne peux donc pas insérer des colonnes sans dommages, mais vu la conception du classeur, ce problème ne devrait pas arriver.

    Pense aussi à mettre la plage des primes en tableau structuré (voir mon tuto). De cette façon, lorsque tu y ajouteras des primes, ta "triangulation" sera recalculée.


    Voici la formule à mettre en C3:AI30 (avec cette formule, tu peux ajouter des lignes ou des colonnes):
    =SOMME.SI.ENS(Tableau1[PRIME HT (en euros)];Tableau1[DATE DE SOUSCRIPTION];">=" &$A3;Tableau1[DATE DE SOUSCRIPTION];"<=" & FIN.MOIS($A3;0);Tableau1[DATE DE PAIEMENT];">" & FIN.MOIS($A3;COLONNE()-4);Tableau1[DATE DE PAIEMENT];"<=" & FIN.MOIS($A3;COLONNE()-3))

    Attention, dans mon précédent message, je disais que tu pouvais saisir la formule en A3:A3 et valider avec CTRL+ENTER, mais tu as validé avec SHIFT+CTRL+ENTER. Ce n'est pas une bonne idée. Soit tu saisis en A3 puis tu recopies vers le bas, soit tu sélectionnes A3:A30, puis tu saisis la formule et tu valides avec CRL+ENTER (SANS le SHIFT)...

    Si tu saisis la formule ci-dessus en C3, tu ne peux la recopier QUE avec le copier-coller ET PAS avec la poignée de recopie (cfr mon tuto sur les tableaux structurés cités plus haut, au point IV-D-4)
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut
    Merci beaucoup de ton aide, même si je n'arrive pas à faire fonctionner la formule sur mon fichier d'origine.

    Par contre, je ne comprend pas pourquoi, mais dans la cellule D3 du fichier que tu as joint, il n'y a pas le bon montant : il devrait y avoir 10.8556.

    Dans mon fichier d'origine, j'ai donc créé un tableau structuré en suivant la méthode de ton tuto et j'ai mis toutes mes dates de l'onglet "primes" au format "date". mais j'obtiens "0" dans toutes mes cellules.

    Même en repartant du fichier que j'avais envoyé, je n'arrive pas aux mêmes résultats que toi (je pense avoir écrit correctement la formule). Peux-tu y jeter un oeil et me dire si quelque chose ne va pas? Je te remercie par avance.
    PS : j'ai modifié les montants de primes pour une meilleure lisibilité / visibilité.
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Les dates en A2, A3, D1, etc (celles avec l'année en 4 chiffres) ne sont pas des dates mais du texte. Tu dois les saisir à nouveau (sélectionne la cellule puis F2 puis Enter).

    Tu as recopié la formule de C3 avec la poignée de recopie et pas avec un copier-coller normal. Or, recopier latéralement une formule utilisant une colonne structurée avec la poignée de recopie implique qu'Excel considère la colonne comme relative, donc, tu "glisses" de colonne en colonne.

    Voici ton fichier corrigé.
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut
    super, j'ai réussi sur ce petit extrait. Maintenant je passe à l'étape suivante mon fichier d'origine.
    Et là, je constate que j'ai le même problème. J'avais sélectionné toute ma colonne de date, fait un clic droit/ format cells/date mais a priori ça ne met pas vraiment la cellule en format date, c'est bien ça?
    Du coup, j'ai vérifié sur quelques lignes de mon fichier d'origine en modifiant la cellule avec F2/entrée et la formule a fonctionné.

    Par contre, existe-t'il un moyen différent pour modifier mes cellules? Parce que mon fichier d'origine comporte presque 175000 et je ne me vois pas faire F2/entrée pour toutes mes lignes.

    Merci d'avance pour ta réponse.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    • Dans une cellule vide, saisis 1
    • Copie cette cellule
    • Sélectionne la plage des dates
    • Effectue un collage spécial multiplication
    • Remets ta plage des dates au format de date souhaité
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Femme Profil pro
    Cadre assurance
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Cadre assurance

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Par défaut un grand merci
    Merci beaucoup de ton aide, tout marche parfaitement bien maintenant :-)
    Je garde cette formule bien en tête parce qu'elle va me servir de nombreuses fois
    Excellente journée

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

Discussions similaires

  1. [AC-2010] Tri par mois (format texte) dans une requête analyse croisée
    Par TartesAuxPommes dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/11/2017, 13h53
  2. [XL-2013] Incrémenter +1 une cellule sous format Text
    Par bilou95650 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/03/2017, 04h25
  3. incrementation d'un format texte dans une zone de texte
    Par frederic.go dans le forum Access
    Réponses: 6
    Dernier message: 18/10/2005, 14h47
  4. [générale] PhP => flash format texte
    Par Destiny dans le forum Flash
    Réponses: 2
    Dernier message: 17/10/2005, 13h33
  5. CppUnit et la generation de rapport au format text
    Par xxiemeciel dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 03/10/2005, 22h08

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