besoin d'aide pour un code vba dans une macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zephir94

XLDnaute Impliqué
Bonsoir a tous et a toutes et bonne année et meilleurs voeux

Etant nul en VBA ( car on m'a dit que le résultat que je souhaite est possible que en passant par une macro et code vba )
j'ai un classeur avec une feuille comportant plusieurs champs a remplire, et une deuxieme feuille sous forme de tableau comportant 76 lignes .
le but est de faire un boutton sur la première feuille affin une fois les champs remplis de les envoyer vers la page 2 est que les champs viennent se copiers dans les différentes cases correspondantes. mais il faut que a chaque fois excel aille copier a la ligne vierge suivante et arrivée a la ligne 76 ( page pleine ) excel recrée une nouvelle page identique a la deux pour continuer et ainsi de suite...
J'ai grandement besoin d'aide merci a ceux ou celles par avance qui pourront m'aider

bonne soirée et encore merci
 
Re : besoin d'aide pour un code vba dans une macro

Bonjour, j'ai réussi a élucider certains points de mes questions du poste suivant mais j'en ai une importante a te poser, la première feuille a l'origine était en format word y a t il un moyen de pouvoir partire de cette feuille et de faire la même chose ? Merci du temps que tu prends pour moi Cordiales salutation

Bonsoir zephir94,

Content que tu aies résolu ces points, je ne savais que te répondre car chez moi ça fonctionne parfaitement sur XL2003 et 2007.

Quant à ta dernière demande, je n'ai encore jamais réalisé d'import de fichier Word dans Excel, et je n'ai pas la moindre idée de la procédure : notamment, comment répartir les zones de texte dans des cellules différentes. Toutefois, ce problème peut être intéressant à étudier, et je vais m'y atteler, mais je ne te garantis pas une réponse immédiate, ni même une réponse tout court. Je pense qu'une recherche sur le forum s'impose.

Dans cette attente.

Cordialement.
 
Re : besoin d'aide pour un code vba dans une macro

Bonjour a toi ,
J'ai trouvé ce code permettant de pouvoir récuperer des donnée dans word et les copiers vers excel

Copier une ligne precise d'un tableau word et le coller dans Excel
Sub importValeurs_De_tablesWord()
'Activer la reference Microsoft Word xx.x Object Library
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Set wordApp = createObject("word.application")
wordApp.Visible = False 'Word reste masqué pendant l'opéraion
Set wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouvre le document Word
'copies la 3eme ligne de la 1ere table Word
wordDoc.Tables(1).Rows(3).Range.Copy
'collage dans Excel
Range("A1").pasteSpecial xlPasteValues
wordDoc.Close 'fermeture document Word
wordApp.Quit 'fermeture session Word
End Sub


pourais tu m'aider a l'adapter a mon besoin c'est a dire l'inserer dans ta prog affin de faire la meme chose mais en partant de word pour le fichier bordereau d'envoi mais concerver dans excel la copie dans les champs vide et créer une page en fin de page
le code que j'ai trouvé je ne sais pas si je dois l'incerer dans word ou dans excel. Peux tu m'aider
merci par avance
Cordiales salutations
 
Re : besoin d'aide pour un code vba dans une macro

Bonjour a toi ,
J'ai trouvé ce code permettant de pouvoir récuperer des donnée dans word et les copiers vers excel

Copier une ligne precise d'un tableau word et le coller dans Excel
Sub importValeurs_De_tablesWord()
'Activer la reference Microsoft Word xx.x Object Library
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Set wordApp = createObject("word.application")
wordApp.Visible = False 'Word reste masqué pendant l'opéraion
Set wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouvre le document Word
'copies la 3eme ligne de la 1ere table Word
wordDoc.Tables(1).Rows(3).Range.Copy
'collage dans Excel
Range("A1").pasteSpecial xlPasteValues
wordDoc.Close 'fermeture document Word
wordApp.Quit 'fermeture session Word
End Sub


pourais tu m'aider a l'adapter a mon besoin c'est a dire l'inserer dans ta prog affin de faire la meme chose mais en partant de word pour le fichier bordereau d'envoi mais concerver dans excel la copie dans les champs vide et créer une page en fin de page
le code que j'ai trouvé je ne sais pas si je dois l'incerer dans word ou dans excel. Peux tu m'aider
merci par avance
Cordiales salutations

Bonjour zephir94,

Je pense que ton code va m'aider à t'aider.

J'ai moi-même fouillé les forums sur le sujet, et je suis arrivé à la conclusion qu'il fallait structurer ton fichier Word sous forme de tableau, à moins que ce ne soit déjà le cas. Peux-tu m'envoyer ton fichier .doc ?

J'ai également déjà créé un fichier Word, selon tes données, et je pense que le plus simple serait d'y insérer un bouton de commande 'Archiver', mais je n'ai pas encore trouvé le moyen de rendre ce bouton invisible à l'impression.

Quoiqu'il en soit, je continue à étudier une solution à mes temps perdus.

Cordialement.
 
Re : besoin d'aide pour un code vba dans une macro

Hello je t'ai envoyé un message en privé , pour le boutton je pensais enfait le mettre seule a la place de la première page dans le dossier excel si tenté que ce soit de excel que l on puisse exécuter la macro dans word j'ai repéré en bas dans la barre les coordonnées de chaque ligne et colones

mon mail est zephir94@orange.fr
 
Dernière édition:
Re : besoin d'aide pour un code vba dans une macro

Hello je t'ai envoyé un message en privé , pour le boutton je pensais enfait le mettre seule a la place de la première page dans le dossier excel si tenté que ce soit de excel que l on puisse exécuter la macro dans word j'ai repéré en bas dans la barre les coordonnées de chaque ligne et colones

mon mail est zephir94@orange.fr

Je n'ai reçu aucun fichier dans ton message, alors je t'envoie ma version d'essai.

J'ai créé un fichier (zephyr94.doc) que tu dois enregistrer dans le même répertoire que zephir94.xls (C'est le fichier zephir94doc.zip que tu dois renommer en zephir94.doc après décompression.

En cliquant sur le bouton Archiver du fichier Excel, la macro (inspirée de ton listing précédent) ouvre le fichier .doc et copie les données dans la Feuille Bordereau d'envoi, puis met à jour la feuille Page 1, en affichant un message d'information.

Tout ça fonctionne parfaitement, sauf sur un point qu'il me reste à résoudre : les textes récupérés dans word comportent des caractères de formatage que je n'arrive pas à éliminer dans Excel. Il faut que je cherche une solution.

Attention toutefois : pour que la macro fonctionne, il faut charger une réference complémentaire dans VBA :

Menu Outils, Références, et dans la liste déroulante sélectionner Microsoft Word 12.0 Object Library puis OK.

Si tu souhaites changer le nom du fichier zephir94.doc, n'oublies pas de le modifier également dans VBA :

Code:
' ------------------------ LECTURE DU FICHIER  zephir94.doc -----------------------------
' zephir94.doc doit être situé dans le même répertoire que zephir94.xls
Set wordApp = CreateObject("word.application")
wordApp.Visible = False 'Word reste masqué pendant l'opéraion
Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "[COLOR="RoyalBlue"][B]\zephir94.doc[/B][/COLOR]") 'ouvre le document Word
' copie les valeurs de tableau de zephir94.doc dans la feuille Bordereau d'envoi de zephir94.xls
Feuil1.Range("C11").Value = wordDoc.Tables(2).Cell(1, 2)

