Bonsoir, pour un projet, j'ai besoin de comparer 2 zones de données nommées :
val1, val2... et base1, base2...
par la méthode : For j = 1 to vcompteur, je voudrais donc comparer les zones
val1 avec base1, val2 avec base2 et renvoyer le résultat dans une cellule.
Voici une partie de mon code :
For j = 1 To vCompteur
i = 2 + j
Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Next j
A noter que la cellule de destination se situe dans une autre feuille que
les deux zones nommées.
Cependant les deux zones "val & j" et "base & j" ne sont pas prises en compte.
ci-joint un exemple (simplifié) : http://cjoint.com/?lnwOXAugNk
Merci de bien vouloir m'expliquer ce qui ne fonctionne pas
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la mesure ou tu veux intégrer des variables. Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la
mesure ou tu veux intégrer des variables.
Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la mesure ou tu veux intégrer des variables. Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Bonjour AV, merci pour ta réponse, mais cela ne fonctionne pas non plus. Je ne vois pas ce que tu veux dire avec la "méthode longue". Pour ce qui est des variables, j est le nombre de cellules non vides dans la zone nommée "val" Si tu avais une autre façon de procéder, je suis aussi preneur Merci
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la mesure ou tu veux intégrer des variables. Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Bonjour AV,
merci pour ta réponse, mais cela ne fonctionne pas non plus.
Je ne vois pas ce que tu veux dire avec la "méthode longue".
Pour ce qui est des variables, j est le nombre de cellules non vides dans la
zone nommée "val"
Si tu avais une autre façon de procéder, je suis aussi preneur
Merci
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la
mesure ou tu veux intégrer des variables.
Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Bonjour AV, merci pour ta réponse, mais cela ne fonctionne pas non plus. Je ne vois pas ce que tu veux dire avec la "méthode longue". Pour ce qui est des variables, j est le nombre de cellules non vides dans la zone nommée "val" Si tu avais une autre façon de procéder, je suis aussi preneur Merci
Sans avoir régardé le reste, cette syntaxe de "Evaluate" est incorrecte dans la mesure ou tu veux intégrer des variables. Il faut passer, obligatoirement, par la "méthode longue" :
Le principe (non testé in situ car on ne sait pas ce que sont tes variables) :
Est-ce toi qui a écrit cette ligne : Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ? Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de [chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette allure : Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base] &"&" & j &"),0))*1)")
AV
Est-ce toi qui a écrit cette ligne :
Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ?
Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de
[chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette
allure :
Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base]
&"&"
& j &"),0))*1)")
Est-ce toi qui a écrit cette ligne : Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ? Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de [chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette allure : Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base] &"&" & j &"),0))*1)")
AV
cousinhub
Re, hélas, cela ne fonctionne pas plus! avec MATCH(...), je cherche à obtenir le nombre de valeurs identiques entre les zones nommées (val1) et (base1), (val2) et (base2) etc... et ceci pour toutes les zones (val"n") renseignées (déterminées par la fonction CellulesUtilisées) Merci de ton intérêt
Est-ce toi qui a écrit cette ligne : Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ? Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de [chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette allure : Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base] &"&" & j &"),0))*1)")
AV
Re,
hélas, cela ne fonctionne pas plus!
avec MATCH(...), je cherche à obtenir le nombre de valeurs identiques entre
les zones nommées (val1) et (base1), (val2) et (base2) etc... et ceci pour
toutes les zones (val"n") renseignées (déterminées par la fonction
CellulesUtilisées)
Merci de ton intérêt
Est-ce toi qui a écrit cette ligne :
Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ?
Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de
[chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette
allure :
Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base]
&"&"
& j &"),0))*1)")
Re, hélas, cela ne fonctionne pas plus! avec MATCH(...), je cherche à obtenir le nombre de valeurs identiques entre les zones nommées (val1) et (base1), (val2) et (base2) etc... et ceci pour toutes les zones (val"n") renseignées (déterminées par la fonction CellulesUtilisées) Merci de ton intérêt
Est-ce toi qui a écrit cette ligne : Range("c" & i) = [SUM(ISNUMBER(MATCH(val& j),base& j),0))*1)]
Si oui, que cherches-tu à faire ? Le "MATCH(....)" me laisse perplexe...
Je ne vois pas ce que tu veux dire avec la "méthode longue".
PS : Il s'agit de la syntaxe Evaluate("chaine de caractères") au lieu de [chaine de caractères sans variables]
Si "val" et "base" sont des plages nommées, la syntaxe pourrait avoir cette allure : Range("c" & i) = Evaluate("SUM(ISNUMBER(MATCH(" &[val] &"&" & j &")," &[base] &"&" & j &"),0))*1)")
AV
AV
J'avoue que j'ai du mal... Dans ton code les variables "val" et "base" ne sont pas initialisée donc l'Evaluate plantera forcément quelle que soit la syntaxe ! La comparaison entre les plages doit se faire colonne par colonne (exemple : comparaison A4 /A12) ou indifféremment sur l'ensemble des données ? Il serait préférable que dans ton fichier exemple tu donnes le résultat attendu..
AV
J'avoue que j'ai du mal...
Dans ton code les variables "val" et "base" ne sont pas initialisée donc
l'Evaluate plantera forcément quelle que soit la syntaxe !
La comparaison entre les plages doit se faire colonne par colonne (exemple :
comparaison A4 /A12) ou indifféremment sur l'ensemble des données ?
Il serait préférable que dans ton fichier exemple tu donnes le résultat
attendu..
J'avoue que j'ai du mal... Dans ton code les variables "val" et "base" ne sont pas initialisée donc l'Evaluate plantera forcément quelle que soit la syntaxe ! La comparaison entre les plages doit se faire colonne par colonne (exemple : comparaison A4 /A12) ou indifféremment sur l'ensemble des données ? Il serait préférable que dans ton fichier exemple tu donnes le résultat attendu..
AV
cousinhub
Re, la comparaison doit s'effectuer sur toutes les cellules des zones concernées, et compter le nombre de cellules identiques ci joint le fichier avec le résultat escompté : http://cjoint.com/?lopF3PoqKN les variables "val" et "base" ne sont en fait pas des variables, mais il faut plutôt comprendre "val1", "val2".. "base1", "base2".... Merci
J'avoue que j'ai du mal... Dans ton code les variables "val" et "base" ne sont pas initialisée donc l'Evaluate plantera forcément quelle que soit la syntaxe ! La comparaison entre les plages doit se faire colonne par colonne (exemple : comparaison A4 /A12) ou indifféremment sur l'ensemble des données ? Il serait préférable que dans ton fichier exemple tu donnes le résultat attendu..
AV
Re,
la comparaison doit s'effectuer sur toutes les cellules des zones
concernées, et compter le nombre de cellules identiques
ci joint le fichier avec le résultat escompté : http://cjoint.com/?lopF3PoqKN
les variables "val" et "base" ne sont en fait pas des variables, mais il
faut plutôt comprendre "val1", "val2".. "base1", "base2"....
Merci
J'avoue que j'ai du mal...
Dans ton code les variables "val" et "base" ne sont pas initialisée donc
l'Evaluate plantera forcément quelle que soit la syntaxe !
La comparaison entre les plages doit se faire colonne par colonne (exemple :
comparaison A4 /A12) ou indifféremment sur l'ensemble des données ?
Il serait préférable que dans ton fichier exemple tu donnes le résultat
attendu..
Re, la comparaison doit s'effectuer sur toutes les cellules des zones concernées, et compter le nombre de cellules identiques ci joint le fichier avec le résultat escompté : http://cjoint.com/?lopF3PoqKN les variables "val" et "base" ne sont en fait pas des variables, mais il faut plutôt comprendre "val1", "val2".. "base1", "base2".... Merci
J'avoue que j'ai du mal... Dans ton code les variables "val" et "base" ne sont pas initialisée donc l'Evaluate plantera forcément quelle que soit la syntaxe ! La comparaison entre les plages doit se faire colonne par colonne (exemple : comparaison A4 /A12) ou indifféremment sur l'ensemble des données ? Il serait préférable que dans ton fichier exemple tu donnes le résultat attendu..
AV
AV
Une fonction perso devrait faire :
Function COMPT_COMPAR(plage1, plage2) x1 = [countA(plage1)] x2 = [countA(plage2)] If x1 > x2 Or x1 = x2 Then For Each c In [plage1] If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1 Next Else For Each c In [plage2] If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1 Next End If COMPT_COMPAR = n End Function
Dans ta feuille ça peut faire : =COMPT_COMPAR(val1;base1)
AV
Une fonction perso devrait faire :
Function COMPT_COMPAR(plage1, plage2)
x1 = [countA(plage1)]
x2 = [countA(plage2)]
If x1 > x2 Or x1 = x2 Then
For Each c In [plage1]
If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1
Next
Else
For Each c In [plage2]
If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1
Next
End If
COMPT_COMPAR = n
End Function
Dans ta feuille ça peut faire :
=COMPT_COMPAR(val1;base1)
Function COMPT_COMPAR(plage1, plage2) x1 = [countA(plage1)] x2 = [countA(plage2)] If x1 > x2 Or x1 = x2 Then For Each c In [plage1] If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1 Next Else For Each c In [plage2] If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1 Next End If COMPT_COMPAR = n End Function
Dans ta feuille ça peut faire : =COMPT_COMPAR(val1;base1)
AV
cousinhub
Merci beaucoup, je vais opter pour ta proposition je voulais faire cela par macro afin de n'avoir pas de formules dans les cellules de destination, mais tant pis, cela fonctionne parfaitement. Merci encore
Une fonction perso devrait faire :
Function COMPT_COMPAR(plage1, plage2) x1 = [countA(plage1)] x2 = [countA(plage2)] If x1 > x2 Or x1 = x2 Then For Each c In [plage1] If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1 Next Else For Each c In [plage2] If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1 Next End If COMPT_COMPAR = n End Function
Dans ta feuille ça peut faire : =COMPT_COMPAR(val1;base1)
AV
Merci beaucoup,
je vais opter pour ta proposition
je voulais faire cela par macro afin de n'avoir pas de formules dans les
cellules de destination, mais tant pis, cela fonctionne parfaitement.
Merci encore
Une fonction perso devrait faire :
Function COMPT_COMPAR(plage1, plage2)
x1 = [countA(plage1)]
x2 = [countA(plage2)]
If x1 > x2 Or x1 = x2 Then
For Each c In [plage1]
If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1
Next
Else
For Each c In [plage2]
If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1
Next
End If
COMPT_COMPAR = n
End Function
Dans ta feuille ça peut faire :
=COMPT_COMPAR(val1;base1)
Merci beaucoup, je vais opter pour ta proposition je voulais faire cela par macro afin de n'avoir pas de formules dans les cellules de destination, mais tant pis, cela fonctionne parfaitement. Merci encore
Une fonction perso devrait faire :
Function COMPT_COMPAR(plage1, plage2) x1 = [countA(plage1)] x2 = [countA(plage2)] If x1 > x2 Or x1 = x2 Then For Each c In [plage1] If c <> "" And Application.CountIf([plage2], c) > 0 Then n = n + 1 Next Else For Each c In [plage2] If c <> "" And Application.CountIf([plage1], c) > 0 Then n = n + 1 Next End If COMPT_COMPAR = n End Function
Dans ta feuille ça peut faire : =COMPT_COMPAR(val1;base1)
AV
AV
je voulais faire cela par macro afin de n'avoir pas de formules
Tu peux aisément transformer la fonction perso fournie en macro ...
AV
je voulais faire cela par macro afin de n'avoir pas de formules
Tu peux aisément transformer la fonction perso fournie en macro ...