OVH Cloud OVH Cloud

mauvaise macro

3 réponses
Avatar
André
Bonjour,

J'ai fait un programme en excel 2000 VBA sous XP et il y a une macro que je
ne réussi pas à faire fonctionner.
J'ai un classeur avec entre autre une feuille Récap (correspondant à l'année
actuelle ) et une autre feuille Récap.n_1
(correspodant à l'année 2006)

Dans la feuille Récap la colonne A = noms, la colonne B = sommes. Idem pour
Récap.n_1 avec comme différence que
les colonnes sont remplies jusqu'à la ligne 55.
But lorsque des noms identiques sont trouvés le montant de Récap.n_1 est
reporté en Récap colonne R

J'ai écrit ceci:
Sub MontantN_1 ()
For j = 8 To 55
NomFeuille = ActiveSheet.Name

Select Case NomFeuille

Case "Jan"
MontN_1 = Worksheets("Récap.n_1").Cells(j, "a")
MontAnnée = Worksheets("Récap").Cells(j, "a")
If MontN_1 = MontAnnée Then
Worksheets("Récap").Cells(j, "r") =
Worksheets("Récap.n_1").Cells(j, "b")
Else: GoTo LigneN
End If
End Select

LigneN:
Next j
End Sub
Cette macro ne fonctionne pas avec le signe =, par contre avec le signe <>
j'ai en Récap colonne R toutes les valeurs
de Récap.n_1 mais qui bien sur ne correspondent pas au nom de la feuille
Récap.
L'un de vous peut-il m'aider?
D'avance merci.

3 réponses

Avatar
jm
"André" wrote in message
news:entb49$1rl$
Bonjour,

J'ai fait un programme en excel 2000 VBA sous XP et il y a une macro que
je
ne réussi pas à faire fonctionner.
J'ai un classeur avec entre autre une feuille Récap (correspondant à
l'année
actuelle ) et une autre feuille Récap.n_1
(correspodant à l'année 2006)

Dans la feuille Récap la colonne A = noms, la colonne B = sommes. Idem
pour
Récap.n_1 avec comme différence que
les colonnes sont remplies jusqu'à la ligne 55.
But lorsque des noms identiques sont trouvés le montant de Récap.n_1 est
reporté en Récap colonne R

J'ai écrit ceci:
Sub MontantN_1 ()
For j = 8 To 55
NomFeuille = ActiveSheet.Name

Select Case NomFeuille

Case "Jan"
MontN_1 = Worksheets("Récap.n_1").Cells(j, "a")
MontAnnée = Worksheets("Récap").Cells(j, "a")
If MontN_1 = MontAnnée Then
Worksheets("Récap").Cells(j, "r") > Worksheets("Récap.n_1").Cells(j, "b")
Else: GoTo LigneN
End If
End Select

LigneN:
Next j
End Sub
Cette macro ne fonctionne pas avec le signe =, par contre avec le signe <>
j'ai en Récap colonne R toutes les valeurs
de Récap.n_1 mais qui bien sur ne correspondent pas au nom de la feuille
Récap.
L'un de vous peut-il m'aider?
D'avance merci.





Hello,

Essaie d'exécuter en mode pas à pas et regarde ce
que contiennent tes valeurs MontN_1 et MontAnnée
à l'endroit du test.

Si tu ne sais pas le faire, ajoute ceci à ta macro:

Sub MontantN_1 ()


Dim f As Integer

f = Freefile
Open "c:debug.txt" For Output As #f

puis dans la boucle, juste avant ton test

Print #f, "j=" & j & " MontN_1=" & MontN_1 & "<- MontAnnée=" & MontAnnée
& "<-"

puis juste avant le end sub:

Close #f

Il ne te reste plus qu'à aller examiner le fichier c:debug.txt
pour voir ce que contiennent tes variables.
Tu sauras alors pourquoi le "=" semble ne pas fonctionner.

Si après tout ça tout te semble ok (ce dont je doute),
mais si comme tu le dis ça fonctionne avec <>,

tu peux écrire:

If Not( MontN_1 <> MontAnnée) Then

Ce qui devrait aussi marcher et faire ce que tu veux :o)

Mais je suis sur que tu verras des choses en débuggant.

--
Jean-marc
Avatar
JLuc
Simplifie comme ceci, tu n'a pas besoin de branchement "en dur" :

Sub MontantN_1 ()
For j = 8 To 55
NomFeuille = ActiveSheet.Name
Select Case NomFeuille
Case "Jan"
MontN_1 = Worksheets("Récap.n_1").Cells(j, "a")
MontAnnée = Worksheets("Récap").Cells(j, "a")
If MontN_1 = MontAnnée Then
Worksheets("Récap").Cells(j, "r") = _
Worksheets("Récap.n_1").Cells(j, "b")
End If
End Select
Next j
End Sub

Ensuite, si ca ne te mets pas les valeurs, c'est peut être que la
cellule A1 de la feuille Recap n'est pas égale à la cellule A1 de
Recap.N_1...
Sheets("Récap").Range("A1") <> Sheets("Récap.n_1").Range("A1")
Sheets("Récap").Range("A2") <> Sheets("Récap.n_1").Range("A2")
Sheets("Récap").Range("A3") <> Sheets("Récap.n_1").Range("A3")
Sheets("Récap").Range("A4") <> Sheets("Récap.n_1").Range("A4")
Sheets("Récap").Range("A5") <> Sheets("Récap.n_1").Range("A5")
...
Tu veux peut être tester la première valeur de Récap.n_1 sur toutes les
valeurs de Récap, mais là, il faut faire deux boucles intégrées l'une
dans l'autre ;-)

--
JLuc
Avatar
JLuc
Et même comme ceci :

Sub MontantN_1 ()
For j = 8 To 55
Select Case ActiveSheet.Name
Case "Jan"
MontN_1 = Worksheets("Récap.n_1").Cells(j, "a")
MontAnnée = Worksheets("Récap").Cells(j, "a")
If MontN_1 = MontAnnée Then
Worksheets("Récap").Cells(j, "r") = _
Worksheets("Récap.n_1").Cells(j, "b")
End If
End Select
Next j
End Sub

--
JLuc