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] Automatiser copier-coller


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut [VBA Excel] Automatiser copier-coller
    Bonjour
    Voila J'ai un tableau excel dont je dois remplir les deux dernieres colonnes avec des données contenues dans un fichier différent (dont j'ai accès et dont le nom se trouve dans chaque ligne) pour chaque ligne.
    J'ai entendu dire qu'avec le langage (que je ne connais pas) Visual Basic, il était possible d'automatiser ce copier-coller, ce qui m'arrangerai bien sachant qu'il y en a plus de 1600...
    Pourriez-vous m'aider ?
    Merci

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    a tu essayé de coder quelques lignes déjà ?
    a tu au moins essayé de le faire manuellement en ayant activé l'enregistreur de macro?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    bonjour patricktoulon

    Alors pour l'instant j'en suis à la lecon 2 "les sélections" .
    J'ai effectivement utilisé l'enregistreur de macro mais je ne suis pas plus loin, je n'ai pas assez de connaissances.
    Je vais poster les opérations que je dois faire en détail...

    Alors dans les colonnes G et H de mon tableau, se trouvent le nom d'un fichier word pour chaque ligne.

    tous ces fichiers se trouvent dans un même dossier.

    Dans chaque fichier word, se trouve un tableau. La ligne qui nous intéresse est malheureusement entre 8 et 10 selon les fichiers.

    Dans cette ligne se trouve tout le temps le mot clé "consignes".

    La ligne est sous la forme:

    Consignes: Criticité

    Description



    Le premier élément "Criticité" va dans la colonne P de notre tableau et "Description" dans la colonne Q.

    As-tu besoin de plus d'info ?

    Pour trouver la bonne ligne, si ca peut aider, il faudrait un programme qui commence à la ligne 8 et qui "regarde" si le mot "Consignes" s'y trouve et sinon il passe à la ligne 9 et ce jusqu'à ce qu'il trouve la bonne ligne.

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Patrick Toulon (que je salue au passage )t'as proposer de faire une macro sur un élément parmis tes 1600 à faire

    en effet Excel propose un outil qui permet de transformer les manipulations manuelle en code VBA.
    certes cet outil n'est pas parfait en autre il ne sait faire ni les conditions ni les boucles, mais il donne une bonne base pour travailler.

    pour t'aider va

    http://bidou.developpez.com/article/VBA/

    une fois que tu auras donné un bout de code plein de gens vont venir t'aider à comprendre même si tu dis :

    Heu ... la deuxième je comprends pas, ni la troisième et la quatrième est complètement obscure ... Etc ...

    a bientôt

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    Je connais cette manip d'enregistrer une macro , grâce au lien précédemment donné
    Merci pour le lien, je vais jeter un coup d'oeil

    Bonjour
    J'ai trouvé du code qui semble corespondre à ce que je cherche du moins pour importer un fichier word vers excel

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    ' ----------------------------------------------------------------
    ' Extraction des données à partir de fichier Word vers Excel
    ' Par : Grand Chaman Excel -- 2013/03/05
    '-----------------------------------------------------------------
    Sub Importation_Donnees_Word()
     
        ' -- Déclaration des variables
        Dim wb As Workbook          'classeur Excel dans lequel on importe les données
        Dim ws As Worksheet         'onglet Excel dans lequel on importe les données
        Dim sChemin As String       'répertoire contenant les fichiers Word
        Dim sNomFichier As String   'nom du fichier Word
        Dim WApp As Object, WDoc As Object, WSel As Object
        Dim i As Integer
     
        ' -- Initialisation des variables
        Set wb = ThisWorkbook
        Set ws = wb.Sheets(1)                       'on sauvegarde dans la 1re feuille
        sChemin = ChoisirRepertoire & "\"          'fonction pour choisir le répertoire contenant les fichier Word
        'sChemin = ThisWorkbook.Path & "\"           'si les fichiers Word se trouvent dans le même répertoire que le fichier Excel
        sNomFichier = Dir(sChemin & "*.doc*")       'pour ouvrir tous les fichiers .doc*. 1er fichier.
     
        Set WApp = CreateObject("Word.Application") 'pour créer un objet Word
        WApp.Visible = True                        'ne pas afficher Word pendant l'exécution
        i = ws.Range("A" & Rows.Count).End(xlUp).Row + 1   '1re ligne où on va écrire les données dans le fichier Excel
     
        Application.ScreenUpdating = False
     
        ' -- Boucle sur les fichiers
        Do While Len(sNomFichier) > 0
     
            Set WDoc = WApp.Documents.Open(sChemin & sNomFichier)   'ouvre le document Word
            Application.StatusBar = "Écriture ligne " & i       'message dans Excel pour voir la progression
     
            ' Nom du fichier
            ws.Cells(i, 1) = sNomFichier
     
            ' No de facture (par la fonction FIND)
            WApp.Selection.HomeKey unit:=6              'Retourne au début du fichier Word
            WApp.Selection.Find.ClearFormatting         'on "vide la mémoire" de la fonction Recherche
            WApp.Selection.Find.Execute "N° Facture"    'On trouve le texte "No Facture"
            WApp.Selection.MoveRight unit:=3, Count:=2, Extend:=2   'On se déplace de 3 mots
            Set WSel = WApp.Selection                   'sélection du texte trouvé
            ws.Cells(i, 2) = Trim(Split(WSel, ":")(1))      'Le No de facture est la 2e chaîne de caractères séparés par 2 ":"
     
            ' No Vendeur (dans le 2e tableau, ligne 2, colonne 1)
            WDoc.Tables(2).Cell(2, 1).Range.Copy        'copie la valeur dans le presse papier
            ws.Select                                   'bascule vers Excel
            ws.Cells(i, 3).PasteSpecial (xlPasteValues) 'colle la valeur dana la cellule
     
            ' No du bon de commande (dans le 2e tableau, ligne 2, colonne 2)
            WDoc.Tables(2).Cell(2, 2).Range.Copy
            ws.Select
            ws.Cells(i, 4).PasteSpecial (xlPasteValues)
     
            ' Nom du client (par la fonction FIND)
            WApp.Selection.HomeKey unit:=6
            WApp.Selection.Find.ClearFormatting
            WApp.Selection.Find.Execute "FACTURER À :"
            WApp.Selection.MoveRight unit:=3, Count:=2, Extend:=1
            Set WSel = WApp.Selection
            ws.Cells(i, 5) = Split(WSel, ":")(1)
     
            ' Montant total dû (dans le 3e tableau, ligne 10, colonne 2)
            WDoc.Tables(3).Cell(10, 2).Range.Copy
            ws.Select
            ws.Cells(i, 6).PasteSpecial (xlPasteValues)
     
            i = i + 1                       'prochaine ligne
            WDoc.Close False                'fermer le document Word sans enregistrer
            sNomFichier = Dir               'prochain document
        Loop
     
    SortieNormale:
        Application.ScreenUpdating = True
        WApp.Quit                           'Fermer l'instance de Word
        Application.StatusBar = False       'Remise à zéro de la barre d'état
     
    End Sub
    Mais il vient d'un exemple précis je ne sais pas ce qui est à garder et ce que je dois rajouter...

  6. #6
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut enregistreur de macro
    Salut,

    Nous étudiants on est un peu flemmards.. lol , bon sans rire, je pense que tu devrais essayer l'enregistreur de macro pour faire exactement ce que tu veux , c'est ce qui t'as été conseillé et souvent ça aide.. ( même si avec le temps pour progresser ça n'est pas le mieux).

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Beldramma Voir le message
    Je connais cette manip d'enregistrer une macro , grâce au lien précédemment donné
    Merci pour le lien, je vais jeter un coup d'oeil
    Bonjour,

    nous sommes maintenant 4 à attendre le code que tu as réalisé avec l'enregistreur de macro

    après réflexion, en fait ils ne sont plus que 3, inutile d'encombrer le fil de 4 propositions qui seront probablement identiques.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    Alors J'ai fait les opérations suivantes:


    J'ai copié les colonnes G et H de la ligne 3 de mon tableau

    Nom : Tableau excel simplifie.png
