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 :
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.
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 :
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.
Partager