Problèmes macro édition de courriers Excel-Word

benadry

XLDnaute Occasionnel
Bonsoir,

Tout nouveau sur ce forum, je me permets de vous exposer mon problème, car je pense que vous pourrez y trouver une solution.
Je cherche, à partir d’un fichier Excel, à générer automatiquement des courriers sous Word, qui peuvent être différents selon les cas (macros variant selon les résultats d'une liste déroulante).
En allant voir dans différents forums, j’ai réussi à créer les macros qui génèrent les courriers, j’ai mis des signets … Tout fonctionne parfaitement.
Seulement, je cherche depuis plusieurs jours à résoudre plusieurs problèmes qui empêchent mon projet d’aboutir. Je suis loin d’être un pro des macros. Ceci explique donc cela !

1°) La 1ère partie de code (de Private Sub Worksheet_Change(ByVal Target As Range) à End Sub) fonctionne parfaitement. Tant que la colonne N n’est pas atteinte, il ne se passe rien.
En revanche, la macro Vérification_Complétude fonctionne très bien, mais ne se lance pas automatiquement.
Pourriez-vous me dire comment faire pour que, quand l’utilisateur met « Oui » dans la colonne AE (colonne 31), la macro se déclenche ? Je sais qu’on ne peut pas mettre plusieurs Private Sub Worksheet_Change, mais je ne sais pas comment faire autrement.

2°) Dans la même macro, j’ai une msgbox qui indique les colonnes qui doivent être imprimées. Comme il y en a beaucoup, je voudrais que l’utilisateur sache quelles colonnes sont vides. Je complète ma msgbox comme ceci : "Or, vous n'avez pas rempli la/les colonne(s) :". Mais, je ne sais pas comment dire « si telle case est vide, mets le titre de la colonne ». J’ai essayé avec des « if », à l’intérieur de la msgbox, mais ça ne fonctionne pas. Cela peut se répéter jusqu’à 13 fois, en fonction du non remplissage des colonnes.
Là aussi, comment pourrais-je faire ?

3°) Enfin, je voudrais que la macro d’édition de courrier se lance à chaque fin de ligne, quand l’utilisateur a fini de remplir les informations. Pour l’instant, quelle que soit la ligne, seules les données de la ligne 4 sont imprimées. Forcément, puisque c’est ce que je lui demande ! Mais, je ne sais pas comment faire autrement ? Il faut aussi que je modifie la macro VérificationComplétude et la Private Sub Worksheet_Change(ByVal Target As Range). Mais, comment faire ? Peut-être une boucle ?


Mon Code est le suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 14 Then Exit Sub
If [N4] <> "" And [O4] <> "" Then
Dim Rep As Integer
Rep = MsgBox("Vous avez saisi le n° d'identifiant suivant" & vbLf & [N4] & "." & vbLf & "Cela a généré la clé" & vbLf & [O4] & "." & vbLf & "Confirmez-vous ces informations ?", vbOKCancel + vbQuestion)
If Rep = vbOK Then Exit Sub
If Rep = vbCancel Then Range("N4").ClearContents
End If

End Sub

Sub VérificationComplétude()
If [AE4] = “Oui” And [A4] = "" Or [C4] = "" Or [D4] = "" Or [E4] = "" Or [G4] = "" Or [H4] = "" Or [J4] = "" Or [K4] = "" Or [P4] = "" Or [R4] = "" Or [Y4] = "" Or [Z4] = "" Or [AA4] = "" Then
Dim Rep As Integer
Rep = MsgBox("Attention, " & [AA4] & " !" & vbLf & "Pour que le courrier soit imprimé, il faut que les colonnes suivantes soient renseignées : " & vbLf & "- 1°) " & [$A$3] & "," & vbLf & "- 2°) " & [$C$3] & "," & vbLf & "- 3°) " & [$D$3] & "," & vbLf & "- 4°) " & [$E$3] & "," & vbLf & "- 5°) " & [$G$3] & "," & vbLf & "- 6°) " & [$H$3] & "," & vbLf & "- 7°) " & [$J$3] & "," & vbLf & "- 8°) " & [$K$3] & "," & vbLf & "- 9°) " & [$P$3] & "," & vbLf & "- 10°) " & [$Q$3] & "," & vbLf & "- 11°) " & [Y3] & "," & vbLf & "- 12°) " & [Z3] & "," & vbLf & "- 13°) Départ de l'impression." & vbLf & "Or, vous n'avez pas rempli la/les colonne(s) :", vbOKOnly + vbExclamation)
Else
DemandeInstruction
End If
End Sub

