Convertir une colonne année

cephalotus

XLDnaute Occasionnel
Convertir une colonne année - Niveau expert

bonjour à tous,

Je recherche une formule ou une macro pour convertir les données d'une colonne "A" (par exemple) en une autre présentation.

Je joins un petit fichier explicatif, car cela est un compliqué pour décrire le point de départ et le résultat souhaité.

Merci par avance pour vos réponses.
 

Pièces jointes

  • exemple.zip
    5.5 KB · Affichages: 88
  • exemple.zip
    5.5 KB · Affichages: 81
  • exemple.zip
    5.5 KB · Affichages: 93
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonjour Yann,

Puisque tu dis que c'est chinois, je change mon fusil d'épaule.

Donne un lièvre à quelqu'un qui a faim,
il pourra nourrir sa famille à satiété,
mais apprends lui à chasser,
il pourra donner le surplus à ses voisins !

C'est un peu ce qu'on fait sur XLD.
 

JNP

XLDnaute Barbatruc
Re : Convertir une colonne année

Re :),
Je m'abstiens de commentaire, ... mais ça chatouille !
C'est normal :p...
Néanmoins un petit, en passant.
Comment notre ami va-t-il faire lorsqu'il constatera que le résultat renvoyé par la macro n'est pas conforme à son souhait ?
A titre d'exemple, mets 11 - en A2, le résultat devrait être Depuis 1911 et non Depuis 2011
Exact, petite erreur de ma part, je vais recharger le fichier corrigé :eek:
Idem pour A16, A19, ...
Là, je ne vois pas où tu vois une erreur :confused: :
- 89 : Jusqu'à 1989
05> : Depuis 2005
me parait être juste :(
De plus, il y a des résultats bizarres : 00 > 12 renvoie De 2000 à 1912.
Je sais que c'est un cas non prévu sous le fichier original, mais cela fait quelque peu désordre.
Code:
Réponse 1 -> on ne peut pas dépasser l'année en cours
Vu que je me base sur l'année courante (après la petite correction pour 2011), c'est normal et c'est sensé ne jamais se produire ;).
Donne un poisson à quelqu'un qui a faim, il mangera un jour, apprends lui à pêcher, il mangera toute sa vie.
Entièrement d'accord, mais donner un début de code VBA à complèter, je veux bien, mais je demeure largement sceptique :D... Par contre, vu la complexité des tests, je ne sais pas s'il sera non plus capable de reprendre les formules dans 6 mois...
Entre adapter des formules ou du code, pour un néophite, je pense que c'est kif kif bouricot :eek: !
Bonne fin de journée :cool:
 

cephalotus

XLDnaute Occasionnel
Re : Convertir une colonne année

Bonjour JNP, Yann-56 et re -> Hoerwind,


Pour répondre à Hoerwind en toute sympathie (merci au passage pour le décorticage. Cela m'a été utilile) :

À titre indicatif et sans pour autant ouvrir un débat, je ne pense pas à avoir à recevoir de leçon de vie, d'autant plus sur un forum hyper spécialisé dont la mission est: le partage de la connaissance, l'aide, l'entre-aides et de la passion.

En effet, pour certains d'entre vous (je n'évoque pas là ma personne, car je suis un novice d'Excel, je cherche régulièrement, j'aide et je ressouds parfois , (quand le problème est de mon niveau), et j'appelle à l'aide, lorsque je ne m'en sors pas) la résolution de problèmes, l'élaboration "d'équations" sont une passion au même titre que le Sodoku, le puzzle, le bénévolat, etc..

Dans la vie je suis salarié et sapeur-pompier volontaire, bénévole dans ma petite commune.
À ce titre je suis comme certains d'entre vous (JNP, notamment), je mets mes connaissances, une partie de mon temps et quelques fois mon intégrité physique aux profits d'autrui, de la collectivité, sans porter de jugement ou faire la morale a ceux que nous allons aider et secourir, et notamment lorsque les accidents sont causés par la stupidité de l'être humain !

Pour finir et clore l'intervention déplacée d'Hoerwind; pour les moralistes, les enseignants, les individualistes, il y a sans doute d'autres endroits plus appropriés sur le Net.

À ceux qui aiment les proverbes et qui se permettent de les jeter à la face d’autrui à tout bout de champ :

Toute générosité se paie, c'est même par là qu'elle vaut. :mad:

Un proverbe destiné à JNP: La vraie générosité consiste à faire plaisir sans espérance de revanche. ;)

JNP, je remercie vivement pour ton fichier que tu as corrigé sur une remarque fondée d'Hoerwind («..A titre d'exemple, mets 11 - en A2.. »).


