Bonjour,

Je suis débutant sur Visual Basic et je recontre quelques problèmes dans l'exécution de mon code.
En fait, je fais appel à une fonction dans une boucle (do while) et pendant la compilation, on me renvoit le message d'erreur suivant : "type d'argument byref incompatible". La fonction est de la forme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Recherche ( Cells (1,i).Value as double, ffseq as WorkSheet) as integer
(la fonction est sensé renvoyer un numéro de ligne).

Si il y a déjà un problème à ce niveau là, merci de m'éclairer et pour les plus courageux, voici le code un peu plus en détail :

Le principe est le suivant : à partir d'une première base de données, je dois créer une moulinette pour organiser la base de donnée d'une façon différente (plus claire on va dire). La base de donnée initiale est appelée "fi" (avec MaxLignefi, je pense que c'est explicite), j'utilise une feuille "fv" pour feuille variable et la base de donnée finale est appelé ffseq.
La procédure n'a pour but que de détruire les lignes vides. Pour cela, elle fait appel à une fonction qui cherche la prochaine cellule non vide d'une colonne et qui renvoie le numéro de la ligne.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Function ProchaineCelluleNonVide_Colonne(Initialisation As Integer, Colonne As Integer, TableauUtilise As Worksheet) As Integer
 
Dim n As Integer
Dim MaxLigne As Integer
 
MaxLigne = Range("A65536").End(xlUp).Row
 
n = Initialisation
 
While n < MaxLigne And TableauUtilise.Cells(n, Colonne).Value = ""
 
    n = n + 1
 
Wend
 
    ProchaineCelluleNonVide_Colonne = n
 
End Function
 
 
Sub DetruireLigneVide()
 
Dim ffseq As Worksheet
Dim i, L As Integer
Dim MaxLigne, MaxColonne As Integer
 
Set ffseq = Worksheets("Base_finale")
ffseq.Activate
 
MaxLigne = Range("A65536").End(xlUp).Row
MaxColonne = ffseq.UsedRange.Columns.Count
 
i = 5
 
Do While i < MaxLigne
 
    i = i + 1
 
    If Cells(i, 1) <> "" Then
 
    L = ProchaineCelluleNonVide_Colonne(i, 1, ffseq)
 
        If L = i Then
 
            i = i + 1
 
        Else
 
            Range(Cells(i, 1), Cells(L - 1, MaxColonne)).Delete
            i = i + 1
 
        End If
 
    Else
 
        i = i + 1
 
    End If
 
MaxLigneffseq = Range("A65536").End(xlUp).Row
 
Loop
 
End Sub
Et lors de la compilation, le message d'erreur s'affiche à cette ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
L = ProchaineCelluleNonVide_Colonne(i, 1, ffseq)
Voilà, c'est surement une erreur de débutant, mais j'ai commencé visual basic depuis très peu de temps et je ne connais pas toutes les fonctions disponibles par exemple. Merci d'avance de m'éclairer.


PS : Je suppose qu'il existe un code plus "efficace" que celui décrit plus haut, mais le problème apparait dans un autre endroit du code (trop long à décrire) et qui ne peut pas être écrit de 36 façons différentes tellement il est spécifique.