‘Lancement de la macro
Sub LancementMacro()
If [R4] = "Macro1" Then Macro1
If [R4] = "Macro2" Then Macro2

End Sub

Pour chacune de ces macros, j’ai répété le même code. Exemple :
Sub Macro1()
'Déclaration des variables
Dim wApp As Word.Application
Dim oDoc As Word.Document
'Affectation des données aux variables
Set wApp = New Word.Application
Set oDoc = wApp.Documents.Add("G:\...\Macro1.doc")
'Affectation des données Excel aux signets
oDoc.Bookmarks("Type1").Range.Text = ActiveWorkbook.ActiveSheet.Range("C4")
oDoc.Bookmarks("Localisation").Range.Text = ActiveWorkbook.ActiveSheet.Range("D4")
oDoc.Bookmarks("Adresse").Range.Text = ActiveWorkbook.ActiveSheet.Range("E4")
oDoc.Bookmarks("Complément").Range.Text = ActiveWorkbook.ActiveSheet.Range("F4")
oDoc.Bookmarks("CP").Range.Text = ActiveWorkbook.ActiveSheet.Range("G4")
oDoc.Bookmarks("Ville").Range.Text = ActiveWorkbook.ActiveSheet.Range("H4")
oDoc.Bookmarks("Traité_par").Range.Text = ActiveWorkbook.ActiveSheet.Range("Z4")
oDoc.Bookmarks("Type2").Range.Text = ActiveWorkbook.ActiveSheet.Range("P4")
oDoc.Bookmarks("Prénom").Range.Text = ActiveWorkbook.ActiveSheet.Range("K4")
oDoc.Bookmarks("Nom").Range.Text = ActiveWorkbook.ActiveSheet.Range("J4")
oDoc.Bookmarks("Date_étab").Range.Text = ActiveWorkbook.ActiveSheet.Range("A4")
oDoc.Bookmarks("Interv").Range.Text = ActiveWorkbook.ActiveSheet.Range("AA4")
oDoc.Bookmarks("Ref").Range.Text = ActiveWorkbook.ActiveSheet.Range("Y4")
'Rendre Word Visible
wApp.Visible = True
'Impression du document
oDoc.PrintOut
' Fermeture du document
wApp.ActiveDocument.Close (False)
' Fermeture de Word
wApp.Quit
End Sub

Je vous remercie beaucoup pour l’aide que vous pourrez m’apporter, car je patauge vraiment !! Je préfèrerais ne pas vous transmettre le fichier, car il contient des données confidentielles. Mais, si besoin, je vous le transfèrerai en les enlevant.
Je m’excuse par avance si les questions que je soulève ont déjà été traitées.

Bonne soirée.
 

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Bonsoir benadry et bienvenu sur XLD

Je préfèrerais ne pas vous transmettre le fichier, car il contient des données confidentielles. Mais, si besoin, je vous le transfèrerai en les enlevant.

Je pense que sans le fichier ça va être compliqué.

Soit tu recrées un fichier simplifié, soit tu anonymises ton fichier.

Si ce sont des noms il suffit de mettre Nom 1, Nom 2, Nom 3 etc.... téléphone : 06 01 01 01 01, 06 02 02 02 02 etc...

Le mieux est quand même de mettre des valeurs a peu près cohérentes.

A te relire

Martial
 

benadry

XLDnaute Occasionnel
Re : Problèmes macro édition de courriers Excel-Word

Bonjour,

Je joins le fichier que je viens d'anonymiser.

C'est vrai que ce sera beaucoup plus facile !

Merci d'avance pour votre aide.

Bonne journée.
 

Pièces jointes

  • BDO_2 - Copie.zip
    286.2 KB · Affichages: 38

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Bonjour benadry,

On va y aller petit à petit et faire point par point :
1°) La 1ère partie de code (de Private Sub Worksheet_Change(ByVal Target As Range) à End Sub) fonctionne parfaitement. Tant que la colonne N n’est pas atteinte, il ne se passe rien.
En revanche, la macro Vérification_Complétude fonctionne très bien, mais ne se lance pas automatiquement.
Pourriez-vous me dire comment faire pour que, quand l’utilisateur met « Oui » dans la colonne AE (colonne 31), la macro se déclenche ? Je sais qu’on ne peut pas mettre plusieurs Private Sub Worksheet_Change, mais je ne sais pas comment faire autrement.

Private Sub Worksheet_Change(ByVal Target As Range) fonctionne --> OK

Vérification_Complétude ne se lance pas automatiquement. A quelle(s) condition(s) doit elle se lancer ? La colonne AE correspond à l'impression (si je ne me trompe) donc il y a un x et non "OUI"

