OVH Cloud OVH Cloud

Une découverte importante ou peu?

24 réponses
Avatar
Fredo P
Bonsoir
Lors du contrôle d'une colonne de noms de personnes par la ligne de commande
suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1 et
InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives, légalité n'est
pas reconnue a cause de l'existence du point"."

Ce un truc connu ?

10 réponses

1 2 3
Avatar
Jacquouille
Salut Steph
Je ne comprends pas ton IF.
Je m'y suis penché de près, voire de cyprès, mais ...rien.
Tu écris:
If var1 And var2 Then
soit : si var et var...alors. Si quoi?
Je ne comprends pas comment le PC comprends la condition. Tu cites les 2
var, mais tu ne dis pas ce qu'elle doivent être, avant d'arriver au then.
SI.......tu as une minute pour éclairer ma lanterne...alors je serai
ontent -)
Merci et bonne journée
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"LSteph" a écrit dans le message de news:
%
...pardon je voulais dire ainsi sans le >0 sinon mon post est
incompréhensible:

var1=InStr(c, "Blond")

Je crois qu'ainsi l'expression sans le >0 suggèré par Modeste
peut qd même s'assimiler un booleen,

Vous n'avez qu'à tester avec Blond ou Bond

Sub tstb()
Dim myC As String, var1 As Boolean, var2 As Boolean
myC = "Blondo. Franck"
var1 = InStr(myC, "Bond")
var2 = InStr(myC, "Franck")
If var1 And var2 Then
MsgBox var1 & vbCrLf & var2 & vbCrLf & "Ok"
Else
MsgBox var1 & vbCrLf & var2 & vbCrLf & "iznogoud"
End If
End Sub


LSteph a écrit :
bonjour à tous,

cela change-t-il qqchose?

... potentiellement booleen supposons:

dim var1 as boolean, var2 as boolean
'...
var1=InStr(c, "Blond")>0
var2=InStr(c, "Franck")>0
'...

If var1 And var2 Then c = "F. Blondeau"

'...

'lSteph


'Cordialement

Modeste a écrit :
Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
Lors du contrôle d'une colonne de noms de personnes par la ligne de
commande suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
légalité n'est pas reconnue a cause de l'existence du point"."

Ce un truc connu ?



If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
Blondeau"

le AND ne s'applique qu'a des valeurs booléennes, binaires ou
hexadécimales










Avatar
lSteph
Bonjour Jacques,


Ca se passe au dessus (j'ai typé les variables pour les rendre
explicites)
si l'instruction instr(c, "truc") ne trouve pas la chaine
la variable var1 contient faux
sinon elle contient vrai

donc si vrai et vrai alors ok sinon iznogoud

cqfd..non!

Tout cela pour dire que GD a bien raison et que des instructions de
même que des variables non explicites peuvent parfois faire l'objet
d'une interprétation typique par excel différente de celle que l'on a
supposé.

@+

--
lSteph




On 10 sep, 11:13, "Jacquouille" wrote:
Salut Steph
Je ne comprends pas ton IF.
Je m'y suis penché de près, voire de cyprès, mais ...rien.
Tu écris:
 If var1 And var2 Then
soit : si var et var...alors.  Si quoi?
Je ne comprends pas comment le PC comprends la condition. Tu cites les 2
var, mais tu ne dis pas ce qu'elle doivent être, avant d'arriver au the n.
SI.......tu as une minute pour éclairer ma lanterne...alors je serai
ontent  -)
Merci et bonne journée
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"LSteph" a écrit dans le message de news:
%

> ...pardon je voulais dire ainsi sans le >0 sinon mon post est
> incompréhensible:

> var1=InStr(c, "Blond")

> Je crois qu'ainsi l'expression sans le >0 suggèré par Modeste
> peut qd même s'assimiler un booleen,

> Vous n'avez qu'à tester avec Blond ou Bond

> Sub tstb()
> Dim myC As String, var1 As Boolean, var2 As Boolean
> myC = "Blondo. Franck"
> var1 = InStr(myC, "Bond")
> var2 = InStr(myC, "Franck")
> If var1 And var2 Then
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "Ok"
> Else
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "iznogoud"
> End If
> End Sub

