[Catégorie modifiée VB6 -> VBA] Problème de syntaxe je pense...

Résolu
Signaler
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Bonsoir le Forum,

Voici deux petits bouts de code très simples :

Range("E1").Formula = "=10"
Range("E2").Formula = "=-E1"


Dim i&

For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & (i + 1)).Formula = "=-F" & i
Next


Le premier code fonctionne parfaitement. La cellule m'affiche la formule ET la valeur. C'est exactement ce que je recherche.

Par contre, le deuxième code ne fait pas de même !!! Le deuxième range m'affiche la valeur opposée du premier range MAIS la cellule contient un triangle vert m'indiquant un message d'alerte. Or je ne veux pas de ce triangle vert.

Quelqu'un pourrait il me renseigner sur la manière de faire afficher les deux formules pour le code 2 ET ainsi que le résultat correct sans triangle vert pour les 2 range ???


Merci à ceux qui pourront m'aider. Sa me semble être un simple problème de syntaxe ou de compatibilité entre les 2 égals. Mais je ne saisis pas l'erreur...


André

14 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bah ...
Si tu y tiens vraiment :
Application.ErrorCheckingOptions.InconsistentFormula = False
For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & i + 1).Formula = "=-F" & i
Next


Mais j'insiste : c'est dangereuxx.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Salut Bigfish_le vrai,

En effet sur mon exemple il parrait idiot d'utiliser la propriété "Formula" pour attribuer une simple valeur qui ne contient pas de "formule".

Mais il s'agit simplement d'un exemple illustratif. Dans mon code de calcul j'ai bel et bien une formule mathématique. Une bonne grosse formule en fait^^

Donc je le répète, je désire utiliser la propriété "Formula" pour avoir connaissance de la formule ET de la valeur en même temps. C'est indispensable pour la suite.



Je pense que la moins pire des solutions reste encore celle proposée par Ucfoutu qui consiste à la désactivation des alertes Excel.

Pour ce faire j'utilise donc le code suivant qui est placé à la toute fin de ma macro. Juste avant de quitter la macro principale.

Application.ScreenUpdating = True 'Rétablit l'affichage
Application.DisplayAlerts = True 'Rétablit les alertes
Application.ErrorCheckingOptions.BackgroundChecking = False 'Désactive les triangles verts


Du coup une fois la macro effectuée, plus moyen de réactiver les alertes car si je le les réactives juste à la fin de ma macro et bien les triangles reviennent toujours.

Donc je suis obligé de désactiver cette option pour tout excel une bonne fois pour toute. Donc un utilisateur qui utilisera mon code verra son option d'excel désactivé par la suite sans le savoir.

C'est dommage je trouve de modifier les options à l’insu des gens. J'aime pas trop sa. Bon la sa reste léger mais tout de même c'est pas top top^^

Merci pour vos réponses en tout cas. C'est cool. Si jamais vous avez de nouvelles pistes je suis preneur !!!

Bien cordialement,

André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
J'ai finalement résolu mon problème qui était le suivant :

Du coup une fois la macro effectuée, plus moyen de réactiver les alertes car si je le les réactives juste à la fin de ma macro et bien les triangles reviennent toujours.

Donc je suis obligé de désactiver cette option pour tout excel une bonne fois pour toute. Donc un utilisateur qui utilisera mon code verra son option d'excel désactivé par la suite sans le savoir.

C'est dommage je trouve de modifier les options à l’insu des gens. J'aime pas trop sa. Bon la sa reste léger mais tout de même c'est pas top top^^


Il suffit de placer ce code dans ThisWorkBook et pas dans un module standard.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ErrorCheckingOptions.BackgroundChecking = True
End Sub


Comme sa, avant de fermer mon fichier et bien de manière automatique je réactive les alertes d'Excel. Ainsi je ne modifie rien des options des utilisateurs.

Je pense pouvoir clore la discussion maintenant. L'ensemble des solution proposées me conviennent.

Merci à vous tous !

Bien cordialement,

André
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut

Tout d'abord, tu ne fais pas du VB6, mais du VBA. Merci d'y prèter attention pour le choix de la catégorie de la question.

Tu es sous Excel ?
Quelle version ?

"Triangle vert" : Définition ?
Si c'est une alerte, que dit-elle ?
De toute façon, ce message doit être généré par Excel lui-même. La seule solution est de regarder dans les options pour masquer ce "triangle vert" ou bien cherche "triangle vert" dans l'aide.

Que valent les formules des cellules que tu modifies avec ton programme ?
Y vois-tu la formule souhaitée ? (laquelle)

