Accueil > Forum > > > > Fonction VBA pour excel : problème de formule qui s'applique mal
Fonction VBA pour excel : problème de formule qui s'applique mal
mardi 15 avril 2008 à 20:53:21 |
Fonction VBA pour excel : problème de formule qui s'applique mal

SpEeDy_Fire
|
Bonjour, j'ai créé une fonction permettant d'aller chercher des informations dans d'autres feuilles du fichier excel pour traiter différent cas, voici le code: ' prend l'adresse d'une cellule sous forme de String en paramètre Function getSheetCell(cellTxt As String) getSheetCell = Range(Range("A" & (ActiveCell.Row)).Value & "!" & cellTxt).Value End Function
Dans la première colonne figure le nom de la feuille. La fonction fonctionne plutôt bien, sauf que lors que je vais modifier des données par exemple, j'ai des problèmes genre #value, etc qui se propagent dans toute la colonne. Exemple d'utilisation: =( -3*getSheetCell("C8")-2*getSheetCell("D8")-getSheetCell("E8")+getSheetCell("G8")+2*getSheetCell("H8")+3*getSheetCell("I8"))/getSheetCell("J8")/3 Pour calculer une moyenne de différentes options (de -3 à + 3). J'ai également le même genre de problème avec la fonction suivante: Function applyPieChart(cell) If (cell >= 0) Then ActiveCell.Font.ColorIndex = 4 applyPieChart = 3 If (cell < 0.15) Then applyPieChart = "a" End If If (cell >= 0.15 And cell < 0.35) Then applyPieChart = "f" End If If (cell >= 0.35 And cell < 0.65) Then applyPieChart = "5" End If If (cell >= 0.65 And cell < 0.85) Then applyPieChart = "p" End If If (cell >= 0.85 And cell <= 1) Then applyPieChart = "1" End If Else 'cell <0 ActiveCell.Font.ColorIndex = 3 If (cell > 0.15) Then applyPieChart = "a" End If If (cell <= 0.15 And cell > 0.35) Then applyPieChart = "f" End If If (cell <= 0.35 And cell > 0.65) Then applyPieChart = "5" End If If (cell <= 0.65 And cell > 0.85) Then applyPieChart = "p" End If If (cell <= 0.85 And cell >= 1) Then applyPieChart = "1" End If End If End FunctionSont but est de spécifier un caractère particulier pour un certain pourcentage, seulement voilà, la couleur du texte se "propage" dans les cellule d'origine obtenues à l'aide de la première fonction. Comme je n'ai jamais touché à VBA, je pense que je dois faire une erreur quelque part (utilisation d'ActiveCell peut-être ?), mais où ? Merci d'avance
|
|
mardi 15 avril 2008 à 22:41:25 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

MPi
|
J'essaierais comme ceci Function getSheetCell(cell As Range) getSheetCell = Range("A" & ActiveCell.Row).Value & "!" & cell.Value
ou encore getSheetCell = Range("A" & cell.Row).Value & "!" & cell.Value End FunctionPour la 2e, j'essaierais ceci Function applyPieChart(cell As Range)
et tu remplaces ActiveCell par Cell
MPi² Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
|
|
mercredi 16 avril 2008 à 11:14:14 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

SpEeDy_Fire
|
Merci beaucoup, pour le getSheetCell j'ai finalement changé de la manière suivante: Function getSheetCell(cell As Range, cell1 As String) getSheetCell = Range(cell.Value & "!" & cell1).Value End Function car il seul cell a besoin d'être adaptée à chaque copie spéciale d'une cellule, cell1 reste constant dans mon cas (il s'agit de différents cas ayant chacuns des données propres sur sa propre feuille). Par contre pour applyPieChart en procédant de cette manière c'est la cellule passée en paramètre qui va être modifiée, du moins la couleur du texte et ça ne semble pas avoir changé mon problème. Ce que j'ai dans ma feuille:  Les première lignes obtiennent l'information à traîter avec getSheetCell (chaque ligne = 1 cas) Le deuxième tableau applique une police en fonction du résultat de la cellule correspondante du premier tableau (Pie Charts for Maps) et une couleur en fonction du signe. Le problème est que mon 64.47% par exemple passe en vert parfois, et ca a tendance à se passer sur toutes les colonnes de ce type
|
|
mercredi 16 avril 2008 à 11:23:00 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

MPi
|
C'est possible que ce soit relié à ce que j'appellerais un "bogue" des fonctions personnalisées... Quelquefois, ces fonctions ne se raffaîchissent pas. Lorsque la couleur n'est pas la bonne, place-toi sur une cellule avec la fonction ApplyPieChart, tape F2 puis ENTER. Est-ce que la couleur revient comme elle le devrait ? MPi² Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
|
|
mercredi 16 avril 2008 à 13:45:01 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

SpEeDy_Fire
|
J'ai essayé mais soit ça ne change rien, soit excel crash. Je pense qu'il n'aime pas mes appels multiples à getSheetCell. Au passage j'ai remodifié : getSheetCell = Range(cell.Value & "!" & cell1) Avec ou sans .Value ça crash parfois, donc rien de bien neuf.
|
|
mercredi 16 avril 2008 à 15:13:46 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

Molenn
|
Salut,
Comme quoi pour une même chose, on peut faire plein de truc différent, pour ton premier cas, la fonction que j'aurai faite moi est la suivante :
Public Function getSheetCell(CelluleNomFeuille As Range, CelluleConstantetexte As String) As Currency getSheetCell = Worksheets(CelluleNomFeuille.Value).Range(CelluleConstantetexte).Value End Function
Fonction qui ma foi fonctionne bien, si ce n'est que j'ai des pbs de rafraîchissements lorsque je change les valeurs dans ma seconde feuille, ce qui est normal puisqu'il n'y a pas de liaison entre ma formule et cette feuille. C'est le fait que la référence de la cellule soit passée en Strnig qui empêche le rafraichissement automatique. A mon avis, comme te l'a déjà suggéré MPi, il faudrait déclarer ton 2ème paramètre cell1 en tant que Range lui aussi.
Par contre, pour ta 2ème fonction, j'avoue que je ne la comprends pas du tout : Si ta valeur est négative, elle ne peut rien faire du tout : Comment une même cellule pourrait contenir à la fois une valeur < à 0.15 et > à 0.35 ? If (cell <= 0.15 And cell > 0.35) Toute la partie si la valeur de ta cellule est négative ne peut pas fonctionner, ou du moins, est inutile en tant que telle. Ou alors quelque chose méchappe ^^
J'ai refait ta fonction de cette façon :
Public Function applyPieChart(Cell As Currency) If Cell >= 0 Then 'Valeur positive ActiveCell.Font.ColorIndex = 4 Select Case Cell Case 0.85 To 1 applyPieChart = "1" Case 0.65 To 0.85 applyPieChart = "p" Case 0.35 To 0.65 applyPieChart = "5" Case 0.15 To 0.35 applyPieChart = "f" Case 0 To 0.15 applyPieChart = "a" Case Else applyPieChart = 3 End Select Else 'Valeur négative ActiveCell.Font.ColorIndex = 3 End If End Function
Et moi, je n'ai aucun problème (bon, je n'ai pas la même police que toi d'installée, mais le résultat est le même).
J'avoue que je n'ai aucun souci chez moi (mais je suis obligé de rafraichir manuellement à chaque fois ma formule, ce qui est loin d'être l'idéal).
Molenn
|
|
mercredi 16 avril 2008 à 17:06:24 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

