Bonjour,

Etant tout nouveau dans le grand monde du vba, je tâtonne pas mal, en particulier lorsque j'ai des erreurs. Je suis confronté à 2 erreurs, que vraiment, je ne comprends pas.

Dans le cadre de mon travail, j'essaye de faire un suivi de mes dépenses en fonction de nombreux facteurs (année, n° service consommateur, n° compte comptable et n° produit).
J'avais, jusqu'à présent, utilisé la formule equiv pour une recherchev multi-critères, mais je souhaiterai à présent utiliser le vba, qui est bien plus rapide (il faut environ 10-15 min pour traiter l'ensemble de mes données sans le vba).

J'en suis à un point où j'ai mes données 2016 et 2017, par ordre croissant d'année, de service, de compte et décroissant de valeur consommée.
Je dois extraire uniquement les données de 2016 dont la consommation ne se trouve pas en 2017 (cad un produit de 2016 non consommé sur 2017 sur un service et un compte).

1) J'ai créé un tableau variant pour concaténer les données service, compte comptable et n° produit. L'objectif est de comparé si une valo se trouve 2 fois, car dans ce cas elle est présente en 2016 et 2017 (pour un produit, un compte et un service).
Premier problème, j'ai par exemple le service 1870, le compte 94212 et le produit 9176196 et la concaténation me donne 1870942129176190.
De la même façon, le service 1870, le compte 942221 et le produit 9477319 me donne en concaténation 18709422219477300.

Pour le voir j'ai fait mon tableau variant et j'ai affiché les résultats dans une page annexe pour vérifier.
J'ai pourtant déclaré mon tableau comme variant, donc je ne comprends pas ces arrondis.

2) Mon second problème doit être un problème de syntaxe, car, après avoir créé toute ma colonne de concaténation de la longueur de mon tableau originel, je souhaite regarder, pour les données 2016, si la valo se trouve également en 2017.
Je ne vous mets pas le code entier de tout mon travail, mais voici ce qui pourrait aider.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Dim tableau As Range, ligne_1 As Double, ligne_2 As Double, colonne_1 As Double, val As Double, tab_dyna_concatener As Variant, tab_dyna_base As Variant, a1 As Double
Set tableau = Sheets("Base tri UF").Range("A1", Sheets("Base tri UF").Range("A1").End(xlDown)) 'longueur du tableau de données originel
 
ligne_1 = 1
 
'Création d'un tableau variant pour concatener les UFs, les comptes et les comptes produits en colonne A de ce tableau
ReDim tab_dyna_concatener(1 To tableau.Count - 1, 1 To 2)
 
Do Until ligne_1 > tableau.Count - 1 'pas besoin des libellés
 
    tab_dyna_concatener(ligne_1, 1) = Sheets("Base tri UF").Cells(ligne_1 + 1, 2) & Sheets("Base tri UF").Cells(ligne_1 + 1, 4) & Sheets("Base tri UF").Cells(ligne_1 + 1, 6)
    Sheets("Essai").Cells(ligne_1, 1) = tab_dyna_concatener(ligne_1, 1)
    ligne_1 = ligne_1 + 1
 
Loop 'c'est là que je rencontre mon premier problème avec des valos arrondies :/
 
'Variable indiquant le nombre lignes de 2016
a1 = WorksheetFunction.CountIf(Sheets("Base tri UF").Range("A1:A" & tableau.Count), Sheets("Base tri UF").Range("A2"))
ligne_1 = 1
 
'En colonne B du tableau variant, indique pour les lignes de 2016 (cad les premières lignes car triées par années croissantes) si les comptes ne se trouvent qu'en 2016 (Oui),
'ou en 2016 et 2017 (Non)
Do Until ligne_1 > a1
 
    If Application.WorksheetFunction.CountIf(tab_dyna_concatener.Range("A1:A" & tableau.Count - 1), tab_dyna_concatener(ligne_1, 1)) > 1 Then 'erreur 484 d'objet, mais je ne vois pas pourquoi.
    tab_dyna_concatener(ligne_1, 2) = "Non"
    ligne_1 = ligne_1 + 1
    Else
    tab_dyna_concatener(ligne_1, 2) = "Oui"
    ligne_1 = ligne_1 + 1
    End If
 
Loop
Merci pour votre aide