En toute sympathie, bonne soirée à tous. :)
 

JNP

XLDnaute Barbatruc
Re : Convertir une colonne année

Re :),
...
Pour finir et clore l'intervention déplacée d'Hoerwind; pour les moralistes, les enseignants, les individualistes, il y a sans doute d'autres endroits plus appropriés sur le Net.
...
Je ne peux pas cautionner ton propos :mad:.
L'intervention d'Hoerwind n'était pas déplacée, surtout qu'il a été le premier à essayer de te venir en aide. Seule la complexité des tests l'a un peu obligé à cette démarche : te donner les outils nécessaires et te laisser continuer pour que tu assimiles bien la méthode. Quand la formulation est moins longue pour obtenir tous les cas de figure, je pourrais te citer plein de posts où sa formule est complète, et surtout, efficace ;).
Moi-même, je ne sais plus combien de fois j'ai posté au demandeur de commencer la réflexion, qu'on l'aiderait ensuite :eek:...
Et je suis convaincu que du travail tout maché ne sera que rarement assimilé par le demandeur. Pourquoi alors avoir posté ? Tout simplement parce que je le sentais pas par formule (mais je suis un peu nul de ce côté-là :p), et que le temps de construire ma fonction, quand je suis revenu sur le fil, vous en étiez là. J'ai hésité à poster, mais je trouvais un peu bête de garder ça dans mes cartons :rolleyes:.
L'avenir lui donne d'ailleurs raison, vu que tu t'aperçois que tu as oublié des cas de figure ("." à la place de "/", mois sur un seul chiffre, combinaison mois/année avec année tout court, que tu m'as envoyé par MP), et que du coup, ma fonction devient presque totalement caduque :(... Sa construction (sur la base de la longueur de chaine sans espace) n'est pas vraiment adaptable (ou alors deviendra une véritable usine à gaz) à ces nouvelles contraintes :mad:.
Je vais donc essayer de passer par une toute autre voie, mais ça veux dire que mon premier jet est bon à mettre à la poubelle :eek:.
J'espère que tu t'excuseras auprès d'Hoerwind pour ton emportement disproportioné ;).
Bonne journée :cool:
 

JNP

XLDnaute Barbatruc
Re : Convertir une colonne année

Re :),
Donc, je suis reparti dans une tout autre direction.
1) En premier, je supprime les espaces, remplace les "." par "/" et ">" par "-".
2) Avec RegExp (si JM passe par là, il peux essayer de diminuer le nombre de Patterns, il m'en reste quand même 7 :p...), je rationalise l'écriture de départ : 08->2008, 02/08->02/2008, 2/08->02/2008, etc.
3) En fonction de l'emplacement du tiret, je rajoute le texte.
A priori, j'ai bien maintenant tous les cas de figure ;). Si tu me dis qu'il y a des jours (type 01/02/08), je me fâche tout rouge :mad:.
Essaie de ne pas oublier :
JNP à dit:
J'espère que tu t'excuseras auprès d'Hoerwind pour ton emportement disproportioné ;).
Bonne suite :cool:
 

Pièces jointes

  • Dates.xls
    47 KB · Affichages: 69
  • Dates.xls
    47 KB · Affichages: 72
  • Dates.xls
    47 KB · Affichages: 73

cephalotus

XLDnaute Occasionnel
Re : Convertir une colonne année

Bonsoir JPN,

Merci pour ta réponse.
Je viens de faire le test du fichier, il fonctionne très bien sur les formats que l'on a déjà vu, mais sur les nouveaux, il y a un bug :

Format départ :

11.00-
-06.10
09.94-2.97
3.97-01.01
8.89 - 2.92
-06.10

