Copier cellules sous conditions dans Texedit (voire Word)
Bonjour,
Là, je planche.
J'image que c'est tout con, mais je n'ai pas trouvé.
Je cherche à copier une série de cellules se trouvant dans une seule colonne mais sous deux conditions et les placer dans un nouveau fichier Textedit, avec la fonction spéciale "coller et appliquer le style" - afin d'éviter de se retrouver avec un tableau...
Voici un fichier d'exemple, et mes essais de macro dans module 1, Sub listepourcourrier()
L'objectif est, étant donné que cette colonne comprend le nom des factures préalablement générer par une macro, de récupérer le noms des factures qui n'ont pas encore été envoyé pour préparer mon courrier accompagnant les dites factures - courrier comprenant parfois plusieurs projet, donc plusieurs fichiers excel dont il y a aura à extraire le nom des factures.
Merci d'avance pour votre aide,
cordialement,
iArmeek
Salut,
J’ai tenté de résoudre (en partie) ton problème, notamment à l’aide d’informations glanées sur Internet.
Je te présente l’état de mon travail bien qu’il n’est pas complet ; je n’ai par exemple pas réussi à ne pas coller les bordures, malgré divers essais sur la base des informations à disposition dans l’aide Excel, sous xlPasteType (voir copie d’écran ci-dessous). Je n’ai pas non plus cherché à travailler avec cette autre application que Word.
Mais selon que la première partie te convient déjà ou non, je peux peut-être continuer à chercher, ou peut-être que tu as toi-même une idée à ce sujet, ou peut-être qu’un autre membre va nous venir en aide.
La macro Sub listepourcourrier() a été affectée au bouton LISTE FACTURES POUR COURRIER.
A te relire.
Salut, merci pour ton aide. ça marche super.
Avec un peu de recherche, j'ai trouvé comment coller sans mise en forme dans word.
Sub listepourcourrier()
Dim Word_Xx As Object
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path
Set Word_Xx = CreateObject("word.application")
Word_Xx.Visible = True
Word_Xx.Documents.Add
With Sheets("Tableau des couts")
For i = 8 To 25
If .Range("K" & i).Value <> "" And Range("L" & i).Value = "" Then
.Range("N" & i).Copy
'ici la formule pour copier sans mise en forme
Word_Xx.Selection.PasteAndFormat (wdPasteDefault)
End If
Next i
End With
Application.CutCopyMode = False
'Word_Xx.ActiveDocument.SaveAs Chemin & "\Test - " & Date & " " & Hour(Time) & "." & Minute(Time) & "." & Second(Time) & ".doc"
''Word_Xx.ActiveDocument.Close 'SI DESIRE
''Set Word_Xx = Nothing 'VRAIMENT NECESSAIRE ???????????
End SubMais comme je m'en doutais, avec word c'est la lenteur du processus.
Un autre problème - à confirmer - il semble que quand word est déjà ouvert, cela bloque. Des idées...
A peaufiner...
Merci,
iArmeek
Je confirme dès que word est ouvert, ça bloque à :
Set Word_Xx = CreateObject("word.application")Salut,
Je n'ai pas trop le temps de tester, mais est-ce qu'en remplaçant
Word_Xx.Visible = Truepar
If Word_Xx.Visible = False Then Word_Xx.Visible = Truene passerait pas ?
Amicalement.
Salut,
Le problème est en amont : http://support.microsoft.com/kb/177097/fr
Le bogue se fait parce que Word est déjà ouvert, il faut donc vérifier préalablement s'il est ouvert ou non
Mais avec leur code tel quel (sans changer une virgule), la macro ne marche pas chez moi.
Sub RunWord()
Dim wObj as Word.Application
On Error Resume Next
' Get existing instance of Word if it exists.
Set wObj = GetObject(, "Word.Application")
If Err <> 0 then
' If GetObject fails, then use CreateObject instead.
Set wObj = CreateObject("Word.Application")
End If
' Add a new document.
wObj.Documents.Add
' Exit Word.
wObj.Quit
' Clear object memory.
Set wObj = Nothing
End Subun problème de version, de système....
je cherche encore
à bientôt
iArmeek
Voici la réponse :
Sub listepourcourrier()
Dim Word_Xx As Object
On Error Resume Next
Set Word_Xx = GetObject(, "Word.Application")
If Err <> 0 Then
Set Word_Xx = CreateObject("Word.Application")
End If
Word_Xx.Visible = True
Word_Xx.Documents.Add
With Sheets("Tableau des couts")
For i = 8 To 25
If .Range("K" & i).Value <> "" And Range("L" & i).Value = "" Then
.Range("N" & i).Copy
Word_Xx.Selection.PasteAndFormat (wdPasteDefault)
End If
Next i
End With
x = MsgBox("C'est fait", 4096, "liste factures")
'MsgBox "C'est fait"
'MsgBox.Visible = True
Application.CutCopyMode = False
End SubC'est long!!! comme processus alors j'ai rajouté un message, mais je n'arrive pas à le mettre au premier plan!!!! (Je suis maniaque)
Mais concernant la question initialement posée, merci de ton aide Yvouille, car sans toi, j'aurai pas pu avancer.
Cordialement,
iArmeek