VBA et l'option de complément automatique

Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007
-
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007
-
Bonsoir à tous


Lorsqu'on écrit un code VBA affiche une fenêtre de complément
automatique des instructions. Par exemple, si je tape le code suivant:

If Range("A1").

J'ai une fenêtre avec les options suivantes:

Activate

AddComment

......

......

XPath


Il suffit de cliquer sur la 1ère lettre S par exemple et de
double-cliquer sur Select ou de saisir bien entendu directement
l'instruction ou propriété.


Par contre, si je tape l'instruction suivante:

If Cells(i,j).

alors là je n'ai aucune aide. Pourtant quand j'écris If Cells(i,j) et
que je finis de saisir mon code et que je lance l'instruction, la macro
fonctionne bien.


Ma question est donc la suivante: pourriez-vous m'expliquer s'il vous
plaît pourquoi dans certains cas, la fenêtre de complément s'ouvre bien
et dans d'autres cas, non?

12 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

y'a t-il seulement une réponse à ta demande ?
Le mystère reste à coup sûr entier, et peut-être que le monde qui nous entoure n'est pas ce qu'il paraît.
En gros, je pense que personne peut vraiment se l'expliquer, pense au F2 (explorateur d'objets) qui te permet d'avoir ce qui pourrait apparaitre dans ta "fenêtre de complément"

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
salut,
toute classe (objet) a une valeur par défaut
en VB6 par exemple, faire Text1.text= "bonjour" ou text1="bonjour", c'est pareil car la propriété .text est celle par défaut.
pour tester :
Text1.[_Default] = "bonjour"
(il est cependant préférable d'indiquer explicitement chaque propriété, si ce n'est que d'un point de vue de relecture..)

il est possible qu'il en soit de même pour Cells(x,y) qui peut renvoyer .value par défaut par exemple.
quant au fait que le menu auto ne s'affiche pas, çà peut être du à une erreur dans ton code, dans quel cas VBA attend réparation avant de fournir de l'aide (c'est le cas pour VB6 du moins)

si pas d'erreur, tu peux forcer (après le point) avec ctrl+espace. à tenter...

nb : dans F2 les propriétés par défaut ont une image (point bleu). voir les propriétés masquées
++
PCPT   [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut PCPT,

je viens de tester le Ctrl + espace, cela ne fait rien.
C'est vrai que le cells(1, 1).  ne fait pas afficher la liste attaché à ce membre.
Mais cela le fait pour la fonction Find aussi. (je n'en ai pas d'autre en tête).

J'ai lu sur le site de M$ que suivant ce que tu mets dans les évènemens ThisWorkBook Activate et Deactivate, cela provoque un conflit.


Les failles de VBA ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
peut-être les collections....

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Salut Mortalino et PCPT
Je donne un exemple que j'ai repris sur ce forum


If Range("A1").Value <> "TOTO" Then
Range("B1").Value = 1
Else
Range("B1").Value = 2
End If

Si je tape Range("B1"). j'ai bien la fenêtre des valeurs qui s'ouvre.Je tapeV pour aller directement sur Value et je sélectionne l'option.

Par contre avec le code suivant, la fenêtre ne s'affiche pas:
For i = 1 To 200
For j = 1 To 350
If Cells(i, j).Value = 1 Then
Cells(i + 2, j) = 0End If
Next j
Next i

Lorsque je saisis Cells(i,j). je n'ai rien. La macro s'exécute bien si je saisis tout le code: je veux dire par là que je saisis la propriété Value. Je n'ai pas de message d'erreur.Je ne comprends donc pas comment tu peux dire PCPT qu' il est possible que Cells(x,y)  peut renvoyer .value par défaut. Si je ne dis pas de bêtises, quand je mets un point, VBA attend une expression, sauf qu'encore une fois, parfois VBA me propose une liste et parfois non.Effectivement Mortalino,ça me le fait pour d'autres syntaxes que je n'ai pas en tête non plus à cet instant.Concernant ta remarque sur This Workbook, je ne m'en occupe pas. Je veux dire par là que tape mon code et que je colle aucune instruction dans ThisWorkbook.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Mais nous avions compris cher ami.

Lorsque PCPT te dit que la propriété Value est par défaut, cela veut dire que chaque membre d'une collection à sa propriété par défaut.

MsgBox Cells(1, 1)
Bah ça fonctionne, bien qu'il soit préférable de mettre le .Value

Conclusion : Ton code est bon, c'est juste que Microsoft n'est pas parfait, sur des milliers d'objets, le fait de ne pas avoir cette liste sur 2 ou 3 % n'est pas handicapant.
C'est comme ça et c'est tout. Ce sera peut-être corrigé dans la prochaine version d'Office.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
ah et "Concernant ta remarque sur This Workbook, je ne m'en occupe pas. Je
veux dire par là que tape mon code et que je colle aucune instruction
dans ThisWorkbook."

--> c'était pour dire que des bugs peuvent arriver !

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Pardon Mortalino, moi au contraire de toi je n'avais pas compris. Je
pense avoir en partie compris ce que vous voulez dire. Par exemple, au
lieu d'écrire Cell(i,j).Value= 1, je peux écrire Cells(i,j)=1. Par
ailleurs, je ne lance pas d'attaque contre Microsoft. Je cherche
simplement à comprendre
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
c'est bien çà...
mais attention j'ai mis peut-être pour .Value (je ne touche pas à VBA)

je t'ai donné avec TxtBox sous VB6
et j'ai indiqué aussi que même si la plupart des (voire tous les) objets ont une propriété par défaut, il est préférable de l'appeler explicitement

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Salut,


Je pense un peu comme PCPT, que c'est dû aux collections. Pourquoi ? ça, je ne saurais répondre exactement...


Si tu tapes Cells.

tu auras les options.

Si tu tapes Cells(I,J).

tu ne les auras pas.

Cells étant la Collection, Cells(I,J) étant un item (ou groupe d'items) de la Collection.


De la même façon,

Si tu tapes Sheets.

tu auras les options

Sheets("Feuil1").

tu n'auras rien


Et c'est comme ça pour la plupart des objets finissant par "s" qui détermine le fait que c'est une collection.

MPi
Messages postés
2
Date d'inscription
vendredi 5 novembre 2004
Statut
Membre
Dernière intervention
3 septembre 2006

bonjour à tous,

J'ai lu avec attention ce fil, car j'ai longtemsp pesté contre le fonctionnement de ce "Complément automatique". Et après avoir fait des recherches dans les aides Excel, VBA, et sur le Net, j'ai trouvé ceci, qui ne répond pas à la question de Zanus, mais enfin, c'est quand même intéressant :
http://www.excelabo.net/xl/fonctions.php#application.function

Pour ma part, lorsque je dois utiliser Cells(x, y). et que j'ai besoin d'invoquer une propriété/méthode (dont je ne me rappelle plus la syntaxe ou les arguments), j'enlève (x, y) le temps de trouver mon bonheur, et le remets en place après. Pour autant que je m'en souvienne, ça ne m'a jamais posé de problème...

Bon dimanche ! 
Messages postés
126
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 février 2007

Bonsoir


Merci pour les informations. Pour ce qui concerne mes exemples de code,
j'ai fait le test en supprimant la propriété.Value: Cells(i,j)=1 en
lieu et place de Cells(i,j).Value=1 et ça fonctionne.