Résultat après traitement :

Depuis 11/2000
Jusqu'à 06/2010
De 09/2094 à 02/1997
De 03/2097 à 01/2001
De 08/2089 à 02/1992
Jusqu'à 06/2010

De ce que je comprends, le problème est présent seulement sur l'année se trouvant avant le trait d'union..
Je viens de regarder la macro pour voir comment elle était faite…euh..BuG !!
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Convertir une colonne année

Re :),
Effectivement, une légère erreur s'est glissée, il faut modifier le bloc
Code:
    .Pattern = "(/\d{2}-)" ' .../99-...
    If .test(Texte) Then
    Temp = Mid(.Execute(Texte)(0), 2, [COLOR=red][B]2[/B][/COLOR])
        If Temp < Lim Then
            Texte = .Replace(Texte, "/20" & Temp [COLOR=red][B]& "-"[/B][/COLOR])
        Else
            Texte = .Replace(Texte, "/19" & Temp [B][COLOR=red]& "-"[/COLOR][/B])
        End If
    End If
Bon courage :cool:.
PS : Si tu veux comprendre un petit peu RegExp, va jeter un œil ICI
 

hoerwind

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonjour à vous tous,

Suite à la remarque de JNP (message #19), je reçois de notre ami cephalotus par MP un mot d'excuses concernant ses propos à mon égard sous son message #18.
J'aurai préféré qu'il le fasse sur le forum, afin que vous le sachiez aussi.

Je souhaite ne pas y ajouter de commentaires, pour moi ce petit différent est clos et oublié.
 

YANN-56

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonjour cephalotus, hoerwind, JNP, par ordre d'entrée en scène.

Hoerwind, je me sens aussi concerné par ce heurt pour y avoir acquiescé.
En réalité, il manque à nos messages, le ton sympa de la voix, c'est tout! :)

cephalotus, hoerwind, n'ayant pas eu de réaction à mon message initial relatif à la division des données de la colonne "A" en deux colonnes, et pour ma gouverne personnelle:

J'aimerais savoir pourquoi cela ne serait pas envisageable.
(Ne pigeant rien aux formules, j'ai du mal à suivre)

Je ne demeure pas moins convaincu que le traitement en serait bien simplifié
via VBA, avec peu de lignes non complexes.
(Je serais surpris que JNP me dise le contraire sachant ce qu'il sait faire)

Reste aussi à savoir si l'écriture en colonne "A" est directe, ou issue d'une boite de saisie.

A vous lire, et amicalement.
Tout en assurant que je ne serai pas vexé si l'on me dit que je suis à coté de la plaque.

Yann
 

hoerwind

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonjour Yann,

Si je n'ai pas réagi à ta proposition c'est parce que tu parlais de VBA, et le VBA et moi nous ne partageons pas la même mansarde.

Mais à la relire, ton approche est la même que celle à laquelle il est fait appel par formules.
Vois le petit fichier que j'ai posté, dans lequel j'ai décortiqué la formule en l'éclatant dans plusieurs colonnes.

Si notre ami avait réagi comme je l'espérais, en posant des questions quant aux parties qu'il ne maîtrisait pas, je me serais fait un plaisir de les lui expliquer.
 

cephalotus

XLDnaute Occasionnel
Re : Convertir une colonne année

Bonsoir Yann,

Je suis mal placé pour expliquer quoique ce soit sur les solutions apportées par hoerwind ou JNP.
Ceci étant, il est vrai que les formules demandent beaucoup de ressources et de temps à Excel sur des fichiers ayant un nombre de lignes important. Ce qui est le cas de mon fichier (environ 10 000 lignes).

Je profite de ce post pour remercier chaleureusement JNP pour la résolution de mon problème. Sa macro, si elle en est une, fonctionne parfaitement.

Bonne soirée à tous.
 

YANN-56

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonsoir hoerwind, au papier doré de l'artiste Cephale et la marque si douce (Dixit la pub),
et à ceux qui passeront par ici,
(Un peu de bêtises désacralisent aussi les discussions... N'est-il pas?)

Cephalotus, au pseudo sympa; quand la poésie s'y mêle, je suis disposé à t'aiguiller

VBA est moult fois moins complexe que ces fichues formules dans une page Excel.
Au début cela fait un peu peur, mais c'est comme les maths, quand l'on a compris que
(15 x 2) / 3 = 10..... Le reste est de la roupie de sansonnet, et qu'une affaire de recherches.

Je vais donc tenter de comprendre ta logique, et te proposer ma façon de voir.

Pour info, je suis actuellement en échanges personnels avec un copain rencontré ici,
pour l'un ou l'autre trouver la meilleure solution pour analyser des pages avec plus de
22000 lignes, et ayant chacune 9 colonnes à transcrire....
(198.000 cellules en 8 ou 14 secondes suivant la méthode)

Dans ton cas, il me semble que tu n'auras même pas le temps d'éternuer...!

Tu ne m'as pas répondu sur l'origine du remplissage de ta colonne "A"
Je vais donc estimer que celle-ci est issue d'une écriture directe sur la page.
(Si cela passe par une saisie dans des TextBoxes, il faudrait agir en amont)

Je vais donc construire un exemple dans ce sens, et tu me diras ce que tu en penses.

A ce soir, ou demain, suivant les évènements de la soirée.

Amicalement.

Yann

P.S. hoerwind, je suis comme toi, même pire:
les formules me donnent des boutons, au point où j'ai appris à en créer :) :) :)
 
Dernière édition:

cephalotus

XLDnaute Occasionnel
Re : Convertir une colonne année

Bonsoir Yann,

en fait, je ne comprends pas bien ta question concernant la colonne A.
De la l'utilisation de ce qu'a fait JNP, je copie/colle des données en provenance de fichiers, mais ayant des formats différents, puis je recopie/colle le résultat dans mon fichier.

Comme tu l'as compris, je ne suis pas très doué, je fais donc des opérations basic.

J'ai regardé ce que veut dire TextBoxes. Apparament cela est un combo ou filtre comme dans Excel. Si c'est cela, je ne sais pas quoi te répondre.

En espérant avoir répondu à ta question.
Bonne soirée.
 

YANN-56

XLDnaute Barbatruc
Re : Convertir une colonne année

Laisse tomber cette affaire de TextBox ou de ComboBox,
J'ai compris que tu ne passes pas la saisie dans une boite de dialogue (UserForm)

Je vais poursuivre de mon coté avec cette précision.

Du tien, regarde s'il n'est pas possible de contraindre que les formats de tes fichiers soient identiques et conformes au résultat que tu souhaiterais voir dans ton Classeur qui les copie.

Il est toujours préférable d'intervenir à la source, pour ne pas avoir à marner par la suite.

Je dois m'éclipser un moment, il y a des famines qui hurlent!

Après l'exemple que je vais te construire, si l'on m'en laisse le temps,
il sera plus facile d'en discuter.

A plus tard, sinon très tard ou vachement tôt.

A plus.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Convertir une colonne année

Bonjour cephalotus, aux participants et à ceux qui passeront par ici,

Voici une première approche jointe.
(Désolé de n'avoir pas été plus prompt; la cause était d'être pris par ailleurs)

Le peu de lignes du code te permettra de faire des recherches avec "ALT+F1"
sur les termes employés pour mieux comprendre le cheminement.

Il te restera à gérer le format des dates (Il y a du boulot dans ce domaine!!!)
Ne perds pas de vue que "0" est le premier janvier 1900.

Donc, à "04" de ta cellule, il faut ajouter 2000, et à 89 : 1900...
Cela aussi t'obligera à jongler avec les conditions,
et la mise éventuelle au format numérique des dates.

De la même façon, tu pourras supprimer ou remplacer ta colonne "A"
qui dans cette configuration n'aura plus lieu d'être. Itou pour les autres...

Amicalement, en espérant t'avoir fait avancer un peu.

Yann

P.S. J'ai oublié de dire que le bouton "Traduire" est le Moteur.
Je pense cependant que tu l'auras deviné.
 

Pièces jointes

  • ANNEES.xls
    32 KB · Affichages: 62
  • ANNEES.xls
    32 KB · Affichages: 71
  • ANNEES.xls
    32 KB · Affichages: 71
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11