Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 10h34   #1
Invité régulier
 
Homme
Consultant fonctionnel
Inscription : juillet 2006
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Consultant fonctionnel
Secteur : Service public

Informations forums :
Inscription : juillet 2006
Messages : 26
Points : 5
Points : 5
Envoyer un message via MSN à MsieurDams
Par défaut Affecter plusieurs parties d'une phrase dans des cellules

Bonjour,

Je reçois une quantité importante de messages concernant la gestion d'utilisateurs pour l'accès à une application de mon travail. L'objet du mail rassemble plusieurs informations que je dois reporter dans un fichier Excel à des fins de suivi (notamment le nom, le prénom et le nom d'utilisateur).

Vu que ce flux de mails va croissant, mes activités de saisie prennent un temps trop considérables et j'ai bien envie de me développer une petite macro pour gagner du temps.

Vu qu'Outlook me permet d'exporter une liste des emails d'un dossier au format Excel, j'ai toutes les informations nécessaires. Il me reste juste à pouvoir extraire les informations essentielles. Sauf qu'il y a quelques particularités et je maîtrise très mal les fonctions right(, len( etc.

Voici la structure de l'objet des mails d'affectation

"[APPLICA] Affectation de l'utilisateur " (39 caractères)
"Prénom" (variable, jamais sans espaces)
" " (1 caractère)
"Nom" (variable, jamais sans espaces)
" (USERNAME=" (11 caractères)
"USERNAME" (6 ou 8 caractères)
") aux groupes d'ayants-droit des applications suivantes" (54 caractères)

J'imagine que pour les variables Nom, Prénom et USERNAME, il faudrait que je puisse sélectionner le mot entier. En revanche, là où ça se complique, c'est que ces trois variables ont des tailles non fixes, et qu'une des premières pistes de recherche serait d'exclure le texte invariant.

Quelles autres pistes pourrais-je suivre ?

Bien cordialement.
MsieurDams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h17   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 945
Points : 30 945
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Est-ce que c'est toi qui a fait les retours à la ligne où est-ce que c'est une seule phrase ?

Un cas concret (en changeant les noms) pourrait aider.

Par exemple si c'est une phrase avec un élément entre chaque donnée, la fonction Split pourrait aider.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h59   #3
Invité régulier
 
Homme
Consultant fonctionnel
Inscription : juillet 2006
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Consultant fonctionnel
Secteur : Service public

Informations forums :
Inscription : juillet 2006
Messages : 26
Points : 5
Points : 5
Envoyer un message via MSN à MsieurDams
Bonjour,

J'ai fait les retours à la ligne pour bien distinguer les différents éléments.

ce qui donne :

[APPLICA] Affecation de l'utilisateur Paul DUPONT (USERNAME=A00000) aux groupes d'ayants-droit des applications suivantes
MsieurDams est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 17h27   #4
Invité régulier
 
Homme
Consultant fonctionnel
Inscription : juillet 2006
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Consultant fonctionnel
Secteur : Service public

Informations forums :
Inscription : juillet 2006
Messages : 26
Points : 5
Points : 5
Envoyer un message via MSN à MsieurDams
Bonjour.

Merci pour le conseil avec l'instruction Split(, j'ai pu parvenir à mes fins.

Pour mémoire, voici le code que j'ai écrit.

Les phrases à traiter sont présentes dans la colonne A. La première partie du code sépare par mots (utilisation de l'espace comme différenciant) et réécrit son contenu dans les colonnes adjacentes (B et suivantes), la seconde partie se concentre sur la colonne contenant la valeur USERNAME et en extrait les caractères désirés selon le cas de figure (nom d'utilisateur à 6 ou 8 caractères).

Il doit certainement y avoir un moyen de rendre le code un peu plus propre, mais la "moulinette" fonctionne très bien.

Je considère ce problème comme résolu

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Traitement Objet()
'
' Macro d'extraction des informations contenu dans l'objet du mail
'
Dim valeur As String
Dim tableau() As String
Dim feuil As Worksheet
Dim i, a, b, end_ligne_temp As Integer
 
Sheets(1).Select
end_ligne_temp = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
 
For a = 1 To end_ligne_temp
 
    Cells(a, 1).Select
    valeur = Cells(a, 1).value
 
    tableau = Split(valeur, " ")
 
    For i = 0 To UBound(tableau)
    Cells(a, i + 2).value = tableau(i)
 
    Next i
 
Next a
 
For b = 1 To end_ligne_temp
If Len(Cells(b, 9).value) = 17 Then
Cells(b, 9).value = Mid(Cells(b, 9).value, 11, 6)
End If
If Len(Cells(b, 9).value) = 19 Then
Cells(b, 9).value = Mid(Cells(b, 9).value, 11, 8)
End If
 
Next b
End Sub
MsieurDams est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h46.


 
 
 
 
Partenaires

Hébergement Web