OVH Cloud OVH Cloud

Formule de comparaison

3 réponses
Avatar
chesterfield
Bonjour, voici mon pb, sur une macro excel que je n'ai pas crée, je dois
résoudre un pb, le voici.

Je vous joins le code qui pose pb et j'espere que vous comprendrez mon pb,
En fait, cette macro permet de comparer 2 zones de textequi ont été
extraites des 2 feuilles qui vont etre stockées dans REF1 et REF2.
La voici :


*******************

Sub Comparaison()
'
' Macro créée le 10/12/2004 par CIR IDF (FB)
'
'demander quelles sont les feuilles à comparer
Dim Ref1, Ref2 As String
Ref1 = InputBox("saisir le nom de la feuille référence", "Quel feuille
?", "PC_MMAA")
Ref2 = InputBox("saisir le nom de la feuille à comparer", "Quel feuille
?", "PC_MMAA")

'ajouter une feuille au début
Sheets(1).Select
Sheets.Add
ActiveSheet.Name = "compar"
Range("A1").FormulaR1C1 = Ref1
Range("B1").FormulaR1C1 = Ref2
'Range("C1").FormulaR1C1 = "x"
'Range("D1").FormulaR1C1 = "y"

'copier les plages "applications" des PC concernés dans les 2 1ères colonnes
Application.Goto Reference:="P" & Ref1
Selection.Copy
Sheets("compar").Select
Range("A2").Select
ActiveSheet.Paste
Application.Goto Reference:="P" & Ref2
Selection.Copy
Sheets("compar").Select
Range("B2").Select
ActiveSheet.Paste

'insérer formules de comparaison
Range("C2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
Range("D2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
Range("C2:D2").Select
Selection.AutoFill Destination:=Range("C2:D50"), Type:=xlFillDefault

End Sub


****************

Dans les dernières lignes (dans le MATCH (RC[-2],,0) et dans la ligne du
dessous, je dois insérer les "P" & REF1 et "P" & REF2 mais je ne sais pas
comment les insérer, quelle est la bonne syntaxe pour que ca fonctionne ?

Merci d'avance

3 réponses

Avatar
Patrice Henrio
C'est un problème auquel je viens d'être confronté
Donc le problème c'est comment mettre des guillemets dasn une chaîne de
caractères ? Il faut les tripler
Ainsi si P="", len(P)=0 mais si P=""", len(P)=1 et la valeur de P est "
Le problème est plus profond qu'il n'y parait car dans notre cas, cette
chaîne obtenue est interprétée ensuite comme une chaîne et donc le " devient
une fin de Chaîne.
Expliquons sur un exemple : Formule="=Si($A$1="A";1;0)"
Sous cette forme, erreur de compilation au niveau du A
On peut essayer Formule="=Si($A$1="""A""";1;0), nous avons la même erreur
Formule="=Si($A$1=" & """ & "A" & """ & ";1;0)" de nouveau une ereur alors
que debug.print "=Si($A$1="""A""";1;0) nous donne bien la bonne écriture
Divers essais m'ont montré que d'une part le point virgule est réinterprété
comme séparateur de paramètre, que la chaîne obtenue est elle-même
réinterprétée en tant que chaîne (?)

Je n'ai toujours pas réussi à faire rentrer une formule sous forme texte
quand elle nécessite des guillemets ou des points virgules, même avec des
astuces du genre G=chr(34) et PtV=chr(59)




"chesterfield" a écrit dans le message de news:
41bc236e$0$20838$
Bonjour, voici mon pb, sur une macro excel que je n'ai pas crée, je dois
résoudre un pb, le voici.

Je vous joins le code qui pose pb et j'espere que vous comprendrez mon pb,
En fait, cette macro permet de comparer 2 zones de textequi ont été
extraites des 2 feuilles qui vont etre stockées dans REF1 et REF2.
La voici :


*******************

Sub Comparaison()
'
' Macro créée le 10/12/2004 par CIR IDF (FB)
'
'demander quelles sont les feuilles à comparer
Dim Ref1, Ref2 As String
Ref1 = InputBox("saisir le nom de la feuille référence", "Quel feuille
?", "PC_MMAA")
Ref2 = InputBox("saisir le nom de la feuille à comparer", "Quel feuille
?", "PC_MMAA")

'ajouter une feuille au début
Sheets(1).Select
Sheets.Add
ActiveSheet.Name = "compar"
Range("A1").FormulaR1C1 = Ref1
Range("B1").FormulaR1C1 = Ref2
'Range("C1").FormulaR1C1 = "x"
'Range("D1").FormulaR1C1 = "y"

'copier les plages "applications" des PC concernés dans les 2 1ères
colonnes
Application.Goto Reference:="P" & Ref1
Selection.Copy
Sheets("compar").Select
Range("A2").Select
ActiveSheet.Paste
Application.Goto Reference:="P" & Ref2
Selection.Copy
Sheets("compar").Select
Range("B2").Select
ActiveSheet.Paste

'insérer formules de comparaison
Range("C2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
Range("D2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
Range("C2:D2").Select
Selection.AutoFill Destination:=Range("C2:D50"), Type:=xlFillDefault

End Sub


****************

Dans les dernières lignes (dans le MATCH (RC[-2],,0) et dans la ligne du
dessous, je dois insérer les "P" & REF1 et "P" & REF2 mais je ne sais pas
comment les insérer, quelle est la bonne syntaxe pour que ca fonctionne ?

Merci d'avance




Avatar
chesterfield
ok merci de ces infos mais kkun a une idée pour mon pb ?

merci d'avance
"Patrice Henrio" a écrit dans le message de
news:
C'est un problème auquel je viens d'être confronté
Donc le problème c'est comment mettre des guillemets dasn une chaîne de
caractères ? Il faut les tripler
Ainsi si P="", len(P)=0 mais si P=""", len(P)=1 et la valeur de P est "
Le problème est plus profond qu'il n'y parait car dans notre cas, cette
chaîne obtenue est interprétée ensuite comme une chaîne et donc le "


devient
une fin de Chaîne.
Expliquons sur un exemple : Formule="=Si($A$1="A";1;0)"
Sous cette forme, erreur de compilation au niveau du A
On peut essayer Formule="=Si($A$1="""A""";1;0), nous avons la même erreur
Formule="=Si($A$1=" & """ & "A" & """ & ";1;0)" de nouveau une ereur alors
que debug.print "=Si($A$1="""A""";1;0) nous donne bien la bonne écriture
Divers essais m'ont montré que d'une part le point virgule est


réinterprété
comme séparateur de paramètre, que la chaîne obtenue est elle-même
réinterprétée en tant que chaîne (?)

Je n'ai toujours pas réussi à faire rentrer une formule sous forme texte
quand elle nécessite des guillemets ou des points virgules, même avec des
astuces du genre G=chr(34) et PtV=chr(59)




"chesterfield" a écrit dans le message de news:
41bc236e$0$20838$
> Bonjour, voici mon pb, sur une macro excel que je n'ai pas crée, je dois
> résoudre un pb, le voici.
>
> Je vous joins le code qui pose pb et j'espere que vous comprendrez mon


pb,
> En fait, cette macro permet de comparer 2 zones de textequi ont été
> extraites des 2 feuilles qui vont etre stockées dans REF1 et REF2.
> La voici :
>
>
> *******************
>
> Sub Comparaison()
> '
> ' Macro créée le 10/12/2004 par CIR IDF (FB)
> '
> 'demander quelles sont les feuilles à comparer
> Dim Ref1, Ref2 As String
> Ref1 = InputBox("saisir le nom de la feuille référence", "Quel


feuille
> ?", "PC_MMAA")
> Ref2 = InputBox("saisir le nom de la feuille à comparer", "Quel


feuille
> ?", "PC_MMAA")
>
> 'ajouter une feuille au début
> Sheets(1).Select
> Sheets.Add
> ActiveSheet.Name = "compar"
> Range("A1").FormulaR1C1 = Ref1
> Range("B1").FormulaR1C1 = Ref2
> 'Range("C1").FormulaR1C1 = "x"
> 'Range("D1").FormulaR1C1 = "y"
>
> 'copier les plages "applications" des PC concernés dans les 2 1ères
> colonnes
> Application.Goto Reference:="P" & Ref1
> Selection.Copy
> Sheets("compar").Select
> Range("A2").Select
> ActiveSheet.Paste
> Application.Goto Reference:="P" & Ref2
> Selection.Copy
> Sheets("compar").Select
> Range("B2").Select
> ActiveSheet.Paste
>
> 'insérer formules de comparaison
> Range("C2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
> Range("D2").FormulaR1C1 = "=MATCH(RC[-2],,0)"
> Range("C2:D2").Select
> Selection.AutoFill Destination:=Range("C2:D50"), Type:=xlFillDefault
>
> End Sub
>
>
> ****************
>
> Dans les dernières lignes (dans le MATCH (RC[-2],,0) et dans la ligne du
> dessous, je dois insérer les "P" & REF1 et "P" & REF2 mais je ne sais


pas
> comment les insérer, quelle est la bonne syntaxe pour que ca fonctionne


?
>
> Merci d'avance
>
>




Avatar
Alain CROS
Bonjour.

Cette question serait mieux sur microsoft.public.fr.excel.

Je n'ai pas très bien compris la problématique mais en reprenant l'exemple de Patrice
Pour inscrire =Si($A$1="A";1;0) en F1 par code :

[F1].formula="=IF($A$1=""A"",1,0)"

Alain CROS

"chesterfield" a écrit dans le message de news: 41bc964c$0$20831$
ok merci de ces infos mais kkun a une idée pour mon pb ?

merci d'avance