Macro Excel - Recherche et Suppression

Rainner -  
 Rainner -
Bonjour,

J'essaie de réaliser une Macro Excel afin de m'éviter un travail récurrent de mise en forme de données extraite d'une base. Voici mon problème :

Sur une colonne qui sera toujours la même (E), certains noms de lieux ne sont pas écrit de la même manière que les autres. Je dois donc les mettre au même format que les autres à la main, mais vu qu'il y a quelques centaines de lignes, cela devient vite fastidieux ! Exemple avec des noms de ville (Colonne C) :

Montpellier
Perpignan
75 ~ Paris ~ ILE DE FRANCE
Marseille

Le problème est bien sûr à la troisième ligne, où "75 ~ " et " ~ILE DE FRANCE" ne doivent pas figurer (en comptant bien l'espace).

Mon but serait donc de réaliser une macro, qui une fois lancée rechercherait sur toute la colonne C les cellules qui contiennent ce caractère ~ et supprimer seulement le début et la fin à partir de ce caractère, en supprimant également les espaces, pour laisser seulement "Paris" (pour l'exemple ci dessus).

Merci d'avance pour votre aide.
A voir également:

7 réponses

Rainner
 
up *_*
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour

essaies cette macro qui extrait entre les tildes en colonne C et inscrit en colonne C

Sub extraire_entre_tilde()
Dim derlig As Long
Dim tablo
derlig = Range("E65536").End(xlUp).Row
Application.ScreenUpdating = False
For cptr = 2 To derlig '2 : début de la zone à modifier si ~
tablo = Split(Cells(cptr, 5), " ~ ")
If UBound(tablo) > 0 Then
Cells(cptr, 3) = tablo(1)
Else
Cells(cptr, 3) = tablo(0)
End If
Next
End Sub
0
Rainner
 
Excellent !

j'ai remplacé Cells(cptr, 3) par Cells(cptr, 5) pour que ca me remplace dans la même colonne et ca marche à merveille.

je te remercie pour ton aide !

Maintenant il faut que j'étudie ton code pour voir comment cela fonctionne, merci :P
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Si tu reste dans la colonne 5 (E)
tu n'as pas besoin du "else
Sub extraire_entre_tilde()
Dim derlig As Long
Dim tablo

derlig = Range("E65536").End(xlUp).Row
Application.ScreenUpdating = False
For cptr = 2 To derlig '2 : début de la zone à modifier si ~
    tablo = Split(Cells(cptr, 5), " ~ ")
    If UBound(tablo) > 0 Then Cells(cptr, 5) = tablo(1)
Next
End Sub
0
Rainner
 
merci cela fonctionne bien aussi =)

Par contre je voulais me servir de cette base là pour l'utiliser pour d'autres choses dans ce genre. Comme par exemple j'ai un format de ce type là dans une colonne "500/011109", j'aurai voulu extraire donc les 6 derniers caractères pour obtenir la date et la mettre dans une autre colonne pour chaque ligne, et également mettre dans une autre colonne le numéro de la semaine concernée (je ne sais pas si c'est possible que Excel trouve ça tout seul ?).

Le problème c'est que je comprend pas vraiment ton code, je suis débutant dans la chose. Peut-être pourrais-tu m'aider sur ce point ? En regardant ce que tu as changé par rapport à l'autre code, ça m'aidera peut être à comprendre comment ca marche :x

Merci =)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rainner
 
Autre petite question tant que j'y suis : dans une macro peut-on sélectionner une colonne et lui appliquer un tri alphabétique ? Merci =)
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonsoir,

Excuses moi, des pb aujourd'hui d'où mon silence

Ci dessous macro date et n° semaine ISO (numérotage européen différent des fonctions natives Excel en numérotage US
Cells(x,y) pour faciliter une future inclusion de la macro dans une boucle( a toi de jouer!) : j'ai supposé pour l'exemple 500/111209 en B2 la date en B3 la semaine en B4

Sub extraire_date()
Dim date_txt As String, annee As String, mois As String, jour As String

date_txt = Right(Cells(2, 2), 6)
annee = Right(date_txt, 2)
mois = Mid(date_txt, 3, 2)
jour = Left(date_txt, 2)

 With Cells(2, 3)
    .Value = DateSerial(annee, mois, jour)
    .NumberFormat = "dd/mm/yy;@"
End With
Cells(2, 4) = NOSEM(Cells(2, 3))

End Sub

Function NOSEM(D As Date) As Long
'Auteur Laurent longre. http://xcell05.free.fr/pages/form/dateheure.htm#Numsemaine
   D = Int(D)
   NOSEM = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
   NOSEM = ((D - NOSEM - 3 + (Weekday(NOSEM) + 1) Mod 7)) \ 7 + 1
End Function




concernant le fonctionnement de la macro extraire entre tilde (regarde l'aide de l'éditeur VBA)
la fonction split crée un tableau de variables (en mémoire, pas sur la feuille) avec comme séparateur "espace tilde espace ' soit pour 75 ~ paris ~ ile france un tableau de 3 variables
tablo(0)=75, tablo(1)= paris, tablo(2) = ile etc
par défaut, les tableaux de variable commence à l'index 0
ubound(tablo) donne l'index le + élevé
donc, si tu as Agen sans tilde le tableau aura 1 variable (ubound(tablo)=0 et il est inutile de l'écrire puisque ca ne change pas.

pour te familiariser avec les tableaux
https://silkyroad.developpez.com/vba/tableaux/

mais si tu débutes travailles avant avec ce site particulièrement cool mais fouillé
http://www.info-3000.com/vbvba/index.php


Concernant le tri, entraine toi avec l'enrgistreur de macro et supprime ce qui ne sert à rien dans les facultatifs
en t'aidant de l'aide sur SORT dans l'éditeur VBA

a noter que des formules XL pourrait tout aussi bien et m^me mieux faire le travail des ces 3 macros...


0
Rainner
 
Merci pour ces infos
0