> LSteph a écrit :
>> bonjour à tous,

>> cela change-t-il qqchose?

>> ... potentiellement booleen supposons:

>> dim var1 as boolean, var2 as boolean
>> '...
>> var1=InStr(c, "Blond")>0
>> var2=InStr(c, "Franck")>0
>> '...

>> If var1 And var2 Then  c = "F. Blondeau"

>> '...

>> 'lSteph

>> 'Cordialement

>> Modeste a écrit :
>>> Bonsour® Fredo P  avec ferveur  ;o))) vous nous disiez :
>>>> Lors du contrôle d'une colonne de noms de personnes par la ligne d e
>>>> commande suivante,
>>>> If InStr(c, "Blond") And InStr(c, "Franck") Then
>>>>    c = "F. Blondeau"
>>>> End If
>>>> Si sur la cellule est inscrit "Blondo. Franck":  InStr(c, "Blond") =1
>>>> et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
>>>> légalité n'est pas reconnue a cause de l'existence du point"."

>>>> Ce un truc connu ?

>>> If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
>>> Blondeau"

>>> le AND ne s'applique qu'a des valeurs booléennes, binaires ou
>>> hexadécimales


Avatar
lSteph
...pour simplifier la question du IF

lorsque ceci est booleen soit égal à vrai ou faux
il suffit de tester if ceci
et pas besoin d'écrire if ceci=true
ce qui reviendrait à dire si vrai est égal à vrai alors


...pour revenir au sujet principal
l'explication très claire de Daniel vient complèter et confirmer ce
que l'on disait

si je définis une variable en la typant boolean
vba n'a pas de souci d'interprétation
dans l'alternative variable non typée ou variant ou bien instruction
vb doit trouver de quel type il s'agit, il prend ce qui est le plus
facile pour lui.
donc si implicitement il y a un autre type dans l'histoire...

.. vous pouvez coller des espions dans le volet et regarder ce qui se
passe !

Conclusion en typant les variables on gagne deux choses
d'être sûr de ce qu'elle seront
de rendre plus efficace le code qui ne perd pas son temps à vérifier
ce qu'il doit en faire.

@+

lSteph


On 10 sep, 11:13, "Jacquouille" wrote:
Salut Steph
Je ne comprends pas ton IF.
Je m'y suis penché de près, voire de cyprès, mais ...rien.
Tu écris:
 If var1 And var2 Then
soit : si var et var...alors.  Si quoi?
Je ne comprends pas comment le PC comprends la condition. Tu cites les 2
var, mais tu ne dis pas ce qu'elle doivent être, avant d'arriver au the n.
SI.......tu as une minute pour éclairer ma lanterne...alors je serai
ontent  -)
Merci et bonne journée
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"LSteph" a écrit dans le message de news:
%

> ...pardon je voulais dire ainsi sans le >0 sinon mon post est
> incompréhensible:

> var1=InStr(c, "Blond")

> Je crois qu'ainsi l'expression sans le >0 suggèré par Modeste
> peut qd même s'assimiler un booleen,

> Vous n'avez qu'à tester avec Blond ou Bond

> Sub tstb()
> Dim myC As String, var1 As Boolean, var2 As Boolean
> myC = "Blondo. Franck"
> var1 = InStr(myC, "Bond")
> var2 = InStr(myC, "Franck")
> If var1 And var2 Then
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "Ok"
> Else
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "iznogoud"
> End If
> End Sub

> LSteph a écrit :
>> bonjour à tous,

>> cela change-t-il qqchose?

>> ... potentiellement booleen supposons:

>> dim var1 as boolean, var2 as boolean
>> '...
>> var1=InStr(c, "Blond")>0
>> var2=InStr(c, "Franck")>0
>> '...

>> If var1 And var2 Then  c = "F. Blondeau"

>> '...

>> 'lSteph

>> 'Cordialement

>> Modeste a écrit :
>>> Bonsour® Fredo P  avec ferveur  ;o))) vous nous disiez :
>>>> Lors du contrôle d'une colonne de noms de personnes par la ligne d e
>>>> commande suivante,
>>>> If InStr(c, "Blond") And InStr(c, "Franck") Then
>>>>    c = "F. Blondeau"
>>>> End If
>>>> Si sur la cellule est inscrit "Blondo. Franck":  InStr(c, "Blond") =1
>>>> et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
>>>> légalité n'est pas reconnue a cause de l'existence du point"."

