Se connecter / S'enregistrer
Votre question

[calcul] [macro] annalyser le contenu d'une cellule

Tags :
  • Programmation
Dernière réponse : dans Programmation
4 Octobre 2008 13:12:21

salut,

Je travail sur une suite de code de 6 nombres séparés par un espace. chacun des codes est contenu dans une seule cellule.
ex :
3 10 16 23 25 37
6 26 35 39 46 48
2 4 11 13 16 19


Je cherche à faire une macro qui analyserait le contenu de chaque cellules et qui pourrait me supprimer tous les codes se terminant par un nombre choisi. Par ex: le nombre 37

Si quelqu'un aurait une indication à me donner, ce serait vraiment sympa, parce que cela ne doit pas être très difficile, mais comme je ne connait pas grand chose en programmation ni aux commandes existantes, cela m'avancerait considérablement dans mon travail.

Merci infiniment.

Luxcibel

Autres pages sur : calcul macro annalyser contenu cellule

4 Octobre 2008 17:56:40

Salut,
Quel logiciel utilises-tu? OpenOffice, Excel?


Pour Excel, tu pourrais par exemple faire une fonction/routine VBA, qui prend en paramètre ton nombre sous forme de texte, et la zone sur laquelle tu veux travailler;

Tu fais une boucle (for each) sur cette zone;

Pour chaque case de la zone, tu compares la valeur de la case à ton nombre (opérateur like);

Si le code est de la bonne forme, tu supprime la ligne (je suppose que c'est ce que tu veux), sinon tu ne fais rien;

tu passes à la ligne suivante.


Après, tu appelles cette fonction depuis une autre fonction, qui se charge de lui passer les paramètres, par exemple à l'aide d'un inputbox et de la sélection faite sur la feuille de calcul par l'utilisateur.

En tout cas c'est l'idée qui me vient comme ça.
La syntaxe exacte dépend de ton logiciel, donc il faut plus d'infos.
4 Octobre 2008 20:13:15

Merci beaucoup pour cette info, ça me donne déjà une piste de recherche.
il s'agit d'openoffice calc.

Je ne sais pas si j'ai bien tout compris, mais j'ai essayé ceci :
- j'ai débuté l'enregistrement d'une macro.
- je suis allé dans une cellule et j'ai sélectionné la dernière valeur.
- j'ai stoppé l'enregistrement.

En faisant cela, je suis partie du principe qu'openoffice me générerait un début de code utilisable. je n'ai plus qu'à insérer une ligne de comparaison de valeur par rapport à cette mémoire de valeur et puis, si c'est inférieur à 37, je supprime la cellule. je fais une boucle pour que tous ça soit répété sur chacune des cellules.

voici le code que cela m'a donné :
  1. sub XX
  2. rem ----------------------------------------------------------------------
  3. rem define variables
  4. dim document as object
  5. dim dispatcher as object
  6. rem ----------------------------------------------------------------------
  7. rem get access to the document
  8. document = ThisComponent.CurrentController.Frame
  9. dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  10.  
  11. rem ----------------------------------------------------------------------
  12. dim args1(0) as new com.sun.star.beans.PropertyValue
  13. args1(0).Name = "ToPoint"
  14. args1(0).Value = "$A$1"
  15.  
  16. dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
  17.  
  18. rem ----------------------------------------------------------------------
  19. dim args2(0) as new com.sun.star.beans.PropertyValue
  20. args2(0).Name = "ToPoint"
  21. args2(0).Value = "$A$1"
  22.  
  23. dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
  24.  
  25. end sub


donc là, j'ai rajouté la ligne suivante :

  1. if [args2(0).Value = 20]then [dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())]


Sauf que ça ne marche pas.
pourrais-tu me dire se qui cloche ?

merci beaucoup
Contenus similaires
5 Octobre 2008 00:21:10

Hmm... Le problème, c'est que je ne connais pas le langage utilisé par OpenOffice.
En regardant juste le code, je pense que args2(0).Value contient juste "$A$1" (du texte en somme) et ne fait donc pas référence à la cellule. Donc tester if [args2(0).Value = 20] ne peut pas fonctionner.

Si tu te sens d'attaque pour étudier leur langage, leur documentation a l'air pas mal:
http://fr.openoffice.org/Documentation/How-to/indexht-p...
http://wiki.services.openoffice.org/wiki/Extensions_dev...
Mais bon, c'est vraiment histoire d'avoir l'impression de servir à quelque chose, parce que là je ne peux pas trop t'aider. Il faudrait ou bien que tu apprennes au moins en partie le langage (ça prend du temps qu'on a pas forcément, surtout pour un besoin ponctuel), ou alors qu'un autre membre du forum qui le maîtrise t'apporte son aide.
Peut être même qu'il existe une fonctionnalité toute simple d'OpenOffice qui fasse ça directement, mais je ne la connais pas.
6 Octobre 2008 23:09:14

Merci beaucoup pour les liens, ça me sera de toutes façons utile...

sinon j'ai trouvé la macro pour Excel, ça marche très bien:

  1. Sub supp()
  2. Dim r As Long, c As Range
  3. r = InputBox("Supprimer si nombre terminal =", "Supprimer cellules dans la sélection")
  4. For Each c In Selection
  5. If Right(c.Value, Len(r) - 1) = " " & r Then c.Value = ""
  6. Next c
  7. End Sub


Merci à Eriiic
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS