ne garder que lignes contenant @ et supprimer les autres

charlyrac

XLDnaute Occasionnel
bonjour, et tout est dans le titre je crois........ah non, il manque la précision selon laquelle je suis un "bleu" concernant tous les codes macro formule etc......

et que dans certains classeurs énormes, autant de lignes qu'un classeur peut en contenir, je voudrais supprimer touts les lignes ou ne figure pas le caractère @

merci d'avance de votre énergie à éclairer mon plafonnier :)

charly
 

charlyrac

XLDnaute Occasionnel
Re : ne garder que lignes contenant @ et supprimer les autres

à David84, dans ton exemple fichier Mail.xls, cela fonctionne, cependant les lignes où ne figurent pas un @ ne semblent pas se supprimer et les adresses accolées viennent se superposer .......par contre dans mon fichier excle cela ne fonctionne pas, j'obtiens une erreur 7 mémoire insuffisante.....!?

un deuxième essai sur ton exemple Mails.xls est efficace, j'obtiens bien ce que je souhaitais! peut_on inserer une ligne vide à présent entre chaque ligne pour un confort de lecture?

par contre je vais voir si dans le vrai fichier j'ai toujours cette erreur
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : ne garder que lignes contenant @ et supprimer les autres

Re
peut_on inserer une ligne vide à présent entre chaque ligne pour un confort de lecture?
Remplace
Cells (i + 1, 2) = temp: temp = " "
par
Cells(i + i + 1, 2) = temp: temp = ""
david84, dans mon vrai fichier, en mode débogage, j'ai en surbrillance jaune la ligne Cells (i + 1, 2) = temp: temp = " "
Le code recopie les lignes dans la colonne 2. Si cela ne convient pas, modifie la colonne qui te convient. Après, si cela fonctionne dans le fichier exemple mais pas dans le fichier original, c'est que cela provient de ton fichier, et là je ne peux pas faire grand chose.
A+
 

charlyrac

XLDnaute Occasionnel
Re : ne garder que lignes contenant @ et supprimer les autres

bon je suis perdu.... :) je mets ici un fichier test que je garderais comme façon de faire, donc, ce fichier je veux l'importer dans excel pour que n'apparaissent que les adresses mails mis bout-à-bout par tranche de 99, chaque adresse étant séparée uniquement par un ";" de la suivante... dès que les 99 premières sont faites, je souhaite une ligne vide avant de passer aux 99 autres suivantes et ainsi de suite, cependant pour les dernières, il arrivera qu'il y en aies moins que 99 et peut-être même qu'une.......

COMMENT puis-je arriver à tout cela svp

merci à vous david84 et jacou mais là je coule......
 

Pièces jointes

  • test01excelmacro.txt
    34.4 KB · Affichages: 146
Dernière édition:

david84

XLDnaute Barbatruc
Re : ne garder que lignes contenant @ et supprimer les autres

Re
Il y a bien sûr moyen d'automatiser tout cela mais je ne le ferai pas car le but est de t'aider à établir une procédure que tu puisse comprendre à minima. Or là, visiblement, ton niveau actuel en VBA ne te permet pas de simplement adapter un code. Tu vas donc tout le temps est dépendant du bon vouloir des autres dès que cela ne tournera pas rond, et ce n'est pas le but de ce forum.
Donc je pense que tu peux très bien coller manuellement ton doc text dans le fichier Excel (quand tu es dans le fichier text : Ctrl A=>copier=> se positionner cellule A1 de ton ficher Excel=>coller).

Si tu as plusieurs fichiers text, colle les données dans la colonne A à la suite des précédentes.

Une fois tes données copiées dans la colonne A de ton fichier Excel, lance la macro modifiée :
Code:
Sub Extraire_mail2()
Dim i&, j&, k&, T(), T2, dico As Object, Nb As Double, temp As String, DerLig As Long
Application.ScreenUpdating = False
DerLig = Range("A" & Rows.Count).End(xlUp).Row
[C:C].ClearContents
'T = [A1].CurrentRegion.Value
T = Range("A1:A" & DerLig)
Set dico = CreateObject("scripting.dictionary")
For i = LBound(T, 2) To UBound(T, 2)
    For j = LBound(T) To UBound(T)
        If InStr(1, T(j, i), "@") > 0 Then
            dico(T(j, i)) = dico(T(j, i))
        End If
    Next j
Next i
T2 = dico.keys
Nb = Int(dico.Count \ 99)
    For i = LBound(T2) To Nb
        For j = LBound(T2) To Application.WorksheetFunction.Min(99, dico.Count - k - 1)
                temp = temp & T2(k) & ";": k = k + 1
        Next j
        Cells(i + i + 1, 3) = temp: temp = ""
    Next i
Application.ScreenUpdating = True
End Sub
Cette macro te recopie dans la colonne C les mails par paquets de 99 avec 1 ligne vide entre chaque ligne (cf.onglet test2).
A+
 

Pièces jointes

  • Mail.zip
    245.1 KB · Affichages: 82
  • Mail.zip
    245.1 KB · Affichages: 57
  • Mail.zip
    245.1 KB · Affichages: 49

Jacou

XLDnaute Impliqué
Re : ne garder que lignes contenant @ et supprimer les autres

re bonjour à tous,

tu sélectionnes tes données du fichier texte et tu les colles en A2 du fichier joint et puis tu cliques sur extraction
 

Pièces jointes

  • extraction mail.xlsm
    63.2 KB · Affichages: 131
Dernière édition:

david84

XLDnaute Barbatruc
Re : ne garder que lignes contenant @ et supprimer les autres

Re @Jacou : Remove Duplicate n'existe pas dans la version 2003 donc je doute que cela fonctionne puisque le demandeur semble être en 2003.
De toutes les façons, le dictionnaire traite rapidement les doublons, donc on peut s'en passer.
A+
 

charlyrac

XLDnaute Occasionnel
Re : ne garder que lignes contenant @ et supprimer les autres

Et bien tout fonctionne comme je le souhaitais, il est vrai que sur ce fichier je n'ai pas trop compris, le souci avec excel je pense, est qu'il faut pratiquer régulièrement, il y a un an que je n'avais pas eu besoin de me mettre à programmer du code ou même des formules et là, et bien ce n'est pas du tout comme le vélo, il ne suffit pas de remonter en selle, pour le loisir, j'aurais eu la patience d'attendre, mais là s'agissant de dossier un peu professionnels j'ai sollicité de l'aide rapide et l'ai obtenu par votre intermédiaire, vous qui passez de façon, j'en suis certain, beaucoup de temps à ses choses là.....!
Aussi je vous remercie particulièrement chaleureusement de votre aide et vous souhaite une très belle continuation dans ce que vous aimez et au plaisir de vous recroiser un jour au détour d'une formule un peu gênante pour moi MERCI!!
 

Discussions similaires

Statistiques des forums

Discussions
312 499
Messages
2 089 000
Membres
104 002
dernier inscrit
SkrauzTTV