Merci de nous fournir plus de précisions.

A te relire

Martial
 

benadry

XLDnaute Occasionnel
Re : Problèmes macro édition de courriers Excel-Word

Bonjour Yaloo,

Vérification_Complétude doit se lancer quand la colonne AE est remplie, en l'occurence avec un "X". J'ai essayé tour à tour avant de poster avec un "X" ou avec un "oui" (par le biais d'une liste déroulante) et ça n'a pas marché. En fait, il faut que quand l'utilisateur coche (ou met oui) dans la colonne AE, la macro vérifie que toutes les colonnes obligatoires ont bien été remplies avant de lancer l'impression. Tout ça pour éviter de lancer une impression avec des champs vides.
J'espère avoir été plus clair. Je sais ce que je veux faire, mais ce n'est pas toujours facile de l'expliquer clairement !

Merci d'avance.
 

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Re,

Vois cette macro et dis moi :


VB:
Dim Ligne&
'Message d'information identifiant
Private Sub Worksheet_Change(ByVal Target As Range)
Ligne = Target.Row
If Target.Column = 14 Then
  If [N4] <> "" And [O4] <> "" Then
    Dim Rep As Integer
    Rep = MsgBox("Vous avez saisi le n° d'identifiant suivant" & vbLf & Cells(Ligne, 14) & _
        "." & vbLf & "Cela a généré la clé" & vbLf & Cells(Ligne, 16) & "." & _
        vbLf & "Confirmez-vous ces informations ?", vbOKCancel + vbQuestion)
    If Rep = vbOK Then Exit Sub
    If Rep = vbCancel Then Range("N4").ClearContents
  End If
End If
If Target.Column = 31 And Target = "x" Then VérificationComplétude
End Sub

Il faut bien déclarer la variable Ligne avant la procédure Change

Je regarde pour le reste.

A+

Edit : Modification de la macro, afin de mettre correctement les données dans ton message, car il ne s'agira pas toujours de la ligne 4
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Re,

Pour la vérification des colonnes non remplies (modification de VérificationComplétude):

VB:
Sub VérificationComplétude()
Dim Ar(), T$, j&, Mes$, Rep&
  If Cells(Ligne, 31) <> "" Then
    'Définit les colonnes à vérifier
    Ar = Array("A", "C", "D", "E", "G", "H", "J", "K", "P", "R", "Y", "Z", "AA")
    'Pour toutes les colonnes ci-dessus (13 colonnes de 0 à 12)
        For i = 0 To 12
        'Vérif valeur
        If Cells(Ligne, Ar(i)) = "" Then
        'Si pas de valeur alors on inscrit la colonne dans un texte appelé T
        T = T & " ; " & Ar(i)
        End If
        Next
'Définit le message, à la fin du texte on mets T mais sans les 2 premièrs caractères "; "
    Mes = "Attention, " & [AA4] & " !" & vbLf & "Pour que le courrier soit imprimé, " _
      & "il faut que les colonnes suivantes soient renseignées : " & vbLf & "- 1°) " _
      & [$A$3] & "," & vbLf & "- 2°) " & [$C$3] & "," & vbLf & "- 3°) " & [$D$3] _
      & "," & vbLf & "- 4°) " & [$E$3] & "," & vbLf & "- 5°) " & [$G$3] & "," & vbLf _
      & "- 6°) " & [$H$3] & "," & vbLf & "- 7°) " & [$J$3] & "," & vbLf & "- 8°) " _
      & [$K$3] & "," & vbLf & "- 9°) " & [$P$3] & "," & vbLf & "- 10°) " & [$Q$3] & "," _
      & vbLf & "- 11°) " & [Y3] & "," & vbLf & "- 12°) " & [Z3] & "," & vbLf _
      & "- 13°) Départ de l'impression." & vbLf & "Or, vous n'avez pas rempli " _
      & "la/les colonne(s) :" & Right(T, Len(T) - 2)
    'On informe l'utilisateur
    Rep = MsgBox(Mes, vbOKOnly + vbExclamation)
  Else
    DemandeInstruction
  End If

End Sub

A+
 

benadry

XLDnaute Occasionnel
Re : Problèmes macro édition de courriers Excel-Word

Re-Bonsoir Yaloo,

Je réponds à tes deux messages d'un seul coup :
1°) Pour le 1er message :
- VérificationComplétude s'exécute effectivement quand je mets un "x" dans la colonne AE. Impeccable !
- Message d'information identifiant fonctionne également très bien sur la 1ère ligne. Quand j'essaie sur la 2e ligne (dernière ligne sur laquelle il y a des données en fait) et que je confirme les informations par "OK", tout va bien. En revanche, quand je fais "Annuler", le message d'information se répète indéfiniment en me mettant simplement le texte de la msgbox, sans les données, jusqu'à ce que je clique sur "OK".
Je me suis permis de remplacer "If Rep = vbCancel Then Range("N4").ClearContents" par "If Rep = vbCancel Then Cells(Ligne, 14).ClearContents", sinon Excel m'effaçait toujours la cellule N4.