Remarque : cette solution a l'inconvénient d'écraser le fichier .doc à chaque archivage. Il me semble donc qu'il serait préférable de prévoir un bouton d'archivage sur le fichier word, car le nom du fichier excel reste immuable.

Voilà, j'espère n'avoir rien oublié, et je continue ma recherche pour supprimer les caractères spéciaux.

A bientôt.

Cordialement.
 
Dernière édition:
Re : besoin d'aide pour un code vba dans une macro

Bonsoir, tu est formidable tu as réussi avec beaucoup plus de brillot que moi car moi j'ai une lamentable error sniff je te renvoi le mail pouratnt il est bien parti
mais bon je m'accroche et j'ai encore du travail pour comprendre mes erreures mais je ne désespère pas, avant de savoir courrir il faut apprendre a marcher !!!
Par contre le fichier bordereau étant normalisé il ne peux pas etre modifié ou alors de façon transparente
un grand merci a toi de nouveau
DE TRES TRES Cordiales salutations
ps parcontre j'ai fais une erreure B correspond a objet de la lettre dans le fichier excel
et virer la protection de la feuille
j'espere que tu vas recevoir le mail cette fois
 
Dernière édition:
Re : besoin d'aide pour un code vba dans une macro

Bonsoir

je viens d'essayer ton fichier et j'ai trouvé que si tu envois 4 fois de suite les données la macro plante sur le mot de passe, pour les caractères spéciaux j'ai trouvé sur le net