>>>> Ce un truc connu ?

>>> If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
>>> Blondeau"

>>> le AND ne s'applique qu'a des valeurs booléennes, binaires ou
>>> hexadécimales


Avatar
michdenis
Bonjour Daniel,

Très jolie explication !

La notion de 'bitwise operator' était justement dans le chapitre
que M. J. Walkenbach a oublié de publier dans ses bouquins !

;-))


Salutations.



"Daniel.M" a écrit dans le message de
news:
Bonsoir,

Avec des valeurs numériques (1 et 9), le AND se transforme en un opérateur
qui travaille sur les bits ('bitwise operator').

Donc, ton AND s'applique sur des valeurs numériques (0001 AND 1001) , ce qui
donne 1.

Si tu enlèves un caractère entre les deux noms (pas juste le point), ça
donnera 1 et 8 (0001 AND 1000), ce qui retourne 0.

Salutations,

Daniel M.

"Fredo P" wrote in message
news:%
Si vous utiliser Xl97 , (je n'ai plus xl2007) ,faites l'essai
L'existence du "." situé aprés Blondo est lhic du truc car quand je le
supprime manuellement l'égalité est reconnue et bien exécutée.

"Daniel.C" a écrit dans le message de news:

Bonsoir, Modeste.
Je serais un peu mois catégorique; je ne me rappelle plus où, j'ai lu que
la valeur 0 (ici, non trouvé) équivaut à "false", c'est connu, mais que
toute autre valeur positive est assimilée à "true", ce qui semble être le
cas, ici.
Cordialement.
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
Lors du contrôle d'une colonne de noms de personnes par la ligne de
commande suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
légalité n'est pas reconnue a cause de l'existence du point"."

Ce un truc connu ?



If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
Blondeau"

le AND ne s'applique qu'a des valeurs booléennes, binaires ou
hexadécimales




--
--
@+
;o)))








Avatar
Fredo P
"Modeste" a écrit dans le message de news:

Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :

Ah oui? alors comment se fait il, une fois le point oté
manuellement la commande s'éxécute? ou avec un Or également.



j'ai proposé une correction qui fonctionne rationnellement...

libre à toi si veux persister à utiliser ta syntaxe initiale !!!
;o)))
Merci Modeste. Daniel M m'a bien éclairé sur le sujet, c'est une
particularité du And que je ne connaissait pas.
--
--
@+
;o)))
Avatar
Fredo P
Bonjour Daniel M
Ce n'est pas volontaire de ma part, j'ai glissé une erreur dans les valeurs,
c'est 1 et 10 qui fait que And travail en opérateur.
Donc 0001 And 1010 ..... ça tient encore?

"Daniel.M" a écrit dans le message de
news:
Bonsoir,

Avec des valeurs numériques (1 et 9), le AND se transforme en un opérateur
qui travaille sur les bits ('bitwise operator').


Cela je l'ai compris. Donc j'ai tout intéret à ajouter l'opérateur ">0 " ce
que Modeste conseil à juste titre.

Donc, ton AND s'applique sur des valeurs numériques (0001 AND 1001) , ce
qui donne 1.

Si tu enlèves un caractère entre les deux noms (pas juste le point), ça
donnera 1 et 8 (0001 AND 1000), ce qui retourne 0.

Salutations,

Daniel M.

"Fredo P" wrote in message
news:%
Si vous utiliser Xl97 , (je n'ai plus xl2007) ,faites l'essai
L'existence du "." situé aprés Blondo est lhic du truc car quand je le
supprime manuellement l'égalité est reconnue et bien exécutée.

"Daniel.C" a écrit dans le message de news:

Bonsoir, Modeste.
Je serais un peu mois catégorique; je ne me rappelle plus où, j'ai lu
que la valeur 0 (ici, non trouvé) équivaut à "false", c'est connu, mais
que toute autre valeur positive est assimilée à "true", ce qui semble
être le cas, ici.
Cordialement.
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
Lors du contrôle d'une colonne de noms de personnes par la ligne de
commande suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
légalité n'est pas reconnue a cause de l'existence du point"."

Ce un truc connu ?



If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
Blondeau"

le AND ne s'applique qu'a des valeurs booléennes, binaires ou
hexadécimales




--
--
@+
;o)))












