Paramétrer une macro en fonction VBA

mouna

XLDnaute Nouveau
Bonjour,

J'ai crée une macro qui compare deux tables "annuaire" et "erreur" et renvoie dans la table "annuaire" le nombre de données correctes. Maintenant ma macro depend des colonnes "B" et "C" codées dans la macro. Mon but est de variabiliser les colonnes utilisées pour pouvoir créer une fonction à partir de la macro "Test_comparer5" ou dans les arguments je mettrais les colonnes à comparer et la cellule ou le nombre de bonnes réponses seront renseignées.

Et donc de cette maniére ma macro ne dependera plus des colonnes B et C mais peu importe l'emplacement des colonnes elle marchera.

Je me suis penchée sur la question depuis quelques jours mais je n'arrive pas à le faire.

Est ce que vous avez une idée de comment je peux faire ça ou une autre idée pour créer ma fonction ?

Merci d'avance.
 

Pièces jointes

  • Test MacroV1.xlsm
    21.6 KB · Affichages: 25

Modeste

XLDnaute Barbatruc
Re : Paramétrer une macro en fonction VBA

Bonsoir mouna,

Dans ton autre fil, ma première réaction était de dire qu'une formule pouvait donner le même résultat

... En définitive, tu vas passer par une fonction personnalisée, basée sur un code que tu as le mérite d'avoir créé, mais qui n'est sans doute pas "optimisé". Es-tu certaine que ce soit le bon choix?
 

mouna

XLDnaute Nouveau
Re : Paramétrer une macro en fonction VBA

Bonsoir,

Merci pour ta réponse. Je suis bien consciente mais il me le faut en VBA ... Il faut que je passe effectivement par une fonction personnalisée.

Est ce que tu peux m'aider à le faire ?

merci
 

Modeste

XLDnaute Barbatruc
Re : Paramétrer une macro en fonction VBA

il me le faut en VBA
C'est ce que tu avais dit l'autre fois, oui.

Et le code que j'avais proposé ne convenait pas (puisque tu reviens avec ta procédure "test_compare5") ? Ce n'est pas que je sois horriblement vexé (bien que ... :)) mais peux-tu préciser pourquoi tu choisis un code plutôt que l'autre?
 

job75

XLDnaute Barbatruc
Re : Paramétrer une macro en fonction VBA

Bonsoir mouna, Modeste,

A priori vraiment pas besoin de VBA, entrer en annuaire!D5 et tirer vers le bas :

Code:
=SOMMEPROD(N(B5&CAR(1)&C5=DECALER(erreur!M$5;;;1000)&CAR(1)&DECALER(erreur!N$5;;;1000)))
1000 est le nombre maximum de lignes du tableau étudié, à augmenter au besoin.

La formule s'ajuste automatiquement si l'on insère ou supprime des colonnes voire des des lignes.

A+
 

mouna

XLDnaute Nouveau
Re : Paramétrer une macro en fonction VBA

Je ne choisis pas on me l'impose. A chaque fois j'ai une etape en plus à rajouter à ma macro. Et donc je reviens pour chercher l'aide nécessaire.

En l’occurrence maintenant que ma macro marche il faut que je la transforme en fonction :). Ton aide m'a été précieuse et je garde ton code précieusement pour le présenter plus tard. Mais la je dois faire ce qu'on me dit de faire..
 

mouna

XLDnaute Nouveau
Re : Paramétrer une macro en fonction VBA

J'ai essayé de faire ça mais ça me renvoie une erreur. Est ce que quelqu'un peut regarder la source de l'erreur ?

Merci

Function compare(range1 As Range, range2 As Range, range3 As Range, range4 As Range) As Integer

Dim i As Integer
Dim r As Integer

For i = 1 To range1.Rows.Count

If range1.Cells(i, 1).Value Like range3.Cells(i, 1).Value And range2.Cells(i, 1).Value Like range4.Cells(i, 1).Value Then
range2.Cells(i, 1).Offset(0, 7).Value = 1

Else: range2.Cells(i, 1).Offset(0, 7).Value = 0

End If

Next i

For i = 1 To range1.Rows.Count
If range2.Cells(i, 1).Offset(0, 7).Value = 1 Then
r = r + 1
End If

Next i
ThisWorkbook.Worksheets("Annuaire").Range("G5").Value = r

compare = r

End Function
 

Modeste

XLDnaute Barbatruc
Re : Paramétrer une macro en fonction VBA

Salut job :) (nous sommes bien d'accord, mais bon!?)

mouna, essaie de coller ce code dans un module standard:
Code:
Function compter(leNom As String, lePrénom As String, colNoms As Range)
Application.Volatile
cpt = 0
For Each c In colNoms
    If c & c.Offset(0, 1) = leNom & lePrénom Then cpt = cpt + 1
Next c
compter = cpt
End Function
Dans ta feuille erreur, il suffit d'écrire
Code:
=compter(B5;C5;erreur!$M$5:$M$52)
pour compter le nombre de "toto mouna".

... et advienne que pourra :rolleyes:

Je te laisse adapter, si tu veux travailler avec ton code :)

Bonne nuit tout le monde,
 

job75

XLDnaute Barbatruc
Re : Paramétrer une macro en fonction VBA

Bonsoir JM,

Je suppose que les vils empêcheurs sont des gens qui n'y connaissent rien mais qui ne jurent que par VBA.

C'est assez courant sur ce forum :rolleyes:

Alors une petite fonction qui devrait leur plaire :

Code:
Function Compte(P As Range, colonnes As Range)
Dim t$, r As Range
t = P(1) & Chr(1) & P(1, 2)
For Each r In Intersect(colonnes, colonnes.Parent.UsedRange).Rows
  If r.Cells(1) & Chr(1) & r.Cells(1, 2) = t Then Compte = Compte + 1
Next
End Function
Fichier joint.

A+
 

Pièces jointes

  • Compte(1).xls
    52 KB · Affichages: 30
  • Compte(1).xls
    52 KB · Affichages: 38
  • Compte(1).xls
    52 KB · Affichages: 31

Discussions similaires

Réponses
39
Affichages
709

Statistiques des forums

Discussions
312 234
Messages
2 086 475
Membres
103 226
dernier inscrit
smail12