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 :

Userform pour piloter Word et excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut Userform pour piloter Word et excel
    Bonjour à tous,

    Voilà ca fait plusieurs semaines que je fouille sur la toile pour trouver la solution et ce site m'a bcp aidé alors je me décide à poster.

    Niveau VBA : déb amateur dans le cadre d'un stage
    Programme : sous VBA de excel 2007 mais destiné à fonctionner sur une machine avec Excel 2003.
    Objectif : créer un userform avec 5 textbox et 20 checkbox, chaque checkbox est rattaché à 2 fichiers (1 word et 1 excel) qui ne sont pas les m^me en fonction de la checkbox. Quand on clic sur 1 checkbox le fichier word s'ouvre, les 5 textbox s'incorporent au niveau de 5 signets respectif, la feuille s'imprime et le fichier se ferme sans sauvegarder. Idem avec le fichier excel.

    Voici mon code :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub CommandButton1_Click()
     
     Range("A1") = TextBox1
     Range("A2") = TextBox2
     Range("A3") = TextBox3
     Range("A4") = TextBox4
     Range("A5") = TextBox5
     
    If CheckBox8 = True Then
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim i As Byte
       Set WordApp = CreateObject("word.application")    'ouvre une session Word
       Set WordDoc = WordApp.Documents.Open("C:\il est trop bien ce site.doc") 'ouvre le document Word
        WordApp.Visible = False    'Word est masqué pendant l'opération (plus rapide)
     
        For i = 1 To 5
            'les signets du document Word sont nommés Signet1 à Signet5
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%      
    Essai raté pour avoir les caractères gras au signet
    'ActiveDocument.Bookmarks("Signet" & i).Range.Select
    'With Selection
        '.Text = "Mon texte"
       ' .Font.Bold = True
    'End With
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
         WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)
         Next i
         WordApp.Visible = True    'affiche le document Word
     
        'WordDoc.PrintOut 'Pour imprimer le doc obtenu
        'WordDoc.Close True 'ferme le document word en sauvegardant les données
        'WordApp.Quit 'ferme la session Word
     
    End If
     
     MsgBox "fini"
    End Sub
     
    Private Sub TextBox4_Change() 'facilite la saisie de la date ds le textbox
        Dim Valeur As Byte
        TextBox4.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
        Valeur = Len(TextBox4)
        If Valeur = 2 Or Valeur = 5 Then TextBox4 = TextBox4 & "/"
     
    End Sub
    Comment résoudre ces problèmes :
    1/ appliquer ce code aux 20 checkbox (variables communes ?)
    2/ avoir la copie du texte au signet en caractère gras (copier/colle avec mise en forme ?)
    3/avoir 2 boutons d'action (1 pour imprimer toutes les feuilles word et l'autre imprimer toutes les feuiles excel)

    Merci à tous les challengers,
    Forumement votre,
    Ipalgo

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    pour le question 1, je ferai ceci

    une procedure commune ou tu envoie la référence de l'objet

    et dans chage événement, tu lance la procédure avec l'objet en référence

    donc, si je dis pas de bétise, cela devrais ressembler à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    sub ProcedureCommune(byref obj as object)
        Dim Valeur As Byte
        obj.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
        Valeur = Len(obj.value)
        If Valeur = 2 Or Valeur = 5 Then obj.value = obj.value & "/"
    end sub
     
    Private Sub TextBox4_Change() 'facilite la saisie de la date ds le textbox
        ProcedureCommune TextBox4    
    End Sub
    pour la deux, je ne saisi pas bien ce que tu veux

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    En fait dans le code que j'ai déjà, la valeur de chaque textbox est copié dans une case excel et après je copie le texte des cases excel dans le fichier word l'endroit des signet existants (5 en tout).
    Le truc c'est qu'au moment de coller dans word, le texte prend la mise en forme du texte écrit précédemment or moi je voudrai qu'il s'écrive en gras par exemple.
    ce que j'ai essayé :
    -modifier la police de la textbox
    -modifier la police des cases excel
    -modifier la police à l'emplacement du signet avant d'enregistrer le doc word

    impossible de résoudre.

    Y aurait-il une option dans word qui permettrait de décider la mise en forme voulu à un endroit précis ?

    Je test ta première réponse. Merci !


    Edit: en fait mes textbox sont ok, je voulais juste pouvoir récupérer leur texte et les copier dans les fichiers qui sont en lien avec les checkbox.
    Exemple :
    textbox1: ESSAI
    textbox2: pour test
    etc jusqu'au 5eme texbox

    Chexbox1: coché
    Chexbox8: coché
    Les autres décochés

    Chexbox1 associé à : fichierword11 et fichierexcel11
    Chexbox8 associé à : fichierword88 et fichierexcel88

    Insérer dans ces 4 fichiers qui contiennent tous 5signets le texte saisie dans les 5 texbox.

    J'y arrive pour 1 chexbox mais dès que j'en coche 2 les problèmes arrivent.

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,
    J'y arrive pour 1 chexbox mais dès que j'en coche 2 les problèmes arrivent.
    quel problèmes?

    un petit bout de code pour que l'on y voie plus clair?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    Oui, tout de suite :

    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
    35
    36
    37
    38
    39
    If CheckBox1 = True Then
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        Dim i As Byte
        Set WordApp = CreateObject("word.application") 'ouvre une session Word
        Set WordDoc = WordApp.Documents.Open("C:\cible\doc_Word_du_checkbox1.doc") 'ouvre le document Word
        WordApp.Visible = False   'Word est masqué pendant l'opération
    
        For i = 1 To 5
               'les signets du document Word sont nommés Signet1 à Signet5
        ActiveDocument.Bookmarks("Signet" & i).Range.Select
        WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1) 'copie des cellules A1 à A5 (c'est à dire le texte des textbox) à l'emplacement des signets word
        Next i
    
        WordApp.Visible = True    'affiche le document Word
        'WordDoc.Close False 'ferme le document word sans sauvegarder
        'WordApp.Quit 'ferme la session Word
    End If
    
    If CheckBox2 = True Then
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        Dim i As Byte
        Set WordApp = CreateObject("word.application")
        Set WordDoc = WordApp.Documents.Open("C:\cible\doc_Word_du_checkbox2.doc")
        WordApp.Visible = False   'Word est masqué pendant l'opération
    
        For i = 1 To 5
        ActiveDocument.Bookmarks("Signet" & i).Range.Select
        WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i, 1)
        Next i
    
        WordApp.Visible = True    'affiche le document Word
        'WordDoc.Close False 'ferme le document word sans sauvegarder
        'WordApp.Quit 'ferme la session Word
    End If
    
    Et ainsi de suite avec les autres checkbox
    message d'erreur qui apparait : "Erreur de compilation : déclaration existante dans la portée en cours"
    et cette ligne est surlignée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim WordApp As Word.Application

Discussions similaires

  1. Piloter Word depuis Excel: retenir le range de la sélection actuelle
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/05/2015, 19h06
  2. [WD-2013] Piloter word depuis excel
    Par llyglad dans le forum Word
    Réponses: 1
    Dernier message: 16/09/2013, 02h22
  3. [PC portable] pour photoshop, word et excel
    Par Touffe54 dans le forum Ordinateurs
    Réponses: 5
    Dernier message: 12/05/2011, 16h52
  4. Réponses: 9
    Dernier message: 10/07/2008, 22h12
  5. [VB.NET] problème pour piloter une appli. excel 2003
    Par Pynuch dans le forum Windows Forms
    Réponses: 13
    Dernier message: 16/11/2005, 13h02

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