Particularité de ton code :
Dans le premier exemple avec E1 et E2, la formule saisie dans E2 est "=-E1"
Il est possible que Excel le considère comme le négatif de 10 à la puissance 1 qui, comme par hasard, est le négatif de +10.
Il convient de faire un test avec des valeurs plus significatives.
Cela voudrait dire que ta formule n'est pas correcte.
--> Voir FormulaR1C1 comme le fait l'enregistreur de macro

Voilà plein de petits renseignements qui font gagner du temps à tous.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Bonjour,

Pour supprimer cette alerte, sur Excel 2007:
- onglet "Formules"
- "Vérification des alertes"
- "Options..."
- Dans "Formules", décocher "Formules incohérentes avec d'autres formules de la zone"

Cordialement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,

Cette alerte n'est pas due à l'utilisation d'une boucle (elle serait exactement( la même en entrant manuellement, successivement, tes formules).

Excel ne dénonce aucune faute, mais un danger potentiel.
A faire, comme tu le fais, dépendre le résultat d'une fonction de celui d'une autre, qui est lui-même lié à celui d'une autre est extrêmement risqué.

Essaye :

For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & (i + 1)).Formula = "=-F" & i
Next
MsgBox "aucun problème pour l'instant, n'est-ce-pas ? " & vbCrLf & _
"ok ! amusons-nous à supprimer la ligne 3, maintenant "
Rows(3).EntireRow.Delete
MsgBox "ouille , bien évidemment"


Excel te met donc en garde contre la "chose".
Il t'est loisible d'ignorer ce garde-fou (comme te l'a dit GG72), mais ce sera alors une décision qui n'engagera que ta responsabilité.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Bonjour ucfoutu,

Je ne suis pas persuadé que ce triangle ait pour but de nous alerter sur le danger dont tu parles.

Si tu essaies ceci, tu auras la même erreur, et pourtant aucune alerte.
Range("F1").Formula = "=10"
Range("F2").Formula = "=-F1"
MsgBox "aucun problème pour l'instant, n'est-ce-pas ? " & vbCrLf & _
"ok ! amusons-nous à supprimer la ligne 3, maintenant "
Rows(1).EntireRow.Delete
MsgBox "ouille , bien évidemment"


Et si tu essaies ceci, tu aura la même alerte mais pourtant aucun risque d'erreur.
For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & (i + 1)).Formula = "=-10"
Next


Bonne journée.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Excel n'a donc pas su parfaitement gérer son alerte dès la première apparition de la possibilité d'un danger, voilà tout !
Car il est clair qu'en supprimant la ligne "au-dessus" de celle contenant une formule par référence à la ligne qui la précède, et en le fraisant par notation directe (et non relative) la formule pointe sur la cellule qui la contient !

Mais tu as raison également.
Si, dans le 1er cas, le danger est celui des références circulaires, il est autre (mais présent) dans le second où Excel met simplement en garde sur le fait que ces cellules consécutives d'une même colonne contiennent des formules qui ne sont pas du même type, bien que sans réel danger potentiel.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Après plusieurs tests, c'est TOI qui a raison.
Ce que dénonce Excel est uniquement- :
le fait que ces cellules consécutives d'une même colonne contiennent des formules qui ne sont pas du même type
____________________

Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Ce que dénonce Excel est uniquement- :

le fait que ces cellules consécutives d'une même colonne contiennent des formules qui ne sont pas du même type

Oui tout à fait.
En voyant le bon côté des choses, c'est encourageant. Excel peut donc (et doit) encore évoluer.

Dans le cas présent, on peut supprimer cette alerte puisque les formules sont introduites par l'intermédiaire de VBA, d'où un risque quasi nul. La différence entre les formules est bien volontaire de la part de l'utilisateur.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
... et notre ami SERIEUXETCOOL n'aurait-il pas pu fournir cette info dès le début ?
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Re-Bonjour à tous,

Dans un premier temps, merci à vous pour ces commentaires déjà très riches.

Alors les quelques précisions... Oui en effet c'est bien du Vba que je traite et non du Vb6 (j'étais fatigué hier soir on dirais^^). Merci pour avoir modifié la catégorie. De plus je suis sous Excel 2007.


Voici l'alerte donnée par le triangle vert :

"La formule de cette cellule diffère des formules de cette zone de la feuille de calcul"


Ce triangle vert apparait uniquement sur le deuxième petit bout de code que j'ai donné en début de post. De plus ce triangle vert apparait sur le deuxième range et pas le premier. C'est un message d’alerte donné par Excel.

Jack :

La seule solution est de regarder dans les options pour masquer ce "triangle vert" ou bien cherche "triangle vert" dans l'aide


