Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 21/10/2015
De STRASBOURG
Messages:
7
Système d'exploitation: Win XP Version Excel utilisée: 2007 |
Posté le : 21-10-2015 14h26
Bonjour à tous,
Nouveau sur le forum, je me présente : Retraité, j'aime rechercher des solutions pour me simplifier la vie et pour garder les neurones en activité. Autodidacte, je "bricole" assez bien sur Excel (2007) jusqu'à réaliser des macros VBA construites de bric et de broc.
Le problème que je n'arrive pas à résoudre est le suivant : A partir de la colonne A qui contient des intitulés de livres (auteurs, année de publication, titre, numéro de volume, série, etc.) au format texte, j'essaie d'extraire l'année de publication en colonne C.
J'ai bien essayé d'utiliser la fonction STXT, mais la structure de mes intitulés de livres est très variable (et elle doit rester ainsi) et je n'obtiens pas le résultat escompté.
Je vous mets un extrait du fichier avec différentes structures de titres rencontrées, un exemple vaut toujours mieux que trop de bla bla, et vous verrez rapidement où je coince.
Je suis preneur de solutions par formules ou en VBA.
Merci d'avance pour votre aide précieuse Lamperti
|
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 21-10-2015 19h01
re-Bonjour Lamperti,
Clairement, par formule de feuille de calcul, je ne saurais pas faire (mais je suis sûr qu'un formuliste de talent qui passera par là, se fera une joie de participer à ce fil de dicussion...)
Mais, puisque tu n'as visiblement rien contre VBA , alors je te propose la Fonction personnalisée suivante :
DANS UN MODULE DE CODE STANDARD (ex : Module1) Function getYear(R As Range) As Long 'myDearFriend! - www.mdf-xlpages.com Dim T As String, T2 As String Dim C As Long, V As Long Application.Volatile T = R.Value 'Cherche 4 chiffres consécutifs If T Like "*####*" Then For C = 1 To Len(T) - 3 T2 = Mid(T, C) If T2 Like "####*" Then V = Val(Left(T2, 4)) Exit For End If Next C End If getYear = V End Function Dans ton exemple modifié en pièce jointe, j'ai ajouté une colonne D avec cette fonction en pleine action... Bien évidemment, ce n'est pas miraculeux : cette procédure se contente de récupérer la valeur de la première série de 4 chiffres consécutifs rencontrée dans la chaine de texte. Ça semble fonctionner, au moins pour les quelques lignes d'exemples fournis.
J'espère que ça pourra te dépanner et/ou t'inspirer.
Bien cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
Système d'exploitation: PC Version Excel utilisée: 97 à 2016 |
Posté le : 21-10-2015 19h30
Bonjour Lamperti, Didier, le forum,
Une autre solution un peu en retard mais néanmoins.
Plus de détails sur demande.
Cordialement,
Guy
|
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 21/10/2015
De STRASBOURG
Messages:
7
Système d'exploitation: Win XP Version Excel utilisée: 2007 |
Posté le : 21-10-2015 19h39
Bonsoir Didier mDF,
Merci pour ta réponse en VBA "non miraculeuse" mais qui fonctionne parfaitement sur les x mille lignes de mon fichier. Je vais l'intégrer dans ma macro qui transforme un export CSV en liste de livres utilisable.
Mais avant, je tenterai de comprendre les étapes et les variables de cette méthode non miraculeuse que je ne connaissais pas mais qui m'a dépanné à 100%
Bravo pour la qualité du site et l'effort palpable d'entre-aide et de respect mutuel qui s'en dégage
Au plaisir de nouveaux échanges, Cordialement, Lamperti
|
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 21-10-2015 19h48
re Lamperti, Bonsoir Guy
Cher Guy, bravo pour cette utilisation judicieuse des Expressions régulières. Je n'y pense jamais, mais dans ce cas précis, c'était effectivement une bonne idée je pense. Encore merci à toi pour ton partage !
Bien cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 21/10/2015
De STRASBOURG
Messages:
7
Système d'exploitation: Win XP Version Excel utilisée: 2007 |
Posté le : 21-10-2015 19h55
Bonsoir Guy,
C'est Noël avant l'heure, ta méthode fonctionne également parfaitement. Je vais départager les 2 versions en les intégrant tout à tour dans ma macro et ce sera la plus rapide qui l'emportera ... au sens figuré , vu qu'elles répondent toutes les 2 à mes attentes.
Merci pour ton autre vision de mon problème et, comme pour celle de Didier, je vais essayer de comprendre la démarche.
Bonne soirée, Cordialement Lamperti |
|
|
Re: Extraire ANNEE de cellules textes ayant des structures variables | ||
---|---|---|
Inscription: 21/10/2015
De STRASBOURG
Messages:
7
Système d'exploitation: Win XP Version Excel utilisée: 2007 |
Posté le : 22-10-2015 12h35
Bonjour Guy,
Je reviens sur ta méthode que j'ai intégrée dans ma macro ... et ça ne fonctionnait plus
N'ayant pas l'habitude de baisser les bras, j'ai analysé le code et c'est la remarque de Didier qui m'a mis sur la voie. Tu utilisais des Expressions Régulières, ce qui pour moi était aussi limpide que de m'écrire en mandarin. En fouillant, j'ai vu qu'il fallait activer la référence "Microsoft VBScript Regular Expressions 5.5" dans les outils de l'éditeur.
Si j'ai bien compris, cette méthode incroyablement puissante est basée sur les Pattern, certains paramètres à définir, des tests et des exécutions. J'ai bien vu le principe, et je pense qu'en y mettant le temps nécessaire, je serai capable de l'adapter à d'autres traitements de chaînes, en modifiant au besoin l'instruction .Pattern = "\(.*([0-9]{4}).*\)" par l'instruction adaptée.
Merci encore à toi et à Didier pour m'avoir permis cette découverte Cordialement, Lamperti |
|
|