Quand on exporte du texte dans excel ou word (fichiers .csv renommés en .xls, fichiers .txt renommés en .doc ...), les caractères spéciaux sont remplacés par d'autres caractères et rendent le texte illisible.
Le charset n'est malheureusement pas modifiable 🙁
Cette fonction permet donc de rétablir la plupart des caractères spéciaux connus.


1.$replace = array(
2. "Å " => "Š", "Å¡" => "š", "Å'" => "Œ", "Å"" => "œ",
3. "Ÿ" => "Ÿ", "ÿ" => "ÿ", "À" => "À", "à " => "à",
4. "Ã" => "Á", "á" => "á", "Â" => "Â", "â" => "â",
5. "Ã" => "Ã", "ã" => "ã", "Ä" => "Ä", "ä" => "ä",
6. "Ã…" => "Å", "Ã¥" => "å", "Æ" => "Æ", "æ" => "æ",
7. "Ç" => "Ç", "ç" => "ç", "È" => "È", "è" => "è",
8. "É" => "É", "é" => "é", "Ê" => "Ê", "ê" => "ê",
9. "Ë" => "Ë", "ë" => "ë", "ÃŒ" => "Ì", "ì" => "ì",
10. "Ã" => "Í", "Ã*" => "í", "ÃŽ" => "Î", "î" => "î",
11. "Ã" => "Ï", "ï" => "ï", "Ã" => "Ð", "ð" => "ð",
12. "Ã'" => "Ñ", "ñ" => "ñ", "Ã'" => "Ò", "ò" => "ò",
13. "Ã"" => "Ó", "ó" => "ó", "Ã"" => "Ô", "ô" => "ô",
14. "Õ" => "Õ", "õ" => "õ", "Ö" => "Ö", "Ø" => "Ø",
15. "ø" => "ø", "Ù" => "Ù", "ù" => "ù", "Ú" => "Ú",
16. "ú" => "ú", "Û" => "Û", "û" => "û", "Ü" => "Ü",
17. "ü" => "ü", "Ã" => "Ý", "ý" => "ý", "Þ" => "Þ",
18. "þ" => "þ", "ß" => "ß", "ö" => "ö"
19.);
20.function changeAccented($text) {
21. global $replace;
22. foreach($replace as $key => $val)
23. $text = str_replace($key, $val, $text);
24. return $text;
25.}
 
Dernière édition:
Re : besoin d'aide pour un code vba dans une macro

Bonsoir

je viens d'essayer ton fichier et j'ai trouvé que si tu envois 4 fois de suite les données la macro plante sur le mot de passe, pour les caractères spéciaux j'ai trouvé sur le net

Quand on exporte du texte dans excel ou word (fichiers .csv renommés en .xls, fichiers .txt renommés en .doc ...), les caractères spéciaux sont remplacés par d'autres caractères et rendent le texte illisible.
Le charset n'est malheureusement pas modifiable 🙁
Cette fonction permet donc de rétablir la plupart des caractères spéciaux connus.


