Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/11/2011, 20h52   #1
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 2
Points : 2
Par défaut Supprimer une page sous condition, par macro dans Word 2003

Bonjour,

Je m'adresse aux spécialistes pour résoudre un petit problème.

J'ai un document Word 2003 qui peut contenir un nombre indéfini de pages.
Toutes mes pages contiennent le texte suivant :

Nombre de cellules déjà contrôlées x où x est égal à un chiffre qui peut varier de 0 à...

Pour m'éviter des impressions inutiles, je dois maintenant supprimer toutes les pages du document qui contiendraient le texte suivant :

Nombre de cellules déjà contrôlées 0

Je dois aussi supprimer toutes les pages qui ne contiennent pas le texte suivant :

Cellules ouvertes

Le document en question ne contient aucun signet et aucun tableau.
Que mettre dans ma macro pour lui faire comprendre cela ?

Merci pour le petit coup de pouce qui pourra me faire avancer
Dreamer84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 23h41   #2
Membre actif
 
Avatar de Souriane
 
Femme Guylaine C.
Assistant aux utilisateurs
Inscription : septembre 2009
Messages : 157
Détails du profil
Informations personnelles :
Nom : Femme Guylaine C.
Âge : 39
Localisation : Canada

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : septembre 2009
Messages : 157
Points : 153
Points : 153
Bonjour Dreamer84,

J'ai bidulé un code pour toi. Essaie-le voir si ça fonctionne.

Aux "experts" qui le liront, svp, n'hésitez pas à simplifier mon code si c'est possible. Je suis en mode "apprentissage"!

Code :
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
Sub Dreamer84()
 
Dim NumPage As Integer
Dim NbLigne As Long
Dim NombrePage As Integer
 
Dim iChaine(1 To 2) As String
'Déterminer ici les chaînes à rechercher
 iChaine(1) = "Nombre de cellules déjà contrôlées 0"
 iChaine(2) = "Cellules ouvertes"
 
'Recherche de les chaînes une après l'autre en commençant par iChaine(1)
For I = 1 To 2
 
Do
'Déplacement du point de sélection au début du document
Selection.HomeKey unit:=wdStory
 
    Selection.Find.ClearFormatting
        With Selection.Find
            .Text = iChaine(I)
            .Execute
        End With
 
If Selection.Find.Found = False Then
 Else
'Si la chaîne est trouvée est trouvée, alors :
 
'Récupération du numéro de la page où la chaîne est rencontrée
NumPage = Selection.Information(wdActiveEndPageNumber)
 
NombrePage = ActiveDocument.BuiltInDocumentProperties("Number of Pages")
''If NombrePage < NumPage Then Exit Sub
 
'Déplace le curseur après le dernier charactère de la page en cours en allant à la page suivante puis en revenant d'un caractère
ActiveDocument.Range.Select
Selection.GoTo What:=wdGoToPage, _
 Which:=wdGoToAbsolute, Count:=NumPage + 1
Selection.Move unit:=wdCharacter, Count:=-1
 
        'Cependant, si la chaîne est trouvée sur la dernière page du document, le curseur se repositionne au bon endroit
        If NombrePage = NumPage Then Selection.Move unit:=wdCharacter, _
        Count:=ActiveDocument.Range.Characters.Count
 
'Détermine combien de ligne la page courante compte (=ligne de la page se trouve le curseur actuellement)
NbLigne = Selection.Information(wdFirstCharacterLineNumber)
 
'Si le curseur se trouve sur la dernière page du document NbLigne sera réduit de un
If NombrePage = NumPage Then NbLigne = NbLigne - 1
 
Selection.Move unit:=wdCharacter, Count:=1
 
'Étend la sélection du nombre de ligne de la page courante (NbLigne)
With Selection
.HomeKey unit:=wdLine, Extend:=wdMove
.ExtendMode = True
.MoveUp unit:=wdLine, Count:=NbLigne
.ExtendMode = False
End With
 
'Efface la sélection en cours
Selection.delete
 
End If
  Loop While Selection.Find.Found = True
 
Next I
 
End Sub
Souriane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 08h07   #3
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 2
Points : 2
Merci beaucoup Souriane.

Les premiers tests que j'ai effectué sont très concluants et je ne sais pas
si ton code est optimisé mais dans tous les cas il fonctionne nickel.

Je vais approfondir les tests ce jour au boulot, mais il est possible que je
puisse avoir besoin d'une petite modification dans un cas de figure bien précis
qu'il va falloir que je teste.

Je mettrais en résolu ensuite.

Encore un grand merci
Dreamer84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h40   #4
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

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

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Bonjour,

Pour optimiser le code, voici quelques pistes :
  • Travailler avec l'objet range plutôt que selection. L'objet selection oblige la pagination ce qui peut être lent sur des documents de taille importante.
  • Passer le document en mode normal au lieu de page.
  • Eventuellement désactiver les options de pagination.
  • Désactiver l'affichage, la grammaire et orthographe, etc
  • Désactiver les messages d'avertissements
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 12h38   #5
Membre actif
 
Avatar de Souriane
 
Femme Guylaine C.
Assistant aux utilisateurs
Inscription : septembre 2009
Messages : 157
Détails du profil
Informations personnelles :
Nom : Femme Guylaine C.
Âge : 39
Localisation : Canada

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : septembre 2009
Messages : 157
Points : 153
Points : 153
Merci beaucoup carden!

Si j'ai du temps aujourd'hui, je vais me pencher sur ces points. Car en effet, quand j'ai testé mon code sur une centaine de page, c'était pas assez rapido à mon goût!

Je vais d'ailleurs les garder en note pour mes prochains codes!

Merci pour ton temps, c'est très apprécié!!

Souriane
Souriane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 00h59   #6
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 2
Points : 2
Bonsoir,

J'ai effectué tous mes tests aujourd'hui et c'est parfait !
Mais je ne manquerais pas de suivre ce post si tu proposes une solution
plus rapide d'exécution, car il est vrai que sur de gros documents c'est un peu
long, mais j'ai le temps donc ce n'est pas primordial.

Merci encore


Je mets en résolu
Dreamer84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h47.


 
 
 
 
Partenaires

Hébergement Web