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

VBA Word Discussion :

Macro pour envoyer la ligne courante en fin de document ?


Sujet :

VBA Word

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 159
    Points : 73
    Points
    73
    Par défaut Macro pour envoyer la ligne courante en fin de document ?
    Bonjour Forum,

    Pour m’aider dans l’écriture d’un texte assez long, j’ai besoin d’une macro qui « envoie » la ligne courante à la fin du document (pour mettre de côté des bribes de texte inutilisées).

    Malheureusement, celle que j’ai mise au point (bidouillé serait plus juste) modifie l’affichage.

    Quelqu’un pourrait-il m’aider à revoir cette macro pour que le texte de la ligne courante parte à la fin du doc, sans que l’affichage se modifie ?

    Merci !!!

    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 Envoyer_à_la_fin()
        Application.ScreenUpdating = False
        Selection.HomeKey Unit:=wdLine
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.Cut
        Selection.TypeText Text:="$ù$ù"
        Selection.EndKey Unit:=wdStory
        Selection.PasteAndFormat (wdFormatOriginalFormatting)
        Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "$ù$ù"
            .Replacement.Text = "@@@@"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute
        Selection.HomeKey Unit:=wdLine
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.Delete Unit:=wdCharacter, Count:=1
        'Application.ScreenUpdating = True
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Qu'entends tu par ligne ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 108
    Points : 171
    Points
    171
    Par défaut
    Bonjour

    Première réponse, je n'ai pas lu entièrement les règles du forum mais j'apporte mon aide et comme à mon habitude sans avoir testé jusqu'au bout (il faut laisser un peu de travail)

    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
    Sub Envoyer_à_la_fin()
    'récupérer la ligne
    ligne = Selection.Information(wdFirstCharacterLineNumber)
    'récupérer la colonne
    colonne = Selection.Information(wdFirstCharacterColumnNumber)
    'Sélectionner la ligne
    Selection.HomeKey Unit:=wdLine
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    ' copier la ligne
    Selection.Paste
    'couper la ligne
    Selection.Cut
    ' aller en fin de document
    Selection.EndKey Unit:=wdStory
    ' coller le contenu
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    ' revenir en début de document
    Selection.HomeKey Unit:=wdStory
    'sauter le nombre de lignes
     For i = 1 To ligne
    Selection.Move Unit:=wdLine, Count:=1
    Next
    'déplacer le curseur vers la droite jusqu'à la colonne
     For i = 1 To colonne
    Selection.Move Unit:=wdCharacter, Count:=1
     Next
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    Salut, je mets ça dans un de mes codes si ça peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ''saloperies a faire car Word se met tout seul en affichage brouillon a cause des select''
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ActiveWindow.ActivePane.Close
            If ActiveWindow.View.SplitSpecial = wdPaneNone Then
                ActiveWindow.ActivePane.View.Type = wdPrintView
            Else
                ActiveWindow.View.Type = wdPrintView
            End If

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Citation Envoyé par MyKroPhone Voir le message
    Salut, je mets ça dans un de mes codes si ça peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ''saloperies a faire car Word se met tout seul en affichage brouillon a cause des select''
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ActiveWindow.ActivePane.Close
            If ActiveWindow.View.SplitSpecial = wdPaneNone Then
                ActiveWindow.ActivePane.View.Type = wdPrintView
            Else
                ActiveWindow.View.Type = wdPrintView
            End If
    Je pense que ça va beaucoup aider !
    Modifier le mode d'affichage est vraiment ce qui est recherché.

    Citation Envoyé par fraflt69 Voir le message
    Bonjour

    Première réponse, je n'ai pas lu entièrement les règles du forum mais j'apporte mon aide et comme à mon habitude sans avoir testé jusqu'au bout (il faut laisser un peu de travail)

    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
    Sub Envoyer_à_la_fin()
    'récupérer la ligne
    ligne = Selection.Information(wdFirstCharacterLineNumber)
    'récupérer la colonne
    colonne = Selection.Information(wdFirstCharacterColumnNumber)
    'Sélectionner la ligne
    Selection.HomeKey Unit:=wdLine
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    ' copier la ligne
    Selection.Paste
    'couper la ligne
    Selection.Cut
    ' aller en fin de document
    Selection.EndKey Unit:=wdStory
    ' coller le contenu
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    ' revenir en début de document
    Selection.HomeKey Unit:=wdStory
    'sauter le nombre de lignes
     For i = 1 To ligne
    Selection.Move Unit:=wdLine, Count:=1
    Next
    'déplacer le curseur vers la droite jusqu'à la colonne
     For i = 1 To colonne
    Selection.Move Unit:=wdCharacter, Count:=1
     Next
    End Sub
    Pas testé jusqu'au bout, je pense bien, même pas la première ligne.

    Si c'est pour copier une ligne et pas un paragraphe, on peut faire plus simple que de passer par des variables non déclarées qui vont générer une erreur et de signaler une copie avec un Paste.

    Sans avoir attendu la réponse du posteur initial.
    Un petit bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CopierLigne()
    'étendre la sélection
    Selection.Expand unit:=wdLine
    'copier la sélection "Cut" pour la déplacer
    Selection.Copy
    'déplacer la sélection à la fin du document
    Selection.EndKey unit:=wdStory
    'ajouter un paragraphe
    Selection.InsertParagraph
    'coller la ligne
    Selection.Paste
     
    End Sub
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 159
    Points : 73
    Points
    73
    Par défaut
    Bonjour et merci à tous pour vos contributions !

    @Heureux-oli : pour moi, une ligne c'est ce qui tient visuellement sur une ligne en affichage par page

    @fraflt69 : j'ai implémenté ton code (peut-être mal ?), et ce qu'il fait, c'est coller le code à la place du texte à bouger !?

    @MyKroPhone : je ne sais pas trop quoi faire de ton code...

    @Heureux-oli (bis) : ton code copie/colle la ligne en cours, mais affiche la zone de destination, alors que ce que je souhaite faire c'est ne pas changer l'affichage quand la macro s'exécute.


    Merci à tout contributeur éventuel !

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Ce n'est pas l'affichage qui est modifié mais l'endroit où est collée la ligne.
    Il suffit après avoir copié et avant de déplacer de mettre un signet pour le récupérer ensuite.

    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
    Sub CopierLigne()
    'étendre la sélection
    Selection.Expand unit:=wdLine
    'copier la sélection "Cut" pour la déplacer
    Selection.Copy
    'Signet
    Selection.Bookmarks.Add Name:="myBM", Range:=Selection.Range
    'déplacer la sélection à la fin du document
    Selection.EndKey unit:=wdStory
    'ajouter un paragraphe
    Selection.InsertParagraph
    'coller la ligne
    Selection.Paste
    ActiveDocument.Bookmarks("myBM").Select
     
    End Sub
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 159
    Points : 73
    Points
    73
    Par défaut
    Merci pour ta réponse.

    C'est sûr que ton code est plus pro que mes bidouilles.
    Ça marche...presque !
    D'une part, il me semble qu'il faut remplacer
    Selection.Copy
    par
    Selection.Cut
    .
    D'autre part, l'affichage est modifié après le couper/coller de la ligne (la feuille remonte vers le haut de l'écran).
    Je ne sais pas quoi faire...

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par bruxmu Voir le message
    Merci pour ta réponse.

    C'est sûr que ton code est plus pro que mes bidouilles.
    Ça marche...presque !
    D'une part, il me semble qu'il faut remplacer par .
    D'autre part, l'affichage est modifié après le couper/coller de la ligne (la feuille remonte vers le haut de l'écran).
    Je ne sais pas quoi faire...
    Pour le cut, c'est dans les commentaires du code.
    Mais dans ce cas, le signet est supprimé, il faut le déplacer soit avant, soit après la sélection avec un Selection.Collapse
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 159
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Pour le Cut au lieu du Copy : désolé, j'avais pas percuté.
    J'ai donc conservé ton code (qui copie/colle en fin de doc), et ajouté de quoi couper la sélection à la toute fin : nickel.

    Dernier problème : tu saurais quoi faire pour que l'affichage ne bouge pas du tout quand la macro colle le texte à la fin ?

  11. #11
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut Bloquer la mise à jour de l'affichage
    Dernier problème : tu saurais quoi faire pour que l'affichage ne bouge pas du tout quand la macro colle le texte à la fin ? .
    Bonjour,

    Il est possible de figer l'affichage de l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    Puis permettre sa mise à jour en lui affectant la valeur true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    Cependant, cela ne fonctionnera pas avec l'objet selection, il faudrait utiliser un objet de type range à la place.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 159
    Points : 73
    Points
    73
    Par défaut
    Merci pour ta réponse.

    En fait, utiliser Application.ScreenUpdating = False c'est ce que j'avais fait au début et j'avais en effet constaté que ça ne marchait pas.

    Et je suis incapable d'adapter le code pour
    utiliser un objet de type range à la place
    de l'objet selection.

    S'il passe ici des âmes charitables, je veux bien un coup de main là-dessus.

    ...hmmm : ça n'inspire personne ?

    :o(

Discussions similaires

  1. [E-02] Macro pour insérer une ligne
    Par HQ_LG4 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/10/2008, 00h07
  2. Macro pour envoyer un mail à partir d'un formulaire
    Par aurore1008 dans le forum IHM
    Réponses: 2
    Dernier message: 17/06/2008, 16h16
  3. Macro pour envoyer mail via lotus notes
    Par Debutante-Excel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2008, 09h37
  4. macro pour impression dernière ligne excel
    Par schwoby dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2007, 14h33
  5. Excel : Macro pour positionnement sur ligne
    Par danielh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 08h45

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