Avatar
Jacquouille
Ah un garnd meci
Mais, je crains que à force de ne pas écrire ce qui est sous-entendu, il ne
restera plus rien des macros dans quelques versions. -)
Merci pour ta bonne explic, ainsi qu'à Modeste, Daniel, et Denis, plus tous
les autres.
Jacques
--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"lSteph" a écrit dans le message de news:

Bonjour Jacques,


Ca se passe au dessus (j'ai typé les variables pour les rendre
explicites)
si l'instruction instr(c, "truc") ne trouve pas la chaine
la variable var1 contient faux
sinon elle contient vrai

donc si vrai et vrai alors ok sinon iznogoud

cqfd..non!

Tout cela pour dire que GD a bien raison et que des instructions de
même que des variables non explicites peuvent parfois faire l'objet
d'une interprétation typique par excel différente de celle que l'on a
supposé.

@+

--
lSteph




On 10 sep, 11:13, "Jacquouille" wrote:
Salut Steph
Je ne comprends pas ton IF.
Je m'y suis penché de près, voire de cyprès, mais ...rien.
Tu écris:
If var1 And var2 Then
soit : si var et var...alors. Si quoi?
Je ne comprends pas comment le PC comprends la condition. Tu cites les 2
var, mais tu ne dis pas ce qu'elle doivent être, avant d'arriver au then.
SI.......tu as une minute pour éclairer ma lanterne...alors je serai
ontent -)
Merci et bonne journée
Jacques.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"LSteph" a écrit dans le message de news:
%

> ...pardon je voulais dire ainsi sans le >0 sinon mon post est
> incompréhensible:

> var1=InStr(c, "Blond")

> Je crois qu'ainsi l'expression sans le >0 suggèré par Modeste
> peut qd même s'assimiler un booleen,

> Vous n'avez qu'à tester avec Blond ou Bond

> Sub tstb()
> Dim myC As String, var1 As Boolean, var2 As Boolean
> myC = "Blondo. Franck"
> var1 = InStr(myC, "Bond")
> var2 = InStr(myC, "Franck")
> If var1 And var2 Then
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "Ok"
> Else
> MsgBox var1 & vbCrLf & var2 & vbCrLf & "iznogoud"
> End If
> End Sub

> LSteph a écrit :
>> bonjour à tous,

>> cela change-t-il qqchose?

>> ... potentiellement booleen supposons:

>> dim var1 as boolean, var2 as boolean
>> '...
>> var1=InStr(c, "Blond")>0
>> var2=InStr(c, "Franck")>0
>> '...

>> If var1 And var2 Then c = "F. Blondeau"

>> '...

>> 'lSteph

>> 'Cordialement

>> Modeste a écrit :
>>> Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
>>>> Lors du contrôle d'une colonne de noms de personnes par la ligne de
>>>> commande suivante,
>>>> If InStr(c, "Blond") And InStr(c, "Franck") Then
>>>> c = "F. Blondeau"
>>>> End If
>>>> Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
>>>> et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
>>>> légalité n'est pas reconnue a cause de l'existence du point"."

>>>> Ce un truc connu ?

>>> If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
>>> Blondeau"

>>> le AND ne s'applique qu'a des valeurs booléennes, binaires ou
>>> hexadécimales


Avatar
Daniel.M
Bonsoir,

Ça tient encore
0001
1010
=== 0000

Donc, 0 :-)

En fait, n'importe quel nombre pair auquel on le 'AND' avec un 1, va donner
0 (parce que par définition, un nombre pair n'a pas de 1 sur le bit le moins
significatif).

Salutations,

Daniel M.

"Fredo P" wrote in message
news:
Bonjour Daniel M
Ce n'est pas volontaire de ma part, j'ai glissé une erreur dans les
valeurs, c'est 1 et 10 qui fait que And travail en opérateur.
Donc 0001 And 1010 ..... ça tient encore?

"Daniel.M" a écrit dans le message de
news:
Bonsoir,

Avec des valeurs numériques (1 et 9), le AND se transforme en un
opérateur qui travaille sur les bits ('bitwise operator').


Cela je l'ai compris. Donc j'ai tout intéret à ajouter l'opérateur ">0 "
ce que Modeste conseil à juste titre.

Donc, ton AND s'applique sur des valeurs numériques (0001 AND 1001) , ce
qui donne 1.

Si tu enlèves un caractère entre les deux noms (pas juste le point), ça
donnera 1 et 8 (0001 AND 1000), ce qui retourne 0.

Salutations,

Daniel M.

"Fredo P" wrote in message
news:%
Si vous utiliser Xl97 , (je n'ai plus xl2007) ,faites l'essai
L'existence du "." situé aprés Blondo est lhic du truc car quand je le
supprime manuellement l'égalité est reconnue et bien exécutée.

"Daniel.C" a écrit dans le message de news:

Bonsoir, Modeste.
Je serais un peu mois catégorique; je ne me rappelle plus où, j'ai lu
que la valeur 0 (ici, non trouvé) équivaut à "false", c'est connu, mais
que toute autre valeur positive est assimilée à "true", ce qui semble
être le cas, ici.
Cordialement.
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
Lors du contrôle d'une colonne de noms de personnes par la ligne de
commande suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
légalité n'est pas reconnue a cause de l'existence du point"."

Ce un truc connu ?



If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
Blondeau"

le AND ne s'applique qu'a des valeurs booléennes, binaires ou
hexadécimales




--
--
@+
;o)))
















Avatar
Daniel.M
:-)))

Tu n'as pas perdu tes formules ironiques, 'Michel'. ;-)

Salutations amicales,

Daniel M.

"michdenis" wrote in message
news:en2gy%
Bonjour Daniel,

Très jolie explication !

La notion de 'bitwise operator' était justement dans le chapitre
que M. J. Walkenbach a oublié de publier dans ses bouquins !

;-))


Salutations.



"Daniel.M" a écrit dans le message de
news:
Bonsoir,

Avec des valeurs numériques (1 et 9), le AND se transforme en un opérateur
qui travaille sur les bits ('bitwise operator').

Donc, ton AND s'applique sur des valeurs numériques (0001 AND 1001) , ce
qui
donne 1.

Si tu enlèves un caractère entre les deux noms (pas juste le point), ça
donnera 1 et 8 (0001 AND 1000), ce qui retourne 0.

Salutations,

Daniel M.

"Fredo P" wrote in message
news:%
Si vous utiliser Xl97 , (je n'ai plus xl2007) ,faites l'essai
L'existence du "." situé aprés Blondo est lhic du truc car quand je le
supprime manuellement l'égalité est reconnue et bien exécutée.

"Daniel.C" a écrit dans le message de news:

Bonsoir, Modeste.
Je serais un peu mois catégorique; je ne me rappelle plus où, j'ai lu
que
la valeur 0 (ici, non trouvé) équivaut à "false", c'est connu, mais que
toute autre valeur positive est assimilée à "true", ce qui semble être
le
cas, ici.
Cordialement.
Daniel
"Modeste" a écrit dans le message de news:

Bonsour® Fredo P avec ferveur ;o))) vous nous disiez :
Lors du contrôle d'une colonne de noms de personnes par la ligne de
commande suivante,
If InStr(c, "Blond") And InStr(c, "Franck") Then
c = "F. Blondeau"
End If
Si sur la cellule est inscrit "Blondo. Franck": InStr(c, "Blond") =1
et InStr(c, "Franck") =9: Ok, malgré ces 2 valeurs positives,
légalité n'est pas reconnue a cause de l'existence du point"."

Ce un truc connu ?



If (InStr(c, "Blond")>0) And (InStr(c, "Franck")>0) Then c = "F.
Blondeau"

le AND ne s'applique qu'a des valeurs booléennes, binaires ou
hexadécimales




--
--
@+
;o)))












Avatar
Fredo P
"Daniel.M" a écrit dans le message de
news: uR3%
Bonsoir,

Ça tient encore
0001
1010


Ouf! j'ai cru que tu étais parti pour faire le tour du monde.
1 2 3