IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Vba envoie contenu d'une cellule dans une lettre word [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en gestion de la relation client (GRC)
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en gestion de la relation client (GRC)
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut Vba envoie contenu d'une cellule dans une lettre word
    Bonjour à tous je suis débutant en vba et j'essaie d'écrire un code qui me permet à partir d'une base de donnée excel d'ouvrir plusieurs lettre Word identique avec seul un numéro de dossier différent dans chaque lettre ce numéro de dossier se trouve ex. ds la colonne B. voici le code : (que j'ai fait avec les aides que j'ai trouvées)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Lettre() 
     
    Dim i As Integer, j As Byte 
     
    j = Range("R1") ' R1 contient le nombre de cellule non vide ds la Cells (i, 2) 
     
    For i = 2 To j ' on dit à quelle numéro i doit s'arrêter 
     
    Set WordApp = CreateObject("word.application") 'ouvre une session Word 
    Set WordDoc = WordApp.Documents.Open("C:\Desktop\Document\Lettre1.doc", ReadOnly:=True) 'ouvre le document Word 
    WordApp.Visible = False 'Word est masqué pendant l'opération 
     
    'les signets du document Word sont nommés Signet1 , Signet2 , Signet3 
    WordDoc.Bookmarks("Signet" & 2).Range.Text = Cells(i, 2) 'envoie "Bi" vers signet 1 
     
    WordApp.Visible = True 'affiche le document Word 
     
    Next i 'on dit de passer au prochain i 
     
    End Sub
    donc ce code que j'ai écrit marche très bien le doc "Lettre 1" qui est en Français s'ouvre 10 x avec 10 numéro de dossier différent (sachant qu'il y a 10 n° de dossier introduit dans la colonne B),

    Voici mon problème, j'habite en Belgique donc j'ai des clients Hollandais et Français, donc j'ai un 2e doc "Lettre2" qui est en Hollandais, dans ma base de donnée la colone C indique "NL" ou "FR" devant le numéro de dossier de la colonne B, j'aimerais que les n°dossiers FR soit envoyé vers "Lettre1" et les N°dossier NL soit envoyé vers Lettre2, avec le même principe que le code ci-dessus, un génie ici a-t-il une idée des codes que je dois ajouter?

    UN grand merci d'avance pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonjour pouya001,

    Tout d'abord, place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim DocAOuvrir as string
    en début de module.

    Ensuite, remplace cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordDoc = WordApp.Documents.Open("C:\Desktop\Document\Lettre1.doc", ReadOnly:=True) 'ouvre le document Word
    Par la structure conditionelle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if range("C"&i).value = "FR" then
    DocAOuvrir = "Lettre1"
    else 
    DocAOuvrir = "Lettre2"
    end if
    Set WordDoc = WordApp.Documents.Open("C:\Desktop\Document\"& DocAOuvrir, ReadOnly:=True) 'ouvre le document Word
    en assumant que tes deux lettres se trouvent dans le même répertoire, sinon, au lieu de mettre uniquement "Lettre1" ou "Lettre2", met le nom du fichier avec le chemin correspondant.

    Cdt

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en gestion de la relation client (GRC)
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en gestion de la relation client (GRC)
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut
    Merci Guiiand ! c'est exactement ça

    un problème de résolu ce site est génial merci.

    La j'ai simplifié le problème et j'ai résolu la 1ère étape il me reste encore 4/5 problèmes avant d'arriver à ce que je veux faire.

    à bientôt alors. Voici mon le code pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub Lettre()
     
    Dim DocAOuvrir As String, i As Integer, j As Byte  ' on définit le i et le j
     
       j = Range("R1") ' R1 contient le nombre de cellule non-vide dans la col B
     
       For i = 2 To j ' on dit à quelle numéro i doit s'arrêter
     
     
     
        If Range("C" & i).Value = "FR" Then
        DocAOuvrir = "Lettre1"
        Else
        DocAOuvrir = "Lettre2"
        End If
     
        Set WordApp = CreateObject("word.application")    'ouvre une session Word
        Set WordDoc = WordApp.Documents.Open("C:\Users\Documents\" & DocAOuvrir, ReadOnly:=True)   'ouvre le document Word
        WordApp.Visible = False    'Word est masqué pendant l'opération
     
     
            'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
            WordDoc.Bookmarks("Signet" & 2).Range.Text = Cells(i, 2) 'envoie "B2" vers signet 1
     
     
        WordApp.Visible = True    'affiche le document Word
     
     
     
       Next i 'on dit pas passer au prochain i
     
     
    End Sub
    Voilà la seconde partie de mon problème

    j'aimerais qu'avant qu'il exécute cette macro et qu'il génère les lettres FR/NL (Lettre1/Lettre2) que Guiiand m'as aidé à faire ce-dessus, qu'il fasse 2 autres filtres: dans la colonne D se trouve les dates d'inscriptions et dans la colonne E se trouve "M" ou " " .

    j'aimerais que la macro me demande une date: j'introduis par exemple : 04/03/2013 et qu'il lance cette macro (voir ci-dessus) que pour les dossier dont la colonne D contient la date 04/03/2013 dont la colonne E contient "M".

    En résumé j'aimerais générer les lettres pour les dossier d'une date d'inscription précise et seulement pour les dossier "M" ensuite qu'il distingue les FR et NL ( code ci-dessus).

    Merci d'avance pour votre aide en VBA !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Pour coder en VBA, et dans tout autre langage, il y a 2 structures indispensables à maitriser. D'un côté les boucles (For … Next), que tu utilises déjà, et de l'autre les conditions (If … end if) dont je t'ai montré un exemple dans ma première réponse.
    Si tu veux progresser, je t'invite à parcourir les tutos qui traitent ces sujets sur le forum, sinon tu seras rapidement bloqué.
    En ce qui concerne ton problème, voici qui pourrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub Lettre()
     
    Dim DocAOuvrir As String, i As Integer, j As Byte  ' on définit le i et le j
    Dim DateSaisie as date
    DateSaisie = format(inputbox("Saisie de la date à traiter", "Format jour/mois/année"),"mm/dd/yyyy")
    j = Range("R1") ' R1 contient le nombre de cellule non-vide dans la col B
    For i = 2 To j ' on dit à quelle numéro i doit s'arrêter
        If Range("D" & i) =DateSaisie  & and Range("E" & i) = "M" then
            If Range("C" & i).Value = "FR" Then
                DocAOuvrir = "Lettre1"
            Else
                DocAOuvrir = "Lettre2"
            End If
            Set WordApp = CreateObject("word.application")    'ouvre une session Word
            Set WordDoc = WordApp.Documents.Open("C:\Users\Documents\" & DocAOuvrir, ReadOnly:=True)   'ouvre le document Word
            WordApp.Visible = False    'Word est masqué pendant l'opération
            'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
            WordDoc.Bookmarks("Signet" & 2).Range.Text = Cells(i, 2) 'envoie "B2" vers signet 1
            WordApp.Visible = True    'affiche le document Word
        End if
    Next i 'on dit pas passer au prochain i
    End Sub
    Cdt Guiiand

    PS: Pas de message perso s'il te plait

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant en gestion de la relation client (GRC)
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en gestion de la relation client (GRC)
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut
    Merci pour ta réponse, effectivement j'apprends les IF / THEN je comprends comment ça marche petit à petit, par exemple tous ce que tu m'écris est très claire, seulement je ne sais pas encore dans quel ordre les mettre etc ça va venir.

    En ce qui concerne ta réponse ici, ça marche que pour les "DateSaisie" entre 0 et 95 càd pour excel entre 01/01/1900 et 04/04/1900 est ce que tu comprends pq ?

    donc si dans ma colonne j'ai une date entre 01/01/1900 et 04/04/1900 (ou un chiffre entre 0 et 95) et je la saisis (sous format chiffre ou date) ça marche, pour une date au dessus (ce qui corresponds à mes donnée :-D ) ça ne marche pas ?


    J'ai mis DateSaisie en String et enlevé le format date du inputbox, la ça marche plus ou moins, pour autant que j'introduise 3/03/2012 et non '03/03/2012' par ex.

    j'ai aussi du enlevé le petit "&" qui suit "=DateSaisie" dans le code suivant pcq ça bloquait c'est juste?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("D" & i) =DateSaisie  & and Range("E" & i) = "M" then
    EN TOUT CAS MERCI

  6. #6
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Re-bonjour,

    effectivement ce "&" n'a rien a faire la

    pour ton problème de date, c est une erreur de ma part, à la ligne 5, remplace

    date au format US

    par

    date au format FR

    la force de l'habitude désole.

    Bonne journée

  7. #7
    Membre du Club
    Homme Profil pro
    Consultant en gestion de la relation client (GRC)
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en gestion de la relation client (GRC)
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut
    Magnifique tout ça ! merci

    bon maintenant que j'ai compris le principe jvais rajouter quelques "and" en plus à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("D" & i) =DateSaisie  and Range("E" & i) = "M" then
    pour ajouter une ou deux autres filtres pcq je vais appliquer cette macro à une base de données de plus de 3000 n° de dossier en éspèrant que cela marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 17h01
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Concaténer le contenu de plusieurs cellules dans une cellule
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/03/2008, 15h15
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo