Type d'argument Byref incompatible

  • Initiateur de la discussion Julien
  • Date de début
J

Julien

Guest
Bonjour à tous,

Voilà j'ai fais un petit code très court et simple. J'ai voulu le découper en function mais je ne sais pas très bien le faire et j'ai une erreur 'Type d'argument Byref incompatible.' sur 'InitFeuille NbFeuille, NomFeuille, FPolice, FTaille'.
Pouvez vous m'aider ?

Merci davance,

Julien


Sub GestionStocks()
Dim FTaille, NbFeuille As Integer
Dim NomFeuille, FPolice, OEntete As String

'----Paramètres ---
NomFeuille = 'Nom de la feuille' 'Nom de la feuille généré
NbFeuille = 2 'Numéro de la feuille généré
FPolice = 'Arial' 'Police du texte
FTaille = 9 'Taille du texte

'--- Initialise la feuille indiquée---
InitFeuille NbFeuille, NomFeuille, FPolice, FTaille

End Sub



' Initialise la feuille
' test si il y a la feuille sinon il l'a créé.
Function InitFeuille(Feuille As Integer, Texte As String, Police As String, Taille As Integer)
If Sheets.Count = 1 And Feuille <> 1 Then
Sheets.Add.Name = Texte
ActiveSheet.Move After:=Worksheets(Sheets.Count)
End If
Sheets(Feuille).Cells.Clear
Sheets(Feuille).Cells.Font.Name = Police
Sheets(Feuille).Cells.Font.Size = Taille
End Function
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Julien, bonjour le forum,

Je suis bien nul en fonction pour pouvoir t'aider mais j'ai remarqué une anomalie dans la déclaration de tes variables. Telles que tu l'a fait :
Dim FTaille, NbFeuille As Integer
Dim NomFeuille, FPolice, OEntete As String


les variables FTaille, NomFeuille et Fpolice sont déclarées de type Variant et cela provoque peut-être l'erreur avec la fonction.

le plus correct serait :
Dim FTaille As Integer, NbFeuille As Integer
Dim NomFeuille As String, FPolice As String, OEntete As String
 

Shining Hawk

XLDnaute Junior
Hug!

je ne sais plus trop d'ou ca vient mais la seule chose que je sais, c'est que quand on a des problèmes avec ByRef ... il faut mettre des ByVal:

Code:
Sub GestionStocks()
Dim FTaille, NbFeuille As Integer
Dim NomFeuille, FPolice, OEntete As String

'----Paramètres ---
NomFeuille = 'Nom de la feuille' 'Nom de la feuille généré
NbFeuille = 1 'Numéro de la feuille généré
FPolice = 'Arial' 'Police du texte
FTaille = 12 'Taille du texte

'--- Initialise la feuille indiquée---
InitFeuille NbFeuille, NomFeuille, FPolice, FTaille

End Sub

' Initialise la feuille
' test si il y a la feuille sinon il l'a créé.
Function InitFeuille(ByVal Feuille As Integer, ByVal Texte As String, ByVal Police As String, ByVal Taille As Integer)
If Sheets.Count = 1 And Feuille <> 1 Then
Sheets.Add.Name = Texte
ActiveSheet.Move After:=Worksheets(Sheets.Count)
End If
Sheets(Feuille).Cells.Clear
Sheets(Feuille).Cells.Font.Name = Police
Sheets(Feuille).Cells.Font.Size = Taille
End Function

Bon courage, tiens nous au courrant si ca ne marche pas.
A+

Message édité par: shining hawk, à: 23/08/2005 15:56
 
J

julien

Guest
Bonjour Robert,
Hug Shining Hawk,

Si vous ne connaissez pas très bien les functions vous avez su me dépanner donc merci beaucoup.
Vos 2 méthodes fonctionnes !
En effet, je ne savais pas que mes variables étaient mal déclarée ainsi. Celà me pose quand meme de gros souci car comme vous avez pu le voir j'ai déjà 6 variable pour initialisé ma feuille, alors j'imagine quand jaurais fini mon programme .

Vu que j'avais mal initialisé et que le VB passe les arguments en référence ca planté. En passant donc juste la variable par byVal, je n'ai pas de soucis de format.

Donc je vais bien déclarer ma variable même si ca m'ennuie bcp mais bon..
Merci beaucoup encore à tous !!
 

pat1545.

XLDnaute Accro
Salut Julien,

il est de loin préférable de mettre en début de code

Option Explicit (possible de l'avoir par défaut)

et de déclarer toutes les variables avec un nom explicite , moi j'ai pour habitude de mettre un M en premier et en majuscule.

Patrick
 

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 353
Membres
103 528
dernier inscrit
hplus