XL 2013 Erreur de compilation à l'appel d'un module

Art13

XLDnaute Nouveau
Bonjour, lors de l'appel d'un module un message d'erreur apparait me disant attendue non module mais variable ou procédure attendu
VB:
Sub Cursseur()


Set Cible = Feuil1
Compteur_vide = 0

    Set Start_boucle = ThisWorkbook.ActiveSheet.Cells(2, 1) 'demarrage boucle recup infos
        
    ThisWorkbook.ActiveSheet.Activate 'se placer sur la feuille de l'année en cours
    Start_boucle.Select 'selectionner premiere cellule de recup
    
    For i = 1 To 13
    
        If ActiveCell.Value <> "" Then 'si non vide
            Compteur_vide = 0
            GAMME = ActiveCell.Value
            Selection.Offset(0, 1).Select
            If (ActiveCell.Value <> "") Then
                    Reference = ActiveCell.Value
            Selection.Offset(0, 8).Select
            If (ActiveCell.Value <> "") Then
                    Nom_Produit = ActiveCell.Value
Reference_Produit = Reference
Produit = Nom_Produit
Call Gestion_Stock
            Selection.Offset(1, -9).Select
 

        Else
            Compteur_vide = Compteur_vide + 1
            Selection.Offset(1, -9).Select
            If Compteur_vide = 3 Then
                Exit For
            End If
        End If
        End If
        End If
        Next
        
End Sub
 
Solution
re,

voila votre code modifié, mettant à jour les quantités
les tabulations sont là pour simplifier la lecture du code, je vous conseille d'utiliser ce système ou un autre équivalent pour ordonner et organiser votre code et ainsi en faciliter la lecture et la compréhension

Bien cordialement, @+
VB:
Option Explicit
Option Private Module
'Déclaration variables ***********************
Public GAMME As String 'Fournisseur
Public Nom_Produit As String 'Fournisseur du fichier stock
Public Quantite_Deduite As Integer
Public Cible As Worksheet 'Feuill FOURNISSEUR
Public Reference_Produit As String 'Model pour recherche
Sub Cursseur()
Dim i%, Compteur_vide&, Start_boucle As Range, Cellule_Cherche As Range
Compteur_vide = 0
Set Start_boucle =...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Art13, shinozak, le forum

Art13, ce code que vous avez récupéré je ne sais ou et modifié n'importe comment ne peut pas fonctionner correctement.
vous établissez des références que vous n'utilisez pas
vous activez des objets déjà actifs
vous bouclez sur des variables que vous n'utilisez pas dans la boucle
vous faites des sélections inutiles et redécalez les sélections sans avoir utilisé les sélections intermédiaires
Vous mettez des parenthèses qui ne servent à rien
vous faites des appels de procédures dont vous ne fournissez pas le code
J'arrête là parce que rien ne va dans votre code, on ne peut même pas comprendre à la lecture ce qu'il est censé faire.
Mettez un fichier exemple et on va reprendre tout cela

Bien cordialement, @+
 

Etoto

XLDnaute Barbatruc
Bonjour Art13, shinozak, le forum

Art13, ce code que vous avez récupéré je ne sais ou et modifié n'importe comment ne peut pas fonctionner correctement.
vous établissez des références que vous n'utilisez pas
vous activez des objets déjà actifs
vous bouclez sur des variables que vous n'utilisez pas dans la boucle
vous faites sélections inutiles et redécalez les sélections sans avoir utilisé les sélection intermédiaires
Vous mettez des parenthèses qui ne servent à rien
vous faites des appels de procédures dont vous ne fournissez pas le code
J'arrête là parce que rien ne va dans votre code, on ne peut même pas comprendre à la lecture ce qu'il est censé faire.
Mettez un fichier exemple et on va reprendre tout cela

Bien cordialement, @+
@Yeahou,

Heu, par hasard aurais-tu supprimé le doublon ? Je trouve plus l'autre discussion, sinon merci de l'aide que tu apportes.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,
déjà , ça, ça ne sert à rien
ThisWorkbook.ActiveSheet.Activate
en clair, vous dites "active la feuille active du classeur contenant la macro"
il ne sert à rien d'activer la feuille active et si le classeur actif n'est pas celui contenant la macro, cela plantera car il faut d'abord activer un classeur avant de pouvoir activer une de ses feuilles
 

Art13

XLDnaute Nouveau
Pour vous expliquer mon fichier puit mon besoin,

dans mon onglet Caissière j'ai ajouté un bouton qui exécute un modul nommé ( "Cursseur").