Affichages : 3872
Taille : 130,4 Ko

    Puis j'ai ouvert mon gestionnaire de fichier dans mon fichier M****o, et dans la barre de recherche, j'ai collé
    Ca m'a donné un fichier word que j'ai ouvert.
    Dans ce fichier se trouve un tableau

    Nom : Word simplifie.png
Affichages : 3157
Taille : 130,4 Ko

    J'ai copié la ligne "consignes" que j'ai collé dans la colonne Q à la ligne 3 de mon tableau excel

    Et voila le code enregistré:

    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 Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        Range("G3:H3").Select
        Selection.Copy
        Application.CutCopyMode = False
        ActiveWindow.ScrollColumn = 2
        ActiveWindow.ScrollColumn = 3
        ActiveWindow.ScrollColumn = 4
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 6
        ActiveWindow.ScrollColumn = 7
        ActiveWindow.ScrollColumn = 8
        ActiveWindow.ScrollColumn = 9
        Range("Q3").Select
        ActiveCell.FormulaR1C1 = _
            "xxxxxxxxxxxxxxxxxx"
        Range("Q5").Select
    End Sub
    Mais L'enregistreur de macro n'enregistre t-il pas seulement ce qu'il se passe dans excel ?

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut Algorithme du programme
    Je sais pas si ca peut aider, mais voila l'algorithme du programme:

    Variables:

    Lx est le numéro de ligne dans le tableau excel.

    Lw est le numéro de ligne dans le tableau word.

    Début algorithme:

    Lx prend la valeur 3

    Lw prend la valeur 8

    Tant que Lx < 1627 \\ 1627 correspond au nombre de lignes dans le tableau à remplir

    • Copier dans la ligne 3 les colonnes G et H

    Chercher dans le répertoire M****o le nom collé

    Si

    Il y a plusieurs fichiers correspondants, passer à la ligne suivante

    Sinon

    ouvrir le dossier word correspondant

    Dans le fichier correspondant, chercher le mot clé "Consignes" à partir de la ligne 8 jusqu'a trouver la ligne correspondante Lw

    Fin Si


    Si

    Dans la ligne Lw sur la ligne ou se trouve "consignes" se trouve le mot clé "Critique", copier "Critique" dans la colonne P à la ligne Lx

    Sinon

    Copier "Absent" dans la colonne P à la ligne Lx

    Fin Si


    Si

    dans la ligne du tableau il y a du texte, le copier dans la colonne Q à la ligne Lx

    Sinon

    Copier "Absent" dans la colonne Q à la ligne Lx

    Fin Si

    • Exécuter Lx prend la valeur Lx+1

    Fin algorithme

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    Cette commande existe-elle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("Gligne_excel:Hligne_excel").Select \\ligne_excel est une variable
        Selection.Copy

  11. #11
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 090
    Billets dans le blog
    2
    Par défaut
    Bonsoir à tous,

    Cette commande existe-elle ?
    Oui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("G" & ligne_excel & ":H" & ligne_excel).Copy\\ligne_excel est une variable
    

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut Correction de l'algorithme
    Voila une correction de l'algorithme:
    Variables:

    Lx est le numéro de ligne dans le tableau excel.

    i est le numéro de la ligne dans le tableau word

    Début algorithme:

    Lx prend la valeur 3


    Tant que Lx < 1627 \\ 1627 correspond au nombre de lignes dans le tableau à remplir

    • Copier dans la ligne Lx les colonnes G et H

    Chercher dans le répertoire M****o le nom collé

    Si

    Il y a plusieurs fichiers correspondants, passer à la ligne suivante

    Sinon

    ouvrir le dossier word correspondant \\ dans le fichier word se trouve un tableau

    Pour i allant de 8 à 10, faire \\ i corespond au numéro de ligne dans le tableau
    Chercher à la ligne i le mot clé "Consignes"
    Fin Pour si le mot clé est trouvé
    i prend la valeur i+1

    Fin Si


    Si

    Dans la ligne i sur la ligne ou se trouve "consignes" si on trouve le mot clé "Critique", copier "Critique" dans la colonne P à la ligne Lx

    Sinon

    Copier "Absent" dans la colonne P à la ligne Lx

    Fin Si


    Si

    dans la ligne i il y a du texte, le copier dans la colonne Q à la ligne Lx

    Sinon

    Copier "Absent" dans la colonne Q à la ligne Lx

    Fin Si

    • Exécuter Lx prend la valeur Lx+1

    Fin algorithme

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut Début programme
    Voila le debut de mon programme
    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
    Sub programme_excel()
    
    ' -- Déclaration des variables
    Dim Lx As Integer           'Ligne excel dans tableau excel
    Dim i As Integer            'ligne word dans le tableau word
    Dim sChemin As String       'répertoire contenant les fichiers Word
    Dim sNomFichier As String   'nom du fichier Word formé par les colonnes G et H dans la ligne Lx
    Dim WApp As Object, WDoc As Object, WSel As Object
    
    ' -- Initialisation des variables
    Lx = 3 'Numéro de ligne de départ dans le tableau excel
     sChemin = "J:\200 - Applications_ISY\20.33 - Advantage\Antoine\NSM - Monaco\Monaco" 'fonction pour choisir le répertoire contenant les fichier Word
     sNomFichier = Dir(sChemin & "*.doc*")       'pour ouvrir tous les fichiers .doc*. 1er fichier.
    
     
      Set WApp = CreateObject("Word.Application") 'pour créer un objet Word
        WApp.Visible = True                        'ne pas afficher Word pendant l'exécution
        
         Application.ScreenUpdating = False
    
     
    ' -- Programme
    
    While ligne_excel < 1627 'Nombre total de ligne à remplir
    
       
        sNomFichier = Range("G" & Lx & ":H" & Lx) ' Nom du fichier
        
    
    Set WDoc = WApp.Documents.Open(sChemin & sNomFichier)   'ouvre le document Word
    
    
            
    
    
        
    
    ligne_excel = ligne_excel + 1
    Wend
    
    End Sub
    La ligne surligné en rouge bug et je ne comprend pas pourquoi, quel est le problème ?

  14. #14
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour, bonjour !

    Bug ne veut rien dire ‼ Sans informer le forum du message d'erreur, mettre un point d'arrêt sur la ligne en rouge,
    lancer la procédure puis regarder enfin dans la fenêtre des Variables locales le contenu des variables de cette ligne ‼
    Bref le B-A-BA du débogage …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  15. #15
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'opte pour une erreur "incompatibilité de type" à vue de nez.


    ta ligne 27 appelle à 2 remarques :

    1) mineur : il est de bon ton d'indiquer la propriété utilisées (tu voulais prendre .Value non ?)

    2) bloquante : même en corrigeant le point 1, tu cherches à affecter la valeur d'une plage de plusieurs cellules dans un string ... j'ai bien peur qu'une méthode globale ainsi ne fonctionne pas.


    ne reste qu'à nous expliquer le but de cette démarche, en attendant voici les issues possibles :

    - boucler cellule par cellule pour concaténer les valeurs ==> là tu pourras affecter à ton string l'ensemble des valeurs de ta plage (attention à la longueur !)

    - effectuer une boucle dans ton code afin d'affecter à ton string la valeur de chaque cellule + y appliquer le traitement voulu


    EDIT : et en point "0" ==> rattache tes ranges/cells à leur feuille parente ! C'est peut être pas bloquant dans ton cadre de test .... mais ça te jouera des tours tôt ou tard

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    En fait dans les colonnes G et H se trouve le nom partiel du fichier word auquel je veux accéder
    C'est pour ca que j'aimerais attribuer à la variable sNomFichier ce qui est selectionné

    Nouveau 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
    ' ----------------------------------------------------------------
    ' Extraction des données à partir de fichier Word vers Excel
    ' Par : Grand Chaman Excel -- 2013/03/05
    '-----------------------------------------------------------------
    Sub Importation_Donnees_Word()
    
        ' -- Déclaration des variables
        Dim wb As Workbook          'classeur Excel dans lequel on importe les données
        Dim ws As Worksheet         'onglet Excel dans lequel on importe les données
        Dim sChemin As String       'répertoire contenant les fichiers Word
        Dim sNomFichier As String   'nom du fichier Word
        Dim WApp As Object, WDoc As Object, WSel As Object
        Dim i As Integer
    
        ' -- Initialisation des variables
        Set wb = ThisWorkbook
        Set ws = wb.Sheets(1)                       'on sauvegarde dans la 1re feuille
        sChemin = ChoisirRepertoire & "J:\200 - Applications_ISY\20.33 - Advantage\Antoine\NSM - Monaco\Monaco"    'fonction pour choisir le répertoire contenant les fichier Word
        
        sNomFichier = Dir(sChemin & "*.doc*")       'pour ouvrir tous les fichiers .doc*. 1er fichier.
    
        Set WApp = CreateObject("Word.Application") 'pour créer un objet Word
        WApp.Visible = True                        'ne pas afficher Word pendant l'exécution
        i = 3   '1re ligne où on va écrire les données dans le fichier Excel
    
        Application.ScreenUpdating = False
    
        ' -- Boucle sur les fichiers
            While i < 1627 'Nombre total de ligne à remplir
            ' Nom du fichier
            ws.Cells(i, 9).Value = sNomFichier
            
            Set WDoc = WApp.Documents.Open(sChemin & sNomFichier)   'ouvre le document Word        
          Application.StatusBar = "Écriture ligne " & i       'message dans Excel pour voir la progression
    
    Wend 
    End Sub
    Voila ou j'en suis actuellement.
    J'ai fusionné dans mon tableau les deux cellules G et H pour donner la cellule I .
    La ligne surligné pose problème. En effet lors de son éxécution,un panneau s'affiche "Le serveur distant n'existe pas ou n'est pas disponible"
    Dans les variables locales, bizzarement, pour sNomFichier sa valeur est ""

    De plus pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ws.Cells(i, 9).Value = sNomFichier
    j'aimerais que sNomFichier prenne cette valeur sans que je perde cette donnée dans mon tableau

  17. #17
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 090
    Billets dans le blog
    2
    Par défaut
    Bonjour à tous,

    Peut être dans la ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sChemin = ChoisirRepertoire & "J:\200 - Applications_ISY\20.33 - Advantage\Antoine\NSM - Monaco\Monaco"
    Ajoute un \ à la fin du chemin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sChemin = ChoisirRepertoire & "J:\200 - Applications_ISY\20.33 - Advantage\Antoine\NSM - Monaco\Monaco\"
    Que vaut ChoisirRepertoire ?

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    Merci tototiti2008, ca commence à marcher
    J'ai réussi à ouvrir un fichier word, mais pas le bon.

    En effet, quand je compile mon programme, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sNomFichier = Dir(sChemin & "*.doc*")
    attribue un nom de fichier qui ne change pas à sNomFichier alors que je voudrais qu'il lui soit donné le nom en Cellule(i,9).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Cells(i, 9).Value = sNomFichier
    De plus le nom dans la cellule(i, 9) n'est pas complet mais suffit normalement à distinguer un fichier parmi tous les autres. Cela pose-t-il problème ?

  19. #19
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    Beldramma , il semble que tu ait des problème avec l'opérateur = .. fait une recherche dans l'aide en ligne Excel "Opérateur =" ..

    ensuite oui pour ouvrir un fichier il te faut son nom complet ... mais l'instruction Dir devrais peu-être t'aider pour compléter ce nom ....

  20. #20
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 14
    Par défaut
    j'aimerais attribuer à ma variable sNomFichier le nom de mon doc dans la colonne 9 en fonction de la ligne i.
    J'ai essayé suivant tes conseils bbil la commande Dir("Chemin d'accès", MacID("TEXT")) en remplacant "Chemin d'accès" et "Text" par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sNomFichier = Dir(sChemin & MacID(ws.Cells(i, 9).Value))
    Mais elle n'attribue rien à ma variable
    Que faire ?

Discussions similaires

  1. [Excel 2003] - Copier/Coller code VBA automatiquement
    Par n0vocaine dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/04/2012, 16h48
  2. [XL-2007] Excel, VBA, onglet et copier coller
    Par colapsus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2011, 15h50
  3. Réponses: 1
    Dernier message: 27/01/2011, 22h30
  4. [VBA] Pb avec Copier/coller d'une feuille Excel
    Par sebastien_oasis dans le forum Excel
    Réponses: 3
    Dernier message: 14/12/2007, 11h08
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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