SpEeDy_Fire
|
Ah oui Mea culpa pour la seconde fonction, dans le else j'ai oublié de changer le signe des valeurs comparées :) (j'avais perdu mon vba, du coup, retapé à la va-vite...)
En fait la version correcte ressemble plutôt à ça :
Function applyPieChartFunc(cell As Range) If (cell >= 0) Then ActiveCell.Font.ColorIndex = 4 applyPieChartFunc = 3 If (cell < 0.15) Then applyPieChartFunc = "a" End If If (cell >= 0.15 And cell < 0.35) Then applyPieChartFunc = "f" End If If (cell >= 0.35 And cell < 0.65) Then applyPieChartFunc = "5" End If If (cell >= 0.65 And cell < 0.85) Then applyPieChartFunc = "p" End If If (cell >= 0.85 And cell <= 1) Then applyPieChartFunc = "0" End If Else 'cell <0 ActiveCell.Font.ColorIndex = 3 If (cell > -0.15) Then applyPieChartFunc = "a" End If If (cell <= -0.15 And cell > -0.35) Then applyPieChartFunc = "f" End If If (cell <= -0.35 And cell > -0.65) Then applyPieChartFunc = "5" End If If (cell <= -0.65 And cell > -0.85) Then applyPieChartFunc = "p" End If If (cell <= -0.85 And cell >= -1) Then applyPieChartFunc = "0" End If End If End Function
|
|
mercredi 16 avril 2008 à 17:53:20 |
Re : Fonction VBA pour excel : problème de formule qui s'applique mal

SpEeDy_Fire
|
En fait le problème semble venir de activeCell. Lorsque que je raffraichis une donnée dans le premier tableau, si le résultat est <0, le texte passe en rouge. Donc si je comprends bien, dans mon tableau du bas qui utilise applyPieChartFunc, activeCell est en fait la cellule sélectionnée au moment ou la formule est raffraichie, et non la "vrai" cellule courante. Y'a pas moyen de corriger ça ?
|
|
Cette discussion est classée dans : end, cell, if, applypiechart, getsheetcell
Répondre à ce message
Sujets en rapport avec ce message
Incrémentation pour progressbar [ par sfab41 ]
Bonjour!J'ai fais une macro qui me permet de mettre à jour une liste à partir d'un dossier en 2 temps1) pour chaque cellule de la plage, si le contenu
masquer colonne automatiquement sur excel [ par draggeon ]
bonjour tout le monde j'ai une partie de tableur qui a le format suivant (L5:DQ603) ce que je souhaite c'est que pour les colonnes vides soient masqué
Etendre le range (plage) tant que la cellule est non vide ou jusqu'à ce que la 1ère cellule non vide soit détectée [ par gondrule1 ]
Bonjour, table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding
Extraire données d'une chaine de caractères avant de l'afficher [ par harryweb77 ]
Bonjour, Je suis complètement débutant. J'ai réussi à modifier un petit terminal série (RS232) que j'ai récupéré sur la toile en y ajoutant mes éléme
UserForm et ListBox [ par Akeen56 ]
Bonjour, je me permets de poster pour un problème que je rencontre dans un formulaire. Le but est le suivant: renseigner l'utilisateur sur la signi
Récupérer les préférences utilisateur sur une fenêtre MAIN en VB 2010 ??? [ par Jokyone ]
[code=vb] Récupérer les préférences utilisateur sur une fenêtre MAIN en VB 2010 ??? Private Sub Frm_MAIN_Resize(ByVal sender As System.Object, B
un graphe du .ChartType = xlColumnStacked sur excel 2003 [ par hobine ]
Bonjour, j'aimerai mettre ces données sur un histogramme empilé mais je ne connais pas comment faire. Vous trouverez ci-dessous un bout de mon program
[VBA Excel] Erreur 1004 lors d'un recalcul automatique [ par jpvito ]
Bonjour, J'ai la formule suivante dans la cellule G8 : [code=autre]=ESTDOUBLON(A8;C8)[/code] Avec la macro suivante : [code=vb] Private Const nVERT
AIDE modification code [ par Angecedric ]
Bonjour à tous, Depuis plusieur semaine j'ai modifié un programme pour la gestion de salle de réunion sous EXCEL. Après la création d'une salle, l'ut
Livres en rapport
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|