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 Excel}Probleme de code sur l'export Excel à Word


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut {VBA Excel}Probleme de code sur l'export Excel à Word
    Ce code me pertmet lors de la modification de ma colonne Q d'appeler ma macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = 17 Then 'Si le changement se fait dans la colonne 17 soit "Q"
            Call compter
        End If
    End Sub


    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
    Sub compter()
    Dim totlig As Long, poid As Double, i As Long
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
    totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
    poid = 0# ' Initialise le poid calculé
    For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
    If IsNumeric(Range("Q" & i).Value) Then
    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
    End If
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
    MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i)
    .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
    Set WordApp = CreateObject("Word.Application") ' ouvre une session word
    Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\S8746037\Bureau\journaldebord.doc") ' ouvre le document word : journaldebord.doc
    WordApp.Visible = False  ' word est masqué pendant l'opération
    ' les signets sont les suivants : quantite
    WordDoc.Bookmarks("quantite").Range.Text = Cells(i, 17)   ' copie la celluleWordApp.Visible = True   ' affiche le document word
    poid = 0# ' remise à zero des calculs
    Else
    .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
    End If
    Next i
    End With
    End Sub

    le probleme vient de l'export
    le membre de la collection requis n'existe pas

    un pti coup de main serait la bienvenue

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, pour insérer du texte sur un signet, tu dois d'abord aller le chercher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        With Wrd.Selection
            .Goto What:=wdGoToBookmark, Name:="quantite"
        End With
        Wrd.Selection.typetext Text:=Cells(i,17).value
    Où Wrd est l'instance de l'application et non celle du document
    A+

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    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
    Sub compter()
      Dim totlig As Long, poid As Double, i As Long
      With Sheets("Saisie") ' Travaille sur la feuille Saisie
        totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
        poid = 0# ' Initialise le poid calculé
        For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
          If IsNumeric(Range("Q" & i).Value) Then
            poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
          End If
          If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
            MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i).Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
     
            Set WordApp = CreateObject("Word.Application") ' ouvre une session word
            Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\S8746037\Bureau\thomas.doc") ' ouvre le document word 
            WordApp.Visible = False  ' word est masqué pendant l'opération
     
            With WordApp.Selection
              .Goto What:=wordGoToBookmark, Name:="quantite"
            End With
            WordApp.Selection.typetext Text:=Cells(i, 17).Value
     
            WordApp.Visible = True   ' affiche le document word
            poid = 0# ' remise à zero des calculs
          Else
            .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
          End If
        Next i
      End With
    End Sub

    maintenant ca marque objet requis comme erreur

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Indente ton code, ainsi il est illisible.
    Pour corriger, tu as le bouton Editer en bas de ton message.
    A+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Remplace Wrd par l'instance de word (WordApp) je n'ai pas lu ton code, seulement la ligne en rouge, parce que je ne lis pas les codes s'ils ne sont pas lisible
    A+ quand même mais indente ton code

  6. #6
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    desoler j'edit

    j'ai une autre erreur maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Goto What:=wordGoToBookmarkName:="quantite"
    ca me dit "ce signet n'existe pas"
    ce qui est en magenta qd j'ai le curseur dessus ca me met
    wordGoToBookmark=vide

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Regarde mon code, il y a une différence avec le tien
    Pièce jointe 15413

  8. #8
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With WordApp.Selection
            .Goto What:=WdGoToBookmark, Name:="quantite"
        End With
        WordApp.Selection.typetext Text:=Cells(i, 17).Value

    voila ce que j'ai mis
    le code precedent je l'avais modifié desole de ne pas l'avoir signalé
    mais j'ai toujours la meme erreur


    j'ai fait un debogge pas a pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.Selection.typetext Text:=Cells(i, 17).Value
    j'ai une incompabilité de type ici

    j'ai modifie comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.Selection.typetext Text:=Cells(i, 17).Text
    et ca passe

    je laisse comme j'ai fait?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, si ça fonctionne... Text est valide. Mais ton constat est intéressant. J'aurais pensé à tester .formula, mais pas un instant il ne me serait venu à l'idée d'utiliser .text pour la cellule. Comme tu vois, on en apprend tous les jours.
    Et donc, merci Thomas

  10. #10
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    je ne sais pas pourquoi mais je doute fort t'apprendre quoi que ce soit

    au sinon j'ai regarder sur l'aide en ligne pour l'histoire de mon signet et j'ai rien trouver
    qui pourrait m'aider a comprendre mon erreur

    tu pourrais m'aiguiller stp

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par tu
    je ne sais pas pourquoi mais je doute fort t'apprendre quoi que ce soit
    Ce en quoi tu ferais une profonde erreur. Ma connaissance, je la dois essentiellement à (la touche est devenue transparente ) à la et à la recherche sur le forum
    Pour le pb qui te préoccupe, mets-nous ta macro en entier, on y verra plus clair. Bon tu es sûr d'avoir le signet "quantite" dans ton doc word ? (pas "quantité" ou autre chose ) ?
    A+

  12. #12
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    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
    48
    Sub compter()
     
    Dim totlig As Long, poid As Double, i As Long
     
    With Sheets("Saisie") ' Travaille sur la feuille Saisie
     
        totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
     
     poid = 0# ' Initialise le poid calculé
     
         For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
     
    If IsNumeric(Range("Q" & i).Value) Then
         poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
     
    End If
     
    If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 T
     
    MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i)
         .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
     
    Set WordApp = CreateObject("Word.Application") ' ouvre une session word
     
    Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\S8746037\Bureau\aze.doc") ' ouvre le document word 
     
    WordApp.Visible = False  ' word est masqué pendant l'opération
     
    With WordApp.Selection
            .Goto What:=WdGoToBookmark, Name:="quantite"
        End With
            WordApp.Selection.typetext Text:=Cells(i, 17).Text
     
    WordApp.Visible = True   ' affiche le document word
     
       poid = 0# ' remise à zero des calculs
     
    Else
     
        .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
     
    End If
     
        Next i
     
    End With
     
    End Sub

    voila le code en entier tous ce passe bien sauf pour la recopie

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Heureusement que je t'ai demandé d'indenter ton code... Ainsi il est illisible.
    Fais ça et je regarderai. Prends modèle sur le code qu'on t'a mis. Tu as le bouton Editer sur ton message pour le corriger.

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Comme je suis bien gentil et que j'aimerais passer à autre chose, teste ça
    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
    Sub compter()
    Dim totlig As Long, poid As Double, i As Long
    Dim WordApp As Word.Application
    Dim WordDoc As Document
        Set WordApp = CreateObject("Word.Application") ' ouvre une session word
        Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\S8746037\Bureau\aze.doc") ' ouvre le document word : journaldebord.doc
        DoEvents
        WordApp.Visible = False  ' word est masqué pendant l'opération
        With Sheets("Saisie") ' Travaille sur la feuille Saisie
            totlig = .Range("Q65536").End(xlUp).Row ' Recupere le nombre de ligne
            poid = 0# ' Initialise le poid calculé
            For i = 5 To totlig ' Demarre la boucle à la igne 5, la 1,2,3,4 sont des titres
                If IsNumeric(Range("Q" & i).Value) Then
                    poid = poid + (.Range("Q" & i).Value / 1000) ' additione la valeur poids ramenée en tonnes
                End If
                If poid >= 3000 Then ' test avec la prochaine valeur si ca depasse les 3000 tonnes
                        MsgBox ("Depassement :" & poid & " Kg" & vbCr & "A la ligne " & i)
                        .Range("Q" & i).Interior.ColorIndex = 3 ' je colorie en rouge la cellule
                        With WordApp
                            .Selection.Goto What:=WdGoToBookmark, Name:="quantite"
                        End With
                        WordApp.Selection.typetext Text:=Cells(i, 17).Text
                        WordApp.Visible = True   ' affiche le document word
                        poid = 0# ' remise à zero des calculs
                    Else
                        .Range("Q" & i).Interior.ColorIndex = xlNone ' sinon j'enleve la couleur
                End If
            Next i
        End With
    End Sub
    D'abord tu as shunté les déclarations, ensuite tu travailles dans le Doc sans attendre qu'il soit ouvert (j'ai ajouté DoEvents) et enfin, tu mets cette ouverture dans une boucle ce qui est une aberration
    Tu testes et tu dis
    A+

  15. #15
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    Desolé de t'embeter avec ce programme ouskel
    je peux pas tester car j'ai encore mon réseau qui plante

    des que je peux je teste ton programme de toute facon je vais mettre resolu et je trouverais bien la solution par moi meme

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

Discussions similaires

  1. Appliquer un même code sur plusieurs feuilles Excel
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/04/2009, 10h24
  2. Réponses: 2
    Dernier message: 05/03/2009, 17h43
  3. [MySQL] Headers already sent sur un export excel alors que normalement non.
    Par jgoetzfr dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/11/2007, 11h23
  4. [VBA-E] erreur de code sur copie de cellules
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2007, 23h12
  5. Réponses: 3
    Dernier message: 04/12/2006, 13h41

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