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 26/12/2011, 15h05   #1
Invité de passage
 
Femme Sophie
Directeur de projet
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Sophie
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut copier une chaine de caractères

Bonjour,
Pour chaque cellule d'une seule colonne, je souhaite déplacer une chaine de caractère pour faciliter ensuite le tri de cette colonne.
J'ai parfois le Prénom,NOM et parfois seulement NOM.
J'aimerais avoir NOM,Prénom et quand il n'y a que le NOM aucune modification.
Utilisatrice peu avertie de VBA, j'ai fais des tests pour repérer les cellules où il y a une virgule et sélectionner ce qu'il y a à gauche de cette virgule pour ensuite le coller à droite du nom mais ça ne fonctionne pas (CHERCHE, STXT...)

Situation de départ
Patrice,BERNARD
Colette, PATISSON
BARBARA
Sophie,DAUMER
RAMEAU

Situation d'arrivée espérée
BERNARD,Patrice
PATISSON,Colette
BARBARA
DAUMER,Sophie
RAMEAU

Auriez vous des pistes pour m'aider?
Merci d'avance
sriand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 15h24   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
Sub test()
    Dim c As Range, Tabl
    For Each c In Range([A1], Cells(Rows.Count, 1).End(xlUp))
        Tabl = Split(c.Value, ",")
        If UBound(Tabl) > 0 Then
            c.Value = Tabl(1) & "," & Tabl(0)
        End If
    Next c
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/12/2011, 16h15   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Par formule sans VBA
Donnée brute en A1
Code :
=SI(ESTNUM(TROUVE(",";A1));SUPPRESPACE(STXT(A1;TROUVE(",";A1)+1;NBCAR(A1))&", "&GAUCHE(A1;TROUVE(",";A1)-1));A1)
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 16h31   #4
Invité de passage
 
Femme Sophie
Directeur de projet
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Sophie
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Ca fonctionne!

Bonjour Daniel,
Ton code fonctionne parfaitement, merci beaucoup.
J'ai pu l'intégrer dans ma macro complète et ça tourne à merveille.
J'ai cependant du mal à comprendre comment fonctionne exactement la formule split ( elle scinde le texte en 2 à partir de la virgule et après?) et où va se positionner le tableau créé.
Bien cordialement
Sophie
sriand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 16h43   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
C'est ça. "Split" (en anglais, c'est "partager, découper"). découpe la chaîne de caractères en se servant du séparateur fourni (ici, la virgule). Le résultat est un tableau de chaînes de caractères; le premier élément (index 0) désigne la première partie, la seconde partie a l'index 1 etc. Donc ici, s'il y a deux partie, Tabl(0) désigne le prénom et Tabl(1) le nom. Ubound(Tabl) renvoie l'index le plus élevé du tableau. S'il est égal à 0, c'est qu'il n'y a qu'une partie, donc seulement un nom.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 16h53   #6
Invité de passage
 
Femme Sophie
Directeur de projet
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Sophie
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Ok, je comprends mieux le rôle de "If UBound(Tabl) > 0 Then" dans le code et finalement l'ensemble. Entre le code et les explications tout devient lumineux.
Merci de ta réactivité et de la clarté de tes réponses.
Bien cordialement
Sophie
sriand 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 18h46.


 
 
 
 
Partenaires

Hébergement Web