2°) Ca marche très bien, tant que toutes les colonnes ne sont pas remplies, sauf qu'au lieu de mettre le nom des colonnes (qui se trouvent en ligne 3 du tableau), il me donne les lettres des colonnes (exemple : au lieu de "référence", il met "Y").
En revanche, si toutes les colonnes sont remplies, il bugge ("Erreur d'exécution '5' : Argument ou appel de procédure incorrect) et quand je débogue, il met en jaune tout le message suivant "Mes = "Attention, " & [AA4] & " !" & vbLf & "Pour que le courrier soit imprimé, " _
& "il faut que les colonnes suivantes soient renseignées : " & vbLf & "- 1°) " _
& [$A$3] & "," & vbLf & "- 2°) " & [$C$3] & "," & vbLf & "- 3°) " & [$D$3] _
& "," & vbLf & "- 4°) " & [$E$3] & "," & vbLf & "- 5°) " & [$G$3] & "," & vbLf _
& "- 6°) " & [$H$3] & "," & vbLf & "- 7°) " & [$J$3] & "," & vbLf & "- 8°) " _
& [$K$3] & "," & vbLf & "- 9°) " & [$P$3] & "," & vbLf & "- 10°) " & [$Q$3] & "," _
& vbLf & "- 11°) " & [Y3] & "," & vbLf & "- 12°) " & [Z3] & "," & vbLf _
& "- 13°) Départ de l'impression." & vbLf & "Or, vous n'avez pas rempli " _
& "la/les colonne(s) :" & Right(T, Len(T) - 2)"


Merci en tout cas pour ton aide. Ca avance déjà pas mal !!
 

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Re,

Oui, j'ai fauté ;) j'ai testé quand c'était vide mais pas quand tout était OK, ça doit être corrigé dans le version ci-jointe.

J'avais avancé également sur les lignes à prendre pour tes courriers, donc à tester aussi.

D'un autre coté, dans la procédure Change, je vais mettre des lignes correspondant aux colonnes J et K de façon à mettre directement en majuscule et en nom propre.

Je te mets déjà le fichier pour les tests de cellules vides et impression Word.

A+
 

Pièces jointes

  • BDO_2 - Copie.xlsm
    344.3 KB · Affichages: 49

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Voila le fichier avec modification automatique en MAJUSCULE pour les noms et en NOM PROPRE pour les prénoms.

Ca évite de se faire rappeler à l'ordre dès que l'on n'a pas rentré la bonne casse.

A+
 

Pièces jointes

  • BDO_2 - V1.xlsm
    342.8 KB · Affichages: 59

benadry

XLDnaute Occasionnel
Re : Problèmes macro édition de courriers Excel-Word

Re-,

1°) Je viens d'essayer les macros d'impression des différents courriers en cochant la case AE. Il me lance une "erreur d'exécution 1004 : erreur définie par l'application et par l'objet" pour chacun des signets des macros.

2°) J'ai toujours le même problème avec : "Quand j'essaie sur la 2e ligne (dernière ligne sur laquelle il y a des données en fait) et que je confirme les informations par "OK", tout va bien. En revanche, quand je fais "Annuler", le message d'information se répète indéfiniment en me mettant simplement le texte de la msgbox, sans les données, jusqu'à ce que je clique sur "OK".
Je me suis permis de remplacer "If Rep = vbCancel Then Range("N4").ClearContents" par "If Rep = vbCancel Then Cells(Ligne, 14).ClearContents", sinon Excel m'effaçait toujours la cellule N4".

Merci en tout cas. C'est très sympa.
 

Yaloo

XLDnaute Barbatruc
Re : Problèmes macro édition de courriers Excel-Word

Je ne peux pas tester le premier point, car il faudrait que tu mettes un fichier Word correspondant. Peut être anonymisée.

Chez moi, le second point fonctionne correctement. Peux-tu décrire exactement ce que tu fais ? Dis moi à quel niveau ça plante.

En effet, je n'avais pas fait gaffe à la suppression de cellule. :(


A+
 

Discussions similaires

Réponses
1
Affichages
206
Réponses
2
Affichages
129