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 :
(la fonction est sensé renvoyer un numéro de ligne).Code:Recherche ( Cells (1,i).Value as double, ffseq as WorkSheet) as integer
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.
Et lors de la compilation, le message d'erreur s'affiche à cette ligne :Code:
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
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.Code:L = ProchaineCelluleNonVide_Colonne(i, 1, ffseq)
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.