1.$replace = array(
2. "Å " => "Š", "Å¡" => "š", "Å'" => "Œ", "Å"" => "œ",
3. "Ÿ" => "Ÿ", "ÿ" => "ÿ", "À" => "À", "à " => "à",
4. "Ã" => "Á", "á" => "á", "Â" => "Â", "â" => "â",
5. "Ã" => "Ã", "ã" => "ã", "Ä" => "Ä", "ä" => "ä",
6. "Ã…" => "Å", "Ã¥" => "å", "Æ" => "Æ", "æ" => "æ",
7. "Ç" => "Ç", "ç" => "ç", "È" => "È", "è" => "è",
8. "É" => "É", "é" => "é", "Ê" => "Ê", "ê" => "ê",
9. "Ë" => "Ë", "ë" => "ë", "ÃŒ" => "Ì", "ì" => "ì",
10. "Ã" => "Í", "Ã*" => "í", "ÃŽ" => "Î", "î" => "î",
11. "Ã" => "Ï", "ï" => "ï", "Ã" => "Ð", "ð" => "ð",
12. "Ã'" => "Ñ", "ñ" => "ñ", "Ã'" => "Ò", "ò" => "ò",
13. "Ã"" => "Ó", "ó" => "ó", "Ã"" => "Ô", "ô" => "ô",
14. "Õ" => "Õ", "õ" => "õ", "Ö" => "Ö", "Ø" => "Ø",
15. "ø" => "ø", "Ù" => "Ù", "ù" => "ù", "Ú" => "Ú",
16. "ú" => "ú", "Û" => "Û", "û" => "û", "Ü" => "Ü",
17. "ü" => "ü", "Ã" => "Ý", "ý" => "ý", "Þ" => "Þ",
18. "þ" => "þ", "ß" => "ß", "ö" => "ö"
19.);
20.function changeAccented($text) {
21. global $replace;
22. foreach($replace as $key => $val)
23. $text = str_replace($key, $val, $text);
24. return $text;
25.}

Bonsoir,

Effectivement, à force de triturer ce programme, j'y ai laissé traîner 2 bouses.

Voici donc les corrections en rouge dans le listing ci-dessous :

Code:
' ------------------------ TRANSFERT DES DONNEES DE LA FEUILLE Bordereau d'envoi DANS LA FEUILLE Page X -----------------------------
' On teste la position de la dernière ligne remplie sur la dernière feuille du classeur
' La ligne suivante part de la dernière cellule en bas de la colonne A et remonte sur la dernière ligne remplie, puis teste sa position :
  ' Si cette ligne est la n°82, alors on appelle la macro de création de feuille nommée "CopieFeuille"
If Sheets(Sheets.Count).Range("A65536").End(xlUp).Row = [COLOR="Red"][B]82 [/B][/COLOR]Then CopieFeuille ' On peut traduire cette ligne ainsi :
  ' Dans la dernière feuille du tableau (Sheets.Count) --> compte le nbre de feuilles), et en partant de la dernière cellule en colonne A _
  (Range("A65536") on remonte jusqu'à la dernière ligne contenat des données (End(xlUp) et on note son n° de ligne (Row)

' Toutes les lignes suivantes opèreront dans la dernière feuille du tableau (With sheets... --> Avec la feuille en dernière position)
With Sheets(Sheets.Count)
  .Unprotect "zephir"
' On affecte le n° de la dernière ligne remplie à la variable dLg et on lui ajoute 1 pour passer à la ligne vide juste en dessous
  dLg = .Range("A65536").End(xlUp).Row + 1
  ' Les cellules A4 et A5 étant fusionnées, dLg est initialisé à 4 +1 = 5 sur la feuille vierge, il faut donc lui ajouter 1 pour passer à la 6ème ligne
  If dLg = 5 Then dLg = 6
  ' On affecte à chaque cellule de la dernière feuille la valeur de la cellule adéquate de la feuille "Bordereau d'envoi"
  ' Cells(dLg, 1) peut se traduire par : cellule située sur la ligne dLg et la colonne 1, donc colonne A
  ' Feuil1.Range("C11") peut se traduire par : cellule C11
  ' On pourrait tout auusi bien écrire : .Range("A" & dLg) = Feuil1.Range("C11")
  .Cells(dLg, 1) = Feuil1.Range("C11")
  .Cells(dLg, 2) = Feuil1.Range("H20")
  .Cells(dLg, 3) = Feuil1.Range("I15")
  .Cells(dLg, 4) = Feuil1.Range("B58")
  .Cells(dLg, 8) = Feuil1.Range("J20")
  .Protect "zephir"
' On termine les interventions sur la dernière feuille
End With
End Sub
Sub CopieFeuille()
[COLOR="Red"][B]Sheets(Sheets.Count)[/B][/COLOR].Unprotect "zephir"
' Cette macro permet de créer une copie de la dernière feuille et de la placer en dernière position
Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)

Si j'avais écrit 8 au lieu de 82, c'était pour limiter les essais au début pour la création de nouvelles pages.

Je n'ai pas analysé les problèmes liés à l'exportation de texte, et que tu soulignes en début de ton message, mais je vais m'y atteler plus tard.

En attendant, bonne nuit car je vais me coucher à c't'heure.

Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
1 K
Réponses
7
Affichages
3 K
Retour