[Résolu] Erreur de compil sur Function( wb As Workbook, str As String) As Boolean

dodoc5

XLDnaute Nouveau
Bonjour,

Actuellement en stage je rencontre un petit soucis avec une fonction que j'ai mis au point.

Il s'agit de code VBA qui se place dans un workbook, à une feuille précise, à une cellule précise et qui boucle sur cette colonne. Je vérifie chaque case de la colonne et si la valeur de case ne correspond pas à ce que je recherche je supprime entièrement la ligne.

L'utilité est que j'ai un excel principal qui génère des excel pour chaque service de l'entreprise. L'idée est que sur ces "sous-excel" les chefs de service aient accès qu'aux ressources de leur service en gros.

Je link la function qui ne compile pas, j'ai le droit à :
"Instruction incorrecte à l'extérieur d'un bloc type"
et le curseur me surligne en jaune la première ligne et me surligne en bleu la deuxième


Code:
Function TriService(wbService As Workbook, ServiceChoisi As String) As Boolean
 'wbService = le sous-excel, ServiceChoisi = le nom du service obtenu via une combobox d'un formulaire

    wsRSC As Worksheet      'ws des Ressources humaines
    wsTLAS As Worksheet    'ws Tableau de Lien Activité - Service (je précise plus bas dans le post)
    wsACTI As Worksheet     'ws des Activités
    
    Set wsRSC = wbService.Worksheets("RSC")
    Set wsTLAS = wbService.Worksheets("Tab lien serv_act")
    Set wsACTI = wbService.Worksheets("Activités")
    
    Dim Cell As Range
            'Boucle sur chaque cellule de la plage
            For Each wsRSC.Cell In Range("G1:G100")
                If Not Cell.Text Like ServiceChoisi Then Cell.EntireRow.Delete  'si la Cellule ne correspond pas au service je delete la ligne
            Next Cell
            
            For Each wsTLAS.Cell In Range("D1:D100")
                If Not Cell.Text Like ServiceChoisi Then Cell.EntireRow.Delete
            Next Cell

    
End Function


Alors effectivement, je dois aussi attribuer un service ou plusieurs à des activités déclarées sur l'excel principal, ces affectations sont effectuées dans cet excel et ensuite je dois supprimer dans l'onglet tableau de lien service - activité les activités qui ne correspondent pas au service et mettre à jour l'onglet activité en conséquence.

ça peut sembler compliquer mais en fait je fais juste de la réduction d'information par service.
Cette fonction est appelée dans le code d'un bouton se situant dans un formulaire où l'on choisi dans une liste déroulante le service puis on clic sur le bouton "générer" qui copie le fichier excel principal, puis le réduit au service.

Si vous avez une idée, une remarque, un conseil pour faire plus simple, je prend =P





Excel principal avec un bouton de génération de sous-excel + traitement incorporé à la suite
> sous-excel Service 1 (copie de excel principal traité pour le service)
> sous-excel Service 2 (copie de excel principal traité pour le service)
> sous-excel Service 3 (copie de excel principal traité pour le service)

arborescence de mon projet :

REF\ Excel Principal
REF\ServiceN\Sous-Excel serviceN

Je navigue automatiquement dans les sous dossier qui portent le nom du service et les sous-excel on toujours la même nomenclature à savoir
Référentiel_'NomDuService'.xlsm
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Erreur de compil sur Function( wb As Workbook, str As String) As Boolean

bonjour,

vite fait comme ça, je vois qu'ici il semble manqué l'instruction DIM !?
Dim wsRSC As Worksheet 'ws des Ressources humaines
Dim wsTLAS As Worksheet 'ws Tableau de Lien Activité - Service (je précise plus bas dans le post)
Dim wsACTI As Worksheet 'ws des Activités
 

dodoc5

XLDnaute Nouveau
Re : Erreur de compil sur Function( wb As Workbook, str As String) As Boolean

Alors effectivement, ça me change l'erreur déjà ... La honte =P

Maintenant quand j'appelle la fonction j'ai une erreur apparemment sur le classeur :

"Type d'argument ByRef incompatible"


Code:
Dim classeurWork As workbook
Set classeurWork = Application.Workbooks.Open(casDir + "\Référentiel_" + ComboBoxVal2 + ".xlsx")
'pour info casDir = chemin d'accès au sous-dossier

Code:
If TriService(classeurWork, ComboBoxVal2) Then
        MsgBox ("Ok")
    Else
        MsgBox ("Fail")
    End If
 

dodoc5

XLDnaute Nouveau
Bon j'ai su corriger le problème précédent en déclarant chaque donnée une par une.

Mais j'ai un nouveau soucis sur :

Code:
For Each wsRSC.Cell In Range("G1:G100")

Apparement je n'ai pas le droit de faire la manip wsRSC.Cell ici. Mais je vois pas trop pourquoi


EDIT :

Problème réglé, plutôt que de vouloir faire court il suffisait de faire un wsRSC.select avant la boucle.

Finalement ce forum m'inspire tout seul =P
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
535

Statistiques des forums

Discussions
312 367
Messages
2 087 648
Membres
103 628
dernier inscrit
rou37x