envoie données d'excel vers word

Chico64

XLDnaute Junior
Bonjour à vous Tous,

Ce que je souhaiterais faire :

J'ai des colonnes sur ma feuille excel, 2 m'intéressent:
la colonne C : est rempli d'adresse email
la colonne I : est rempli par soit : vide, Visitor, Owner, Member

Ce qu'il m'intéresserait est de récupérer les adresses email de la colonne C lorsque qu'elles sont liées à Visitor de la colonne I.

Puis d'envoyer ces adresses email séparées par ";" dans un fichier word.

Je vous remercie par avance pour votre temps.

Chico
 

macsscam

XLDnaute Junior
Re : envoie données d'excel vers word

Bonjour,

Si tu nous montres ton fichier et ce que tu as déjà commencé à réaliser, ce sera plus facile et plus rapide.

Ensuite, il existe des solutions en VBA ou en formule selon ce que tu souhaites réaliser : une seule extraction, de nombreuses extractions, si ton fichier est récupéré d'ailleurs, etc.

Typiquement, en formule, tu peux utiliser quelque chose comme :

A mettre dans une colonne

- sur la première ligne de tes données
Code:
=SI(I1="Visitor";C1;"")

- à partir de la deuxième ligne et à tirer jusqu'à la fin des données
Code:
=SI(C1<>"";C1&";";"")&SI(I2="Visitor";C2;"")


Peut-être faisable avec une formule matricielle, faudrait le faire en vrai pour voir.

Cordialement,

--
Max
 

Chico64

XLDnaute Junior
Re : envoie données d'excel vers word

Saut et Merci pour votre temps,

Je vous donne mon fichier excel en pièce jointe si vous pouvez le regardez vous comprendriez mieux mon soucis.

Merci par avance.

Chico
 

Pièces jointes

  • example.xls
    28 KB · Affichages: 66
  • example.xls
    28 KB · Affichages: 83
  • example.xls
    28 KB · Affichages: 85

Catrice

XLDnaute Barbatruc
Re : envoie données d'excel vers word

Bonjour,

Essaie ceci :

Code:
Sub Test()
Chemin = ThisWorkbook.Path
Set Wapp = CreateObject("Word.application")
Wapp.Visible = False
Set MonDoc = Wapp.Documents.Add(DocumentType:=0)
For Each X In Range("C1:" & Range("C65536").End(xlUp).Address)
    If X.Offset(0, 6).Value = "Visitor" Then
        Wapp.Selection.TypeText Text:=X & ";"
    End If
Next
Wapp.Selection.TypeBackspace
MonDoc.SaveAs Filename:=Chemin & "\Test.doc"
Wapp.Quit
Set Wapp = Nothing
End Sub
 

Chico64

XLDnaute Junior
Re : envoie données d'excel vers word

Merci beaucoup Catrice,

Cela marche très bien !

Si je ne souhaite plus créer un fichier word pour y insérer ma liste d'adresse email mais plutot que la fonction créer un fichier .txt et y insére la liste d'adresse email...

Merci par avance.

Chico
 

Catrice

XLDnaute Barbatruc
Re : envoie données d'excel vers word

Bonsoir,

Tu peux essaye ceci :
Code:
Sub Test2()
Chemin = ThisWorkbook.Path
MonFichier = "Test.txt"
MonSep = ";"
Marqueur = 0
'--------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile Chemin & "\" & MonFichier
Set f = fs.GetFile(Chemin & "\" & MonFichier)
Set ts = f.OpenAsTextStream(2, -2)
For Each X In Sheets("By Organization").Range("C1:" & Sheets("By Organization").Range("C65536").End(xlUp).Address)
    If X.Offset(0, 6).Value = "Visitor" Then ts.Write IIf(Marqueur = 0, X.Value, MonSep & X.Value): Marqueur = 1
Next
ts.Close
End Sub
 
Dernière édition:

Chico64

XLDnaute Junior
Re : envoie données d'excel vers word

Merci BEAUCOUP Catrice,

Tout marche comme je le souhaitais encore merci, cependant pour mieux comprendre le VBA, j'aimerais si tu as le temps de m'expliquer les 3 morceaux de code ci-dessous :


Code:
 Sheets("By Organization").Range("C1:" & Sheets("By Organization").Range("C65536").End(xlUp).Address)

Je ne comprends pas pourquoi, Sheets("By Organization") ?

Code:
Marqueur = 0

Je ne comprends pas pourquoi, à quoi sert le Marqueur = 0

Code:
Set ts = f.OpenAsTextStream(2, -2)

Je ne comprends pas pourquoi, OpenAsTextStream(2, -2)


Merci par avance pour votre temps.

Cordialement.

Chico
 

Catrice

XLDnaute Barbatruc
Re : envoie données d'excel vers word

Bonjour,

Je ne comprends pas pourquoi, Sheets("By Organization") ?
Je suis reparti de l'exemple précédent, la feuille s'appellait By Organization.
Tu peux remplacer Sheets("By Organization") par ActiveSheet par exemple.
J'initialise Marqueur=0 puis le passe à 1 apres la premiere écriture dans le fichier Texte pour ne pas mettre de ";" la premiere fois. En effet, s'il est = à zero on fait un write de X.Value et s'il est = à 1 un write de MonSep & X.Value
Set ts = f.OpenAsTextStream(2, -2)
Ce sont les parametres de OpenAsTextStream
object.OpenAsTextStream([iomode, [format]])
iomode = ForReading, ForWriting ou ForAppending => 2 = ForWriting pour ecrire dans le fichier
format = TristateUseDefault, TristateTrue ou TristateFalse => -2 = TristateUseDefault (Ouvre le fichier avec la valeur par défaut du système).
cf. Aide Excel pour plus de détails.

Edit : Je viens de m'apercevoir qu'on pouvait alléger le code :
Code:
Sub Test2()
Chemin = ThisWorkbook.Path
MonFichier = "Test.txt"
MonSep = ";"
Marqueur = 0
'--------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set Var1 = fs.CreateTextFile(Chemin & "\" & MonFichier, True)
For Each X In ActiveSheet.Range("C1:" & ActiveSheet.Range("C65536").End(xlUp).Address)
    If X.Offset(0, 6).Value = "Visitor" Then Var1.Write IIf(Marqueur = 0, X.Value, MonSep & X.Value): Marqueur = 1
Next
Var1.Close
End Sub
 
Dernière édition:

Discussions similaires

Réponses
15
Affichages
853
Compte Supprimé 979
C
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
312 502
Messages
2 089 046
Membres
104 010
dernier inscrit
Freba