VBA récupérer une partie du contenu cellule [Résolu/Fermé]

Signaler
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
-
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
-
Bonjour à tous,

J'ai une cellule contenant cette donnée

Créé par Chuck Norris le 24/12/0000 à 00:00

Est il possible de récupérer dans deux colonnes distinctes
la date (colonne D) et l'heure en question. (colonne E)


merci à tous




5 réponses

Messages postés
1235
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
157
Salut,
Pourquoi utiliser du VBA ? Excel peut le faire dynamiquement et simplement :
En D :
=GAUCHE(DROITE(A1;18);10)
En E :
=DROITE(A1;4)
A+
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
2
Pourquoi en VBA? Parce que les rapports sont à charger toutes les quinzaines dans un fichier unique. Je vais chercher cette date et cette heure qui vient se greffer sur un autre classeur (400 colonnes tous les 15 jours).
SI j'inscris cette formule manuellement, le fichier sera trop volumineux

J'ai essayé Range("A1")= Left(Right(A1;18);10) mais ca ne passe pas.

Et je me rend compte que j'ai oublié un détail important

Le soucis est que d'un rapport à un autre, je ne sais pas ou sera inscrit cette donnée. Je sais simplement qu'elle sera en colonne A mais pas quelle cellule précisément.

Mais en tout ta formule fonction très bien malgré tout

Merci de ton aide.
Messages postés
23574
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2020
6 409
Bonjour,

Je sais simplement qu'elle sera en colonne A mais pas quelle cellule précisément.

Et quelle est la caractéristique unique qui permet de l'identifier ?
Elle est la seule à contenir Chuck Norris ?

eric
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
2
Bonjour eriiic,

Elle sera la seule dont le contenu débute par :
"Généré par :" (et non pas "Créé par :")

le nom, la date ou l'heure peuvent être différent sur chaque rapport.
Mais effectivement si la seule contient Généré par : Chuck Norris
Elle sera la seule à contenir cela.

Petite blague à part : Le nom ne pourra être que Chuck Norris, car si tu sais le faire, Chuck Norris le fait mieux :)
Messages postés
23574
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2020
6 409
Et de toute façon il n'a pas à s'inscrire, il est déjà dans toutes les cellules de tous les tableaux existants ;-)

Et il n'y toujours que nom et prénom sans possibilité que ce soit sur 3 mots ?
Ou bien " le ", juste devant la date, sera la seule fois où on risque de rencontrer cette chaine dans la cellule trouvée ?
Et le format de date est bien jj/mm/aaa ?

eric
Messages postés
23574
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2020
6 409
Bon, j'ai fait sans toi, en partant de la fin de chaine ça devrait être bon.
Sub test()
    Dim c As Range, ch() As String
    Set c = [A:A].Find("Généré par :", LookIn:=xlValues)
    If c Is Nothing Then
        MsgBox ("Date non trouvée")
    Else
        ch = Split(c.Value, " ")
        [D1] = CDate(ch(UBound(ch) - 2))
        [E1] = CDate(ch(UBound(ch)))
    End If
End Sub


Tu mets le format date/heure que tu veux en D1 et E1

eric

Et il n'y toujours que nom et prénom sans possibilité que ce soit sur 3 mots ?
Si car il se peut qu'un nom soit à particule (cas extrème mais on ne sait jamais)
Sinon oui, il y aura toujours "Généré par : "+"Nom Prenom"+"le "+"XX/XX/XXX"+"à 00:00"
La date je ne suis pas certain qu'elle soit au format date puisque toute l'information ("Générée le : XX/XX/XXX

Je pars en week end et je testerais ca probablement dimanche soir maintenant, merci de ton aide.

Mais avant je demanderais à Chuck Norris si je peux essayer, ou alors il viendra de lui même m'autoriser à essayer.

A moins qu'il refuse que je parte en week end. ;)

Bonjour désolé pour l'attente j'ai du partir en déplacement d'urgence.

Le code m'affiche :
Il m'affiche (ch(UBound(ch) - 2)=Norris

Je suppose que cette partie est supposée esquivé le nom : ch = Split(c.Value, " ")
Ou je me trompe?


Donc il détecte Chuck Norris plutôt que la date,
ce qui parait normal ;)
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
2
Oui je m'en doute :)
Désolé pour le délai mais je suis débordé en ce moment.

Voici le fichier (envoyé avec l'autorisation de Chuck bien sur)
https://www.cjoint.com/?3Fgj4yxNxGa

Merci de ton aide.
Messages postés
23574
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2020
6 409
Bonjour,

Ca marcherait mieux si tu avais filé les bonnes infos.
il y aura toujours "Généré par : "+"Nom Prenom"+"le "+"XX/XX/XXX"+"à 00:00"
Tu le vois où le "à" ?
Sub test()
    Dim c As Range, ch() As String
    Set c = [A:A].Find("Généré par :", LookIn:=xlValues)
    If c Is Nothing Then
        MsgBox ("Date non trouvée")
    Else
        ch = Split(c.Value, " ")
        [D1] = CDate(ch(UBound(ch) - 1))
        [E1] = CDate(ch(UBound(ch)))
    End If
End Sub

eric
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
2
Bonjour,
Je sens une pointe d'agacement, effectivement il y a 5 jours j'ai écris "à" alors
qu'il y en avait pas. J'ai fait cette erreur car sur d'autres rapports, le CRM me met ce "à"
entre la date et l'heure.

Je m'en excuse. Mais tout comme tu n'as pas vu dans mon fichier qu'il n'y a pas non plus "le" entre le nom et la date...

Cela n'as peut être aucune importance dans le code mais une faute d'inattention, ça arrive.

Cependant, le code ne fonctionne toujours pas, il m'affiche la msg box "Date non trouvée" et donc il ne trouve aucune correspondance à c.

Merci pour ton aide.
Messages postés
23574
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
17 octobre 2020
6 409
entre par et : tu as un espace insécable (code 160) au lieu de l'espace normal (code 32)
On va raccourcir la chaine recherchée :
Sub test()
    Dim c As Range, ch() As String
    Set c = [A:A].Find("Généré par", LookIn:=xlValues)
    If c Is Nothing Then
        MsgBox ("Date non trouvée")
    Else
        ch = Split(c.Value, " ")
        [D1] = CDate(ch(UBound(ch) - 1))
        [E1] = CDate(ch(UBound(ch)))
    End If
End Sub


eric
Messages postés
43
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 mars 2020
2
Cela fonctionne, bon j'avoue j'ai du passé une petite demi heure à comprendre la différence entre une espace sécable et insécable.

Merci à toi.