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 :

Modifier la cellule d'un tableau


Sujet :

VBA Word

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Modifier la cellule d'un tableau
    Bonjour. J'ai un tableau et une cellule contenant du texte. A l'intérieur se trouve un mot compris entre deux accolades. Comment dois-je faire pour supprimer ce mot avec ses accolades? Merci pour votre aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2011
    Messages : 24
    Points : 44
    Points
    44
    Par défaut
    Voilà un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub temp()
        Dim tableau As Integer, ligne As Integer, col As Integer
        tableau = 1: ligne = 1: col = 2
        Application.ActiveDocument.Tables(tableau).Cell(ligne, col).Select
        Selection.Delete
    End Sub

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Modifier le contenu d'une cellule d'un tableau
    Merci, mais ça ne me donne pas vraiment la réponse. Ce que je veux, ce n'est pas effacer le contenu d'une cellule mais seulement une partie de ce contenu.

  4. #4
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2011
    Messages : 24
    Points : 44
    Points
    44
    Par défaut
    Pardon... Je propose ce code qui n'est pas forcément le top surtout s'il y a un grand nombre de cellules à scruter avec un grand nombre de mots.

    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
    Public Sub temp()
        Dim tableau As Integer, ligne As Integer, col As Integer, debut As Long, fin As Long
        tableau = 1: ligne = 1: col = 1
        With Application.ActiveDocument.Tables(tableau).Cell(ligne, col)
            début = 0 'Initialisation
            fin = 1 'Initialisation
            While fin < .Range.Words.Count And Left(.Range.Words(fin).Text, 1) <> "}"
                If .Range.Words(fin).Text = "{" Then
                    debut = fin
                End If
                fin = fin + 1
            Wend
            If debut <> 0 Then
                While debut <= fin
                    .Range.Words(debut).Delete
                    fin = fin - 1
                Wend
            End If
        End With
    End Sub

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci beaucoup. J'ai copié le code tel quel et je l'ai appliqué. Et ça marche, c'est exactement ce que je voulais. Par contre, je comprends pas bien la méthode car les lignes de codes ne sont pas expliquées. Il faut que j'étudie à quoi elles correspondent pour pouvoir progresser.

  6. #6
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Arsene12,

    Un simple rechercher/remplacer aurait suffit et sans macro. Comme le code marche et tu sembles vouloir apprendre, on peut t'expliquer si tu as besoin.

    @+

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Rechercher/remplacer
    Bonjour,
    Merci pour cette remarque. Le rechercher/remplacer est très simple à utiliser lorsqu'il s'applique à tout le document, là c'est sur une section précise (une seule cellule d'un tableau), ça complique un peu.

  8. #8
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2011
    Messages : 24
    Points : 44
    Points
    44
    Par défaut
    Voici quelques explications...

    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
    Public Sub temp()
        'Déclaration des variables
        Dim tableau As Integer, ligne As Integer, col As Integer, debut As Long, fin As Long
        'Initialisation du numéro de tableau, de la ligne et de la colonne
        tableau = 1: ligne = 1: col = 1
        'La ligne With permet de simplifier pour réduire la longueur des variables (regarder dans l'aide...)
        With Application.ActiveDocument.Tables(tableau).Cell(ligne, col)
            'Initialisation des variables début et fin
            début = 0 
            fin = 1
            '.Range.Words.Count ==> Nombre de mots de la cellule
            'Tant que fin est strictement inférieur au nombre de de mot ou la première lettre du mot est '}'
            While fin < .Range.Words.Count And Left(.Range.Words(fin).Text, 1) <> "}"
                'Si le mot est '{' alors debut prend la position du mot (fin)
                If .Range.Words(fin).Text = "{" Then
                    debut = fin
                End If
                'Incrémentation de la position du mot
                fin = fin + 1
            Wend
            La dernière position du mot est fin et si début est différent de 0 ('{' détecté) alors...
            If debut <> 0 Then
                'Tant que début est inférieur ou égal à fin
                While debut <= fin
                    'Suppression du mot en qui a pour position début
                    .Range.Words(debut).Delete
                    'La suppression d'un mot décale la position des mots qui les suivent. Du coup je décrémente fin
                    fin = fin - 1
                Wend
            End If
        End With
    End Sub
    N'hésite pas à tester le code en pas à pas. (F8 dans l'éditeur VBA)

    Sepia, je suis intéressé par la méthode de Recherche/Remplace, ce qui simplifierait le code et réduirait le temps d'exécution.
    Est-il possible de rechercher un texte qui commence par un caractère et qui se termine par un autre (ou pas) sans que l'on prenne en compte ce qu'il y a entre ces deux caractères?


    Edit :
    Oui en recherchant \{*\}

  9. #9
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2011
    Messages : 24
    Points : 44
    Points
    44
    Par défaut
    Voilà une méthode un peu plus propre à mon avis...

    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
    Public Sub temp()
        Dim tableau As Integer, ligne As Integer, col As Integer, debut As Long, fin As Long
        tableau = 1: ligne = 1: col = 1
        Application.DisplayAlerts = False
        Application.ActiveDocument.Tables(tableau).Cell(ligne, col).Select
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "\{*\}"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        Application.DisplayAlerts = True
    End Sub

  10. #10
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Arsene12,

    Citation Envoyé par Arsene12 Voir le message
    Le rechercher/remplacer est très simple à utiliser lorsqu'il s'applique à tout le document, là c'est sur une section précise (une seule cellule d'un tableau), ça complique un peu.
    La recherche dans Word peut porter soit sur tout le document soit sur la sélection en cours. Donc il suffit de sélectionner ta cellule, c'est OK.

    Mais le code de Manuel40 est très complet et te permet de te former à VBA.

    @+

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Codes imparfaits
    Merci beaucoup Manuel40 pour les codes. Je tiens malheureusement à signaler qu'il y a des erreurs. Tout d'abord, pour celui de 22h47, il efface toutes les occurences, y compris celles situées en dehors du tableau alors que je ne veux cibler qu'une seule cellule. Pour celui de 12h44, il fait un bug lorsqu'y'a du texte avant la 1ère accolade.

  12. #12
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    août 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2011
    Messages : 24
    Points : 44
    Points
    44
    Par défaut
    Celui de 22h47 fonctionne correctement chez moi.
    Celui de 12h44, je ne sais pas, j'ai juste ajouté des commentaires.
    Celui de 13h18 supprime toutes accolades. C'est de la faute (au programmateur) à la ligne Application.DisplayAlerts = False.
    Cette ligne permet de ne pas afficher le message qui demande si on souhaite remplacer dans tout le document. En fait elle répond "Oui" à la question. Il faudrait trouver un moyen de répondre "Non" automatiquement et là c'est gagné...

  13. #13
    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 : 35
    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
    Bonjour,

    Peut-être utilisé la propriété wrap à wdfindstop.
    Cordialement,
    Christophe

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

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Solution
    Je vous remercie beaucoup. Grâce à vous j'ai la solution.
    Voici donc le code final :

    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
    Public Sub temp()
        Dim tableau As Integer, ligne As Integer, col As Integer, debut As Long, fin As Long
        tableau = 1: ligne = 1: col = 1
        Application.DisplayAlerts = False
        If ActiveDocument.Tables.Count >= 1 Then
        Application.ActiveDocument.Tables(tableau).Cell(ligne, col).Select
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "\{*\}"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        End If
        Application.DisplayAlerts = True
    End Sub

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/05/2014, 20h20
  2. Modifier le contenu d'une cellule d'un tableau dynamiquement
    Par SPACHFR dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/08/2009, 17h45
  3. Réponses: 12
    Dernier message: 07/06/2009, 22h19
  4. Modifier couleur de fond d'une cellule d'un tableau dynamiquement.
    Par fred61 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/03/2009, 03h19
  5. [DOM] Modifier la taille d'une cellule d'un tableau
    Par DoubleU dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/04/2008, 12h46

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