Extraire ANNEE de cellules textes ayant des structures variables
#1
Débutant XLPages

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 yes

Lamperti

 

Pièce jointe:
xlsx Exemple.xlsx   [ Taille: 9.35 Ko - Téléchargements: 455 ]
Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#2
Webmestre

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 frown

(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 angel, 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,

Pièce jointe:
xlsm PourLamperti.xlsm   [ Taille: 16.51 Ko - Téléchargements: 482 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#3
Accro XLPages

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

 

Pièce jointe:
xlsm Exemple.xlsm   [ Taille: 23.08 Ko - Téléchargements: 431 ]

Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#4
Débutant XLPages

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" cheeky 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

 

Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#5
Webmestre

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 smiley

 

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
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#6
Débutant XLPages

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é enlightened, 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

Hors Ligne
Rapport   Haut 

Re: Extraire ANNEE de cellules textes ayant des structures variables
#7
Débutant XLPages

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 sad

 

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

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes