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 ?
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?
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?
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..
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
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
Je te laisse adapter, si tu veux travailler avec ton code
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
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