Mon modul Cursseur et une boucle qui récupère les donnée saisi dans l'onglet associé pour appelé un module nommé Recherche qui devra effectué une rechrcheV dans l'onglet ("FOURNISSEUR) pour faire un - 1 dans la colonne(Quantité) associé à la Varrable Produit.

Pour facilité la RechercheV, ma variable (ReferenceProduit) à la même syntaxe des différents élément present dans la colone A.

Qui me permet de
 

Art13

XLDnaute Nouveau
re,
déjà , ça, ça ne sert à rien
ThisWorkbook.ActiveSheet.Activate
en clair, vous dites "active la feuille active du classeur contenant la macro"
il ne sert à rien d'activer la feuille active et si le classeur actif n'est pas celui contenant la macro, cela plantera car il faut d'abord activer un classeur avant de pouvoir activer une de ses feuilles
D'accord, vous avez raison en plus le bouton et sur la bonne feuille.
Mais cella m'aider pour le pas à pas afin de trouver la bonne logique de déplacement de curseur ;)
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,
dans cette partie, vous faites une boucle de 1 à 13 mais vous n'utilisez i nulle part donc vous répétez ce code 13 fois sans aucun changement
VB:
    For i = 1 To 13
   
        If ActiveCell.Value <> "" Then 'si non vide
            Compteur_vide = 0
            GAMME = ActiveCell.Value
            Selection.Offset(0, 1).Select
            If (ActiveCell.Value <> "") Then
                    Reference = ActiveCell.Value
            Selection.Offset(0, 8).Select
            If (ActiveCell.Value <> "") Then
                    Nom_Produit = ActiveCell.Value
Reference_Produit = Reference
Produit = Nom_Produit

            Selection.Offset(1, -9).Select
 
        Else
            Compteur_vide = Compteur_vide + 1
            Selection.Offset(1, -9).Select
            If Compteur_vide = 3 Then
                Exit For
            End If
        End If
        End If
        End If
        Cherche
        Next
vous utilisez Reference_Produit alors que vous avez déclaré une variable dim Referenc_produit
ce n'est pas la même chose
pour vos déclarations de variable, vous avez utilisé dim hors d'une procédure ce qui veut dire qu'elles sont publiques uniquement au sein du module qui les abrite, il faut les déclarer comme cela pour les utiliser dans l'ensemble du projet

Code:
Option Private Module
'Déclaration variables ***********************
Public GAMME As String 'Fournisseur
Public Reference As String 'Model
Public Nom_Produit As String 'Fournisseur du fichier stock
Public Cible As Worksheet 'Feuill FOURNISSEUR
Public Referenc_Produit As String 'Model pour recherche
Public Produit As String 'Fournisseur pour Recherche
 
Dernière édition:

Art13

XLDnaute Nouveau
il y'a bien un changement c'est lors de la valeur de ActivCell.Value qui et mis dans les variables.

que je veut utilisé dans mon module Recherche qi sera appeler à la ligne
VB:
Reference_Produit = Reference
Produit = Nom_Produit
Cherche' Nom Modul'
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,
pour l'instant, désactivez la ligne cherche tant qu'elle ne réfère à rien
utilisez option explicit en début de vos modules pour débuger facilement avec le menu débogage/compiler
le code des variables
VB:
Option Private Module
'Déclaration variables ***********************
Public GAMME As String 'Fournisseur
Public Reference As String 'Model
Public Nom_Produit As String 'Fournisseur du fichier stock
Public Cible As Worksheet 'Feuill FOURNISSEUR
Public Reference_Produit As String 'Model pour recherche
Public Produit As String 'Fournisseur pour Recherche
le code de cursseur (je ne sais pas si c'est voulu mais normalement curseur s'écrit avec un seul s)
si je ne me suis pas trompé, cela fonctionnera à l'identique sans sélection
Code:
Option Explicit
Sub Cursseur()
Dim Compteur_vide&, Start_boucle As Range
Compteur_vide = 0
Set Start_boucle = ActiveSheet.Cells(2, 1) 'demarrage boucle recup infos
Start_boucle.Select 'selectionner premiere cellule de recup
For i = 1 To 13
    With Start_boucle.Offset(i - 1, 0)
        If .Value <> "" Then 'si non vide
            Compteur_vide = 0
            GAMME = .Value
            With .Offset(0, 1)
                If .Value <> "" Then
                    Reference = .Value
                    With .Offset(0, 8)
                        If .Value <> "" Then
                            Nom_Produit = .Value
                            Reference_Produit = Reference
                            Produit = Nom_Produit
                        Else
                            Compteur_vide = Compteur_vide + 1
                            If Compteur_vide = 3 Then Exit For
                        End If
                    End With
                End If
            End With
        End If
    End With
    'Cherche
Next i
End Sub

dans le code du fichier , il n'y avait pas l'appel à gestion_stock, normal ?
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
500

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali