Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2850 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ecriture d'une formule qui va chercher un onglet X

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecriture d'une formule qui va chercher un onglet X

n°1842807
vincenth16
Posté le 25-01-2009 à 18:31:29  profilanswer
 

Bonjour,
 
Bon le titre n'est pas très explicite. En fait, je cherche tout simplement à rapatrier dans la formule suivante un nom d'onglet qui a été renommé précédemment :
 
Exemple : Nom de l'onglet (ou de la feuille) = Feuil4
 
Sheets("Feuil4" ).Name = ABCD 'je donne donc une valeur à mon anglet car le nom de la feuille peut changer
Sheets("Feuil1" ).Select
Range("A1" ).Select
Activecell.FormulaR1C1 = "=IF(R3C10=RC[-1],'ABCD'!R[25]C[12]=5,0)"

 
Sauf que ça ne fonctionne pas, il cherche une feuille qui s'appelle ABCD au lieu d'aller chercher la "feuil4"...J'ai essayé avec et sans les apostrophes, mais ça ne change rien...
 
Quelqu'un à une idée ?
 
Merci d'avance.
 

mood
Publicité
Posté le 25-01-2009 à 18:31:29  profilanswer
 

n°1842919
pazairunik
Posté le 25-01-2009 à 23:39:52  profilanswer
 

essaie avec si au lieu de if (suivant les versions de excel) et avec des ";" au lieu des  "  '  "
 
ex d'un contenu de cell sous excel2007 : =SI(N8+stats!H28=1;1;2)
stats etant une feuille

n°1842960
vincenth16
Posté le 26-01-2009 à 09:41:01  profilanswer
 

En fait j'utilise Excel 2003, ça ne fonctionne pas avec si...Il doit forcément y avoir un moyen d'intégrer dans une formule une valeur se référant au nom d'un onglet...
 
Je continue de chercher...

n°1843456
pyrof
Posté le 27-01-2009 à 08:19:43  profilanswer
 

Bonjour,
 
Et oui, on est souvant confronté au problème que les utilisateurs change le nom des onglets. Et là plus rien ne fonctionne.
 
La solution  est de ne pas utiliser le nom apparent de l'onglet.
Comment faire :
 
Dans l'éditeur visual basic, on voit les forms, les modules et aussi les feuilles exel
 
Si tu cliques sur une feuille et tu fais F4
Dans la boite de dialogue tu vois 2 fois name ( avec et sans parenthèse) qui ont comme valeur "Feuil1"
 
l'élément Name est le nom qui apparaît dans l'onglet et c'est celui qui est utlisé dans sheets("feuil1" ).select.
 
 
L'élément (Name) est en fait le code name que tu peux changer. Pour exemple met ma_feuille.
Maintenant en vbA on peut écrire ma_feuille.select
 
Par ce système les macros sont indépendantes du nom apparent des onglets.
 
Voir la fonction Codename de vba

n°1843477
vincenth16
Posté le 27-01-2009 à 10:07:50  profilanswer
 

Merci mais je ne comprend pas bien ce que tu veux dire.  
 
Aurais-tu un exemple à proposer car de mon côté, dans la formule dès que je met autre chose que le nom exact de l'onglet concerné, la macro ne trouve pas l'onglet et ne veux pas aller chercher, ce qui parait normal, mais dans toutes les macro que j'ai faites jusqu'à présent, il était toujours possible de renommer une feuille, un cellule, un valeur dans une cellule, etc... pour s'en servir dans la suite de la macro. Mais apparement ça ne fonctionne pas dans les formules...

n°1843602
pyrof
Posté le 27-01-2009 à 13:46:22  profilanswer
 

Re
 
suivant ce code :
 

Sub toto()
Sheets("Feuil1" ).Name = "ABCD"
End Sub


 
ta feuille qui se nommait "Feuil" de vient "ABCD"
 
si tu lance une seconde fois cette macro, tu auras un message d'erreur comme quoi la feuil1 n'existe pas
 
Sous editeur VBA
selection feuil1 et la fouche F4
 
La première ligne tu as (Name)   Feuil1
Change Feuil1 en ma_feuille
 
et ecrit le code suivant
 

Sub toto()
ma_feuille.name="ABCD"
End Sub


 
exécute à nouveau ta macro,  
 
change manuellement le nom
exécute à nouveau ta macro
 
Plus aucun problème

n°1843971
vincenth16
Posté le 28-01-2009 à 01:58:21  profilanswer
 

Re
 
En fait j'aimerai ne pas avoir à changer manuellement le nom de la feuille.
 
Pour tout expliquer, dans la macro j'ai une imput box qui me demande le nom d'un onglet à créer (qui peut donc varier à chaque fois que je lance la macro). La valeur rentrée dans cette box est appelée "ABCD" ainsi je n'ai pas à reporter dans ma macro le nom exact de l'onglet puisqu'il aura toujours la meme valeur (ABCD) a chaque lancement de macro.
 
Vient ensuite la formule cité ci-dessus qui fait référence à l'onglet qui vient d'être créé qui s'apelle par exemple "Bonjour" mais qui a toujours comme valeur "ABCD". C'est là que je bloque sur la façon de faire comprendre à ma formule qu'il doit chercher ABCD, non pas la feuille qui se nomme ABCD mais l'onglet qui fait référence, c'est à dire "Bonjour".
 
Je ne sais pas si je suis clair ! Mais je ne suis pas sur que la réponse précédente corresponde à ce que je cherche à faire...

n°1843996
pyrof
Posté le 28-01-2009 à 08:36:21  profilanswer
 

Bonjour,
 
Je commence a comprendre
 
si tu écrits :
Activecell.FormulaR1C1 = "=IF(R3C10=RC[-1],'" & ABCD & "'!R[25]C[12]=5,0)"

n°1844307
vincenth16
Posté le 28-01-2009 à 17:10:26  profilanswer
 

Bonjour, oui c'est exactement ça. Je cherche la syntaxe pour ma formule.
 
J'ai essayé avec ta formule mais ça ne marche pas. J'ai essayé toutes les combinaisons avec les ' les " et les & mais ça ne marche pas...
 
Je suis sur que c'est possible !

n°1845100
SuppotDeSa​Tante
Aka dje69r
Posté le 30-01-2009 à 10:38:41  profilanswer
 

Bonjour
 
Ca fonctionne ce que te dit pyrof.  
Sauf, que ta formule est bizare... Tu veux a partir d'une formule excel donner la valeur 5 à une cellule... Ca, ca ne fait pas avec des formules.*
C'est comme si tu ecrivais dans une cellule : =Si(A1=5;A2=12;0)
Tu ne peux pas avec des formules dire que A2=12
 
De plus tu te positionnes sur A1 et tu testes sur RC[-1] il n'y a pas de cellule avant A1... Enfin si, IV1... Mais je ne pense pas que tu veuilles tester sur la 255ème colonne de ta feuille... si ?
Ex : si tu te mets en C1, RC[-1] te donnerais B1. Si tu te mets en B1, RC[-1] te donnerais A1. Donc la tu te positionnes en A1 (avec ton Range("A1" ).Select ) et tu veux avec RC[-1] la colonne avant A1.
 
Je pense qu'il vaudrait mieux que tu nous expliques ce que tu souhaites faire, avec des mots. On pourra t'aider, la tu as des tests illogiques, et de references illogiques.


Message édité par SuppotDeSaTante le 30-01-2009 à 10:57:25

---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 30-01-2009 à 10:38:41  profilanswer
 

n°1845198
vincenth16
Posté le 30-01-2009 à 13:38:19  profilanswer
 

Pour A1 c t juste un exemple et la formule est un exemple aussi. C'était pour simplifier ce que j'ai réellement dans ma macro.
 
Je ne sais pas comment être plus clair dans mes explications...Je ne peux pas non plus vous mettre ma macro qui est super longue.
 
Ca ne me semblait pourtant pas compliqué à faire étant donné qu'avec les macro et avec Excel tout est possible ou presque !!
 
En gros voici les étapes pour résumer :
1. Je demande avec une Imput box à la personne qui va utiliser excel et qui va appliquer la macro d'entrer un nom
2. Ce nom est réutilisé de façon identique renommer un nouvel onglet créé
3. Pour ce faire je suis obligé de donner une valeur au nom donné par la personne et donc à l'onglet qui va être créé :
Dim Grille As String
Grille = Application.InputBox(prompt:="Entrez le nom de la grille (31 caractères max)", Type:=2)
Sheets.Add
ActiveSheet.Name = Grille

3. Je fais tout un tas de manip sur cet onglet et sur l'onglet de départ
4. Ensuite sur le nouvel onglet je rentre une formule dans une cellule (la formule citée plus haut)
5. Cette formule va chercher une valeur dans l'onglet X qui a été créé et qui s'apelle dans ma macro "GRILLE"
 
Sauf que la formule demande à ce que le nom réel de l'onglet soit écris et non pas le nom "GRILLE". Et pourtant je ne peux pas faire autrement puisque je ne connais pas au moment ou je créé la macro le nom que va prendre l'onglet...je sais pas si vous me suivez.
 
Bref je cherche donc une façon d'intégrer ce nom d'onglet dans ma formule.
J'ai pensé également à recopier dans une cellule le nom de l'onglet puis que la formule se réfère à la valeur de la cellule pour chopper le bon onglet mais ça revient au meme ça ne fonctionne pas...
 
Voilà

n°1845235
SuppotDeSa​Tante
Aka dje69r
Posté le 30-01-2009 à 14:27:08  profilanswer
 

Bah ce que t'a mis pyrof marche tres bien...
 
Activecell.FormulaR1C1 = "=IF(R3C10=RC[-1],'" & ABCD & "'!R[25]C[12]=5,0)"  
 
Je me repete peut etre, mais cette formule ne peut pas marche dans excel, justement a cause du ABCD & "'!R[25]C[12]=5 car tu ne peux pas donner une valeur a une cellule par le biais d'une formule.
 
Si maintenant je garde ton exemple, essaie avec ca :

Code :
  1. Sub toto()
  2. Dim Grille As String
  3. Grille = Application.InputBox(prompt:="Entrez le nom de la grille (31 caractères max)", Type:=2)
  4. Sheets.Add
  5. ActiveSheet.Name = Grille
  6. Sheets("Feuil1" ).Cells(1, 1).FormulaR1C1 = "=" & Grille & "!R1C1"
  7. End Sub


 
Si tu tapes 15 dans A1 de ta nouvelle feuille qui est créée (moi en l'occurence je l'ai appelé Toto), tu verras que dans A1 de Feuil1 il y a bien 15. Car je me retrouve avec ca en A1 de la Feuil1 : =Toto!$A$1
 
Donne nous plutot la vrai formule que tu veux utiliser plutot qu'un exemple qui ne peut pas marcher pour plusieurs raisons...


Message édité par SuppotDeSaTante le 30-01-2009 à 14:28:24

---------------
Soyez malin, louez entre voisins !
n°1845576
vincenth16
Posté le 31-01-2009 à 16:59:39  profilanswer
 

Ok je commence à comprendre. Voici donc ma formule :
 
ActiveCell.FormulaR1C1 = "=IF(R3C10=RC[-1],INDEX('Grille'!R[-29]C[-27]:R[-13]C[1],MATCH(R5C4,'Grille'!R[-29]C[-28]:R[-13]C[-28],0),MATCH(R6C4,'Grille'!R[-30]C[-27]:R[-30]C[1],0)),R[20]C[-2])"
 
Une formule qui va chercher dans une valeur dans un tableau à double entrée(formule index, equiv).
 
J'ai donc modifié ma formule suite à l'exemple de dje69r et ça marche ! C'était donc bien un pb de syntaxe ! il fallait gérer entre les guillemets, les apostrophes et les &.
 
Merci à vous tous !
 
Pour info la formule modifiée : ActiveCell.FormulaR1C1 = "=IF(R3C10=RC[-1],INDEX(' " & Grille & " '!R[-29]C[-27]:R[-13]C[1],MATCH(R5C4,' " & Grille &" '!R[-29]C[-28]:R[-13]C[-28],0),MATCH(R6C4,' " & Grille & " '!R[-30]C[-27]:R[-30]C[1],0)),R[20]C[-2])"
 
A bientôt !


Message édité par vincenth16 le 31-01-2009 à 18:59:09
n°1845687
SuppotDeSa​Tante
Aka dje69r
Posté le 31-01-2009 à 23:17:33  profilanswer
 

Impec  :jap:


---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ecriture d'une formule qui va chercher un onglet X

 

Sujets relatifs
float et écriture à 0.0f[JAVASCRIPT/Ajax] Menu par onglet coulissant assez Special
Probleme Ecriture base de registre VBEcriture dans un fichier
chercher la balise meta d'un e page html en javaMacro de création d'onglet dans excel
Ecriture de log et accès simultané au fichierécriture et lecture dans la base de registre
[EDIT après avoir bossé un peu] Retour sur le menu principalecriture SQL
Plus de sujets relatifs à : Ecriture d'une formule qui va chercher un onglet X


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR