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 07/01/2008, 15h06   #1
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
Par défaut Nommer des cellules

Bonjour à tous,

J'ai à faire un traitement sur une chaîne de caractères que j'ai choisi de placer dans une cellule de tableau. Dans d'autres cellules, j'ai placé 4 paramètres qui ont été préalablement saisis et qui me servent à traiter la chaîne.

J'ai utilisé des signets que j'ai définis en sélectionnant la cellule pour chacun d'eux. Tout fonctionne mais si je modifie le tableau, les signets ne correspondent plus (il gardent leur position ligne, colonne dans le tableau).

Ma question : existe-t-il un moyen de "nommer" une cellule de façon fixe (comme dans EXCEL) ou faut-il utiliser autre chose ?

Ci-joint, le début de mon code. A noter que la méthode que j'ai utilisée n'est peut-être pas la meilleure car en VBA EXCEL je me débrouille mais pour Word je n'ai pas encore fait grand chose. J'ai tourné dans l'aide mais je n'ai rien vu et dans les sujets évoqués ici non plus.

Merci d'avance (ne perdez pas trop votre temps, mon problème n'a rien de professionnel!)

Cordialement

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
Option Explicit
 
Public ChaîneEntrée As Variant
Public ChaîneTraitée As Variant
Public Sortie As Boolean
Dim Départ As Long
Dim NbCarAprendre As Long
Dim NbCarAsauter As Long
Dim Arrivée  As Long
 
 
 
Sub Décodage()
Dim Position As Long
Dim Compteur As Long
Dim Reste As Long
Dim NbGroupes   As Long
 
' ----- Récupération des données
Selection.GoTo What:=wdGoToBookmark, Name:="TexteDécodé"                     ' Efface le texte décodé précédent
Selection = ""
Selection.GoTo What:=wdGoToBookmark, Name:="PosDeDépart"                     ' Récupère les 4 données de positions figurant dans les cellules de tableau
Départ = Val(Selection)
Selection.GoTo What:=wdGoToBookmark, Name:="NbCaracAprendre"
NbCarAprendre = Val(Selection)
Selection.GoTo What:=wdGoToBookmark, Name:="NbCaracAsauter"
NbCarAsauter = Val(Selection)
Selection.GoTo What:=wdGoToBookmark, Name:="PosDarrivée"
Arrivée = Val(Selection)
Selection.GoTo What:=wdGoToBookmark, Name:="TexteAdécoder"                    ' Met dans une chaîne le texte à traiter figurant dans une cellule de tableau
ChaîneEntrée = Selection.Range.Text
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 15h53   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
On ne peut pas nommer des cellules en Word.

Petite remarque : pour un signet, on ne se déplace pas.

Code :
ActiveDocument.Bookmarks(1).range.Text = "MonTexte"
C'est beaucoup plus rapide.

Si tu définis une colonne avec des données précises, tu peux toujours faire une comparaison, et lorsque tu trouves la bonne donnée, c'est la bonne ligne.

Code :
1
2
3
4
5
6
7
Dim iR as Integer
Dim tbl as Table
 
Set tbl = ActiveDocument.Tables(1)
For iR = 2 to tbl.Rows.Count
    If Left(tbl.Cell(i,1), (Len(tbl.Cell(i,1))-2)) = "MonTexte" Then .....
Next iR
Si toutes tes lignes bougent ensembles, la référence bougera aussi.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 16h12   #3
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
Bonjour,

Merci pour cette réponse rapide. Je n'ai pas tout compris à la lecture mais cela va me permettre de faire des essais et d'aller chercher d'autres points dans l'aide. Je reviendrai ensuite.

Cordialement
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 16h37   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Si je détaille un peu plus.

Pour accéder à une ligne de ma table.
Je compare la valeur de ma première cellule à une valeur que je connais X par exemple.

Je fais une boucle sur les lignes, mais j'adresse ces lignes par leur position dans la table.

Cell(i,1) : j'utilise la cellule de la ligne i et de la colonne 1.
Si cette cellule vaut X, je suis sur la bonne ligne, j'ai donc accès à mes autre cellules par Cell(i , 2); Cell(i,3) et ainsi de suite pour mes autres cellules dans la lignes.

La raison de la fonction left est la suivante : si tu mesures la longueur de chaîne d'un test contenu dans une cellule, tu auras toujours 2 caractères en trop.

Ces caractères sont un retour à la ligne vbCrLf et une marque de fin de cellule.

Pour faire une comparaison valable, je dois les enlever.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 16h53   #5
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
D'accord, cela veut dire que pour un tableau défini, en sachant quel est le contenu de l'une de cellules (un titre par exemple), je peux trouver le contenu des autres cellules.

Le problème est que si demain quelqu'un ajoute une cellule intercalée entre les autres ou bien modifie le titre ou la position de ma cellule de référence, cela ne fonctionne plus, il faut reprendre tout le code. C'est bien cela ? Et il n'y a pas de solution ?

Cordialement
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 17h38   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
c'est bien ça.
La seule solution, qui ne semble pas te séduire, ce sont les signets sur une cellule.

Je viens d'essayer, et chez moi, si je mets un signet sur une cellule, il se déplace avec la cellule.

Il y a aussi les champs de formulaire.

Le tout est de connaître les tenants et les aboutissants.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 18h04   #7
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
Ce n'est pas que les signets ne me plaisent pas mais si je rajoute des colonnes dans mon tableau actuel, les signets ne se déplacent pas avec la cellule, c'est pour cela que j'ai mis un message, parce que cela me paraissait bizarre. Je pense qu'il doit y avoir un problème dans mon fichier car avec un nouveau fichier j'ai fait un tableau et là, cela à l'air de suivre...comme chez toi.

J'avais même essayé .Bookmark(n), mais pareil, les signets changeaient de N° si je modifiais les cellules. Comme je commence en VBA WORD, j'ai pensé que cela venait de moi...

Je vais reprendre un nouveau fichier, copier ma macro et voir si le défaut disparaît !

Encore merci et à bientôt

Cordialement
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 18h42   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Reviens nous voir quand tu veux !

Perso, les signets je les nommes S01, S02, S03 c'est plus rapide, je n'utilise un nom autre que lorsque je n'ai que quelques signets et que je dois retrouver rapidement.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 19h37   #9
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
J'ai trouvé d'où vient ce problème mais je ne sais pas si c'est un bogue ou non.

Si dans le tableau, je définis le signet comme étant la position du curseur, pas de problème, je peux modifier le nombre de lignes de colonnes : le signet désigne toujours la même place (ce qui est sympa....quand même... ).

Si dans ce même tableau, je définis le signet en sélectionnant la cellule (pour pouvoir récupérer directement son contenu par VBA), le signet ne suit pas la cellule mais garde la position ligne/colonne qu'il avait dans le tableau lorsqu'il a été défini. Je ne sais pas si cela a une raison ou si c'est une farce de Bill mais ça me laisse perplexe.

Je pense que je vais traiter ça avec des boîtes de dialogue. Si ça se gère à peu près comme avec EXCEL je devrais m'en sortir!

Hors sujet : sais-tu si une chaîne contenue dans une cellule de tableau a une limite de longueur particulière ou si c'est la même limite que les autres (théoriquement 2 milliards de caractères). Je n'ai rien trouvé dans l'aide.

Cordialement
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 20h23   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Tu comptes mettre 2 milliards de caractères ??

Les limites sont loin, très loin.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 20h49   #11
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
Non, c'est pour quelqu'un qui voudrait, pour l'instant, traiter un livre de 400 pages, cela fera beaucoup moins que 2 milliards de caractères! De toutes façons, si c'est trop, il faudra le traiter en plusieurs fois. Je sais qu'il a essayé la petite application d'essai que je lui ai faite avec 120 pages sans problème.

Mes précédentes questions ont pour objet de me permettre de tout paramétrer pour pouvoir faire ensuite plus facilement des modifications car, comme souvent, les gens ne définissent pas le problème et demandent des modifs au fur et à mesure de l'arrivée de leurs idées!

Je pense que je vais passer en boîte de dialogue mais il faut que je voie comment mettre en mémoire les paramètres entrés, pour les remettre dans la boîte à la session suivante (dans EXCEL, je les mets dans la feuille) là ça m'ennuie un peu de les mettre dans un tableau car il me semble que l'on ne peut pas protéger des parties de document... Enfin, je vais voir...

Cordialement

Bonne fin de soirée.
mécano41 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 20h57   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 360
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 360
Points : 29 280
Points : 29 280
Pour un document volumineux, il existe des solutions simples.

La première est de travailler en petite parties, comme des chapitres.

Soit 1 chapitre par fichier.

Pour tout réunir, créer un nouveau fichier par exemple global, passer en mode plan.

Au niveau de document maître, ajouter des sous documents.

Le tour est joué.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 07h34   #13
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 68

Informations forums :
Inscription : décembre 2007
Messages : 70
Points : 18
Points : 18
Merci pour ces renseignements

A bientôt
mécano41 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 14h07.


 
 
 
 
Partenaires

Hébergement Web