Je ne suis pas d'accord. Il n'existe pas qu'une seule solution pour résoudre ce problème. J'en veux pour preuve que si j'utilise le code suivant, alors je n'ai plus de triangle vert. Mais en contre partie, je perds également l'affichage de ma formule avec la cellule. Ce qui me dérange bcp.

Dim i&

For i =   1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & i + 1) = -Range("F" & i)
Next



GG72 :

Pour supprimer cette alerte, sur Excel 2007:
- onglet "Formules"
- "Vérification des alertes"
- "Options..."
- Dans "Formules", décocher "Formules incohérentes avec d'autres formules de la zone"


Je ne souhaite pas simplement décocher une option d'Excel pour "bricoler" une solution correcte. Je considère que ces aides d'Excel sont importantes et utiles. Les masquer de manière générale ne résoudrait pas mon problème. En effet, si mon code vient à être utilisé sous un autre pc, alors l'utilisateur aura lui aussi ces triangles verts. Et donc -> Même problème.

Une autre solution consisterait en forçant Excel à masquer cette alerte UNIQUEMENT de manière ponctuelle via le code suivant :

Dim i&
With Application.ErrorCheckingOptions
    .OmittedCells   = False
    For i =   1 To 10 Step 2
        Range("F" & i).Formula = "=10"
        Range("F" & (i + 1)).Formula = "=-F" & i
    Next
    .OmittedCells = True
End With


A voir si personne ne propose autre chose de plus correct. Une info que je ne pense pas avoir précisé, je ne souhaite pas de formule RC ! Et de plus je désir voir la formule présente dans la cellule ET le résultat qui lui ai associé.
Le code numéro 2 que j'ai posté en tout début de post fonctionne très bien. Il me de donne les formules ET les résultats. Sauf que j'ai ce triangle vert qui me dérange. C'est juste sa le problème.


Ucfoutu :

Cette alerte n'est pas due à l'utilisation d'une boucle (elle serait exactement( la même en entrant manuellement, successivement, tes formules)


J'ai essayé le code suivant qui ne fait pas intervenir de boucle et je n'ai pas de triangle vert. Le triangle vert vient donc de la boucle non ?

Dim i&
    i   = 5
    Range("F" & i).Formula =   "=10"
    Range("F" & (i + 1)).Formula = "=-F" & i


Ce qui est confirmé par ce que dit GG72 avec le code suivant :

For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & (i + 1)).Formula = "=-10"
Next


Aucun risque d'erreur mais un triangle vert ! Et si on enlève la boucle alors plus de triangle vert...


Conclusion : Quel est le bilan de tout sa alors ?????

Je reste un peu noyé pour ma part. Ma conclusion serait de dire que ce triangle vert apparait en guise de message d'alerte sur un risque potentiel. Mais que ce risque est entièrement maîtrisé par ma part car programmé sous vba en tout état de cause.

Donc bilan je dois utiliser le code suivant qui me permet de masquer ponctuellement le triangle vert au cours de cette boucle ?

Dim i&
With Application.ErrorCheckingOptions
    .OmittedCells   = False
    For i = 1 To 10 Step 2
        Range("F" & i).Formula = "=10"
        Range("F" & (i + 1)).Formula = "=-F" & i
    Next
    .OmittedCells = True
End With



Bizarre que la solution soit de ce type mais s'il n'y a pas d'autre solutions pour le moment...Je vais garder celle-ci alors^^

En attendant d'autres remarques, merci.

André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Finalement j'ai testé le code suivant :

Dim i&
With Application.ErrorCheckingOptions
    .OmittedCells = False
    For i = 1 To 10 Step 2
        Range("F" & i).Formula = "=10"
        Range("F" & (i + 1)).Formula = "=-F" & i
    Next
    .OmittedCells = True
End With


...Et j'ai toujours mes triangles verts !!! sniiiiif

La meilleur solution reste finalement celle ci :

Dim i&

For i = 1 To 10 Step 2
    Range("F" & i).Formula = "=10"
    Range("F" & i + 1) = -Range("F" & i)
Next


Plus de triangle vert...mais plus de formule associé non plus. Re-sniiiiif

Pourtant il doit bien exister une solution qui fonctionne. Avec Vba on peut faire pleins de choses il me semble ! Alors c'est pas un petit triangle vert qui va prouver le contraire quand même ???

Lol.

André
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

et pour en rajouter un peu à ton étonnement, pourquoi utiliser la propriété "formula" pour attribuer une valeur à une cellule ?

Range("F" & i).Value = 10


fait la même chose. on peu donc en conclure que

Range("F" & (i + 1)).Formula = "=-F" & i


devrait être avantageusement remplacé par :

Range("F" & (i + 1)).Value = Range("F" & i ).Value * -1


méthode qui n'oblige pas excel à interpréter une formule mais bien une valeur

A+