IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Première Maccro problème gestion de pièces maintenance [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Première Maccro problème gestion de pièces maintenance
    Bonjour étant étudiant en BTS Maintenance Industrielle j'ai pour projet de réaliser lors de mon stage une gestion des pièces de maintenance grâce à Microsoft Excel. Il me reste à réaliser simplement 3 macros pour mettre à terme mon projet.
    Malheureusement étant ultra novice en VBA je suis aujourd'hui totalement perdu, voici ci-dessous mon code pour effectuer une entrée de stock pour une pièce non référencée.
    Il y a surement pleins d'erreur mais je suis vraiment débutant ... En espérant que vous pourrez m'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Option Explicit
     
    Sub Entrée_Stock_Non_Référencée()
     
        Dim Désignation2 As Name
        Dim Utilisation2 As Name
        Dim Réf_stock2 As Name
        Dim Marque2 As Name
        Dim Fournisseur2 As Name
        Dim Réf_fourn2 As Name
        Dim Coût_unit2 As Name
        Dim Quantité2 As Name
        Dim Coût_tot2 As Name
        Dim Seuil_alert2 As Name
     
        Static Num_Ligne As Long
        Num_Ligne = Num_Ligne + 1
     
    ' Déclaration
        Set Désignation2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 3)
        Set Utilisation2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 4)
        Set Réf_stock2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 5)
        Set Marque2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 6)
        Set Fournisseur2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 7)
        Set Réf_fourn2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 8)
        Set Coût_unit2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 9)
        Set Quantité2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 10)
        Set Coût_tot2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 11)
        Set Seuil_alert2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 12)
     
     
    'Avertissement erreur de saisie
     
        If Désignation2 = "" Or Utilisation2 = "" Or Réf_stock2 = "" Or Marque2 = "" Or Fournisseur2 = "" Or Réf_fourn2 = "" Or Coût_unit2 = "" Or Quantité2 = "" Or Coût_tot2 = "" Or Seuil_alert2 = "" Then
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.")
            'Appuie sur Bouton Ok
        End If
     
    'Exécution de l'entrée du stock
     
    '
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Saisie_pièces_non].Copy.Value
        Destination=:Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Suivi du stock").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 10))
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Référentiel].Copy.Value
        Destination=:Workbooks("Référentiel pièces maintenance").Sheets("Feuil2").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 7))
     
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Question subsidiaire: qu'est-ce-qui ne marche pas ?
    Quelques commentaires rajoutés dans votre code d'origine .... identifiés par 'VB Blabla ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub Entrée_Stock_Non_Référencée()
     
    'VB Le type est étrange: ça devrait plutot être du "Range"
        Dim Désignation2 As Name
        Dim Utilisation2 As Name
        Dim Réf_stock2 As Name
        Dim Marque2 As Name
        Dim Fournisseur2 As Name
        Dim Réf_fourn2 As Name
        Dim Coût_unit2 As Name
        Dim Quantité2 As Name
        Dim Coût_tot2 As Name
        Dim Seuil_alert2 As Name
     
    'VB Vous auriez à définir qqchose du style
       dim WbkRef As Workbook
       Set WbkRef =  Workbooks("Gestion des pièces maintenance 2ème projet")
     
        Static Num_Ligne As Long
        Num_Ligne = Num_Ligne + 1 'VB C'est quoi l'utilité?
     
    ' Déclaration
        Set Désignation2 = WbkRef.Sheets("Entrée stock").Cells(18, 3) 'VB et ainsi de suite
     
        Set Utilisation2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 4)
        Set Réf_stock2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 5)
        Set Marque2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 6)
        Set Fournisseur2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 7)
        Set Réf_fourn2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 8)
        Set Coût_unit2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 9)
        Set Quantité2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 10)
        Set Coût_tot2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 11)
        Set Seuil_alert2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 12)
     
     
    'Avertissement erreur de saisie
     
        If Désignation2 = "" Or Utilisation2 = "" Or Réf_stock2 = "" Or Marque2 = "" Or Fournisseur2 = "" Or Réf_fourn2 = "" Or Coût_unit2 = "" Or Quantité2 = "" Or Coût_tot2 = "" Or Seuil_alert2 = "" Then
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.")
            'Appuie sur Bouton Ok
        End If
     
    'Exécution de l'entrée du stock
     
    '
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Saisie_pièces_non].Copy.Value
        Destination=:Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Suivi du stock").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 10))
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Référentiel].Copy.Value
        Destination=:Workbooks("Référentiel pièces maintenance").Sheets("Feuil2").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 7))
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,
    A mon avis ces variable sont des variables chaîne de caractères soit String donc les Name seront remplacés par des String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Désignation2 As Name      devient Dim Désignation2 as String et ainsi de suite
        Dim Utilisation2 As Name
        Dim Réf_stock2 As Name
        Dim Marque2 As Name
        Dim Fournisseur2 As Name
        Dim Réf_fourn2 As Name
    Les autres variables devraient être de type numérique. Donc les Name devraient être des Dble ou Currency pour du monétaire ou Integer ou Long pour des entiers
    Cordialement.

    RJ

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Voici le code modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Option Explicit
     
    Sub Entrée_Stock_Non_Référencée()
     
        Dim Désignation2 As String
        Dim Utilisation2 As String
        Dim Réf_stock2 As String
        Dim Marque2 As String
        Dim Fournisseur2 As String
        Dim Réf_fourn2 As String
        Dim Coût_unit2 As Currency
        Dim Quantité2 As Integer
        Dim Coût_tot2 As Currency
        Dim Seuil_alert2 As Integer
     
        Dim WbkRef As Workbook
     
        Static Num_Ligne As Long
        Num_Ligne = Num_Ligne + 1
     
    ' Déclaration
        Set WbkRef = Workbooks("Gestion des pièces maintenance 2ème projet")
     
        Set Désignation2 = WbkRef.Sheets("Entrée stock").Cells(18, 3)
        Set Utilisation2 = WbkRef.Sheets("Entrée stock").Cells(18, 4)
        Set Réf_stock2 = WbkRef.Sheets("Entrée stock").Cells(18, 5)
        Set Marque2 = WbkRef.Sheets("Entrée stock").Cells(18, 6)
        Set Fournisseur2 = WbkRef.Sheets("Entrée stock").Cells(18, 7)
        Set Réf_fourn2 = WbkRef.Sheets("Entrée stock").Cells(18, 8)
        Set Coût_unit2 = WbkRef.Sheets("Entrée stock").Cells(18, 9)
        Set Quantité2 = WbkRef.Sheets("Entrée stock").Cells(18, 10)
        Set Coût_tot2 = WbkRef.Sheets("Entrée stock").Cells(18, 11)
        Set Seuil_alert2 = WbkRef.Sheets("Entrée stock").Cells(18, 12)
     
     
     
    'Avertissement erreur de saisie
     
        If Désignation2 = "" Or Utilisation2 = "" Or Réf_stock2 = "" Or Marque2 = "" Or Fournisseur2 = "" Or Réf_fourn2 = "" Or Coût_unit2 = "" Or Quantité2 = "" Or Coût_tot2 = "" Or Seuil_alert2 = "" Then
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.")
            'Appuie sur Bouton Ok
        End If
     
    'Exécution de l'entrée du stock
     
    '
        WbkRef.Sheets("Entrée stock").[Saisie_pièces_non].Copy.Value Destination:=Workbooks("Référentiel pièces maintenance").Sheets("Suivi du stock").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 10)).
        WbkRef.Sheets("Entrée stock").[Référentiel].Copy. Value Destination =:.Sheets("Feuil2").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 7)).Paste
     
    End Sub
    Le problème étant que lorsque je souhaite exécuter la macro, celle-ci me cite :" Erreur de Compilation Objet requis" tout en sélectionnant "Désignation2".
    Je pense également qu'il y a une erreur dans " L'exécution de l'entrée stock".

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Pas compris pourquoi tu utilisais (mal) des variables de type Name (plages nommées). Pour une plage nommé le code devrait s'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 3).Name = "Désignation2"
    je pense que tu voulais utiliser des variable de type Range plutôt que Name où là, ton code était correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Désignation2 As Range
    Set Désignation2 = Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, 3)
    Mais, une simple boucle suffisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Entrée_Stock_Non_Référencée()
     
    Static Num_Ligne As Long 'pas compris
    Num_Ligne = Num_Ligne + 1 'pas compris
     
    For I = 3 To 12
        If Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, I).Value = "" Then
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.")
            Exit Sub
        End If
    Next I
     
    'Exécution de l'entrée du stock
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Saisie_pièces_non].Copy _
           Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Suivi du stock").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 10))
        Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").[Référentiel].Copy _
           Workbooks("Référentiel pièces maintenance").Sheets("Feuil2").Range(Cells(3 + Num_Ligne, 1), Cells(3 + Num_Ligne, 7))
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Effectivement Désignation2, Utilisation2,.. sont pour moi juste des noms pour simplifier l'écriture du code.
    Je n'ai pas besoin de boucle au niveau du MsgBox car ceci permet juste d'avertir le technicien en début de macro de la mauvaise saisie des caractères des cellules : "Désignation2", "Utilisation2", etc ...

    La Variable suivante, me permet de coller a la suite les informations de chaque pièces dans la feuille "suivi du stock". J'ai pensé à mettre une boucle mais d'après le livre "Macros et Langage VBA" (Que j'utilise pour la création de cette macro), la fin d'une boucle doit être défini hors je ne sais pas combien de pièces sera rentré dans le stock avec le temps. Peut être 1000,2000 ou 5000 je ne sais pas avec le temps. Voila pourquoi j'ai utilisé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Static Num_Ligne As Long
        Num_Ligne = Num_Ligne + 1
    Mais je pense que cette variable ne va pas fonctionner ...

    Autant pour moi je viens de comprendre la fonction de la boucle. Il est vrai que cela est plus simple.

    Maintenant il me reste le soucis de la copie ...

    Comment dois-je déclarer la variable "I" ?

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For I = 3 To 12
    If Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Entrée stock").Cells(18, I).Value = "" Then
    Donc I désigne une colonne ici, un INTEGER devrait le faire

    la fin d'une boucle doit être défini hors je ne sais pas combien de pièces sera rentré dans le stock avec le temps. Peut être 1000,2000 ou 5000 je ne sais pas avec le temps.
    Vous avez quelques possibilités:

    1. passer par le UsedRange : déconseillé (c'est mal actualisé par expérience)
    2. passer par le CurrentRegion/ specialcells / xlCellTypeLastCell

    Par exemple, en supposant que vos enregistrements de stocks commencent en "A1":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set InpRng = Wsh.Range("A1").CurrentRegion
    Debug.Print  InpRng.Address
     
    RowN =InpRng.Rows.Count + 1 'devrait vous positionner sur la ligne après le dernier enregistrement
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai peur de ne pas avoir tout compris désolé j'ai tout de même essayé..

    cela veut dire que mon code deviendrait donc le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Option Explicit
     
    Sub Entrée_Stock_Non_Référencée()
     
        Dim WbkRef As Workbook
        Set WbkRef = Workbooks("Gestion des pièces maintenance 2ème projet")
     
     
    ' Déclaration
     
        Dim I As Integer
        Set WbkRef = Workbooks("Gestion des pièces maintenance 2ème projet")
     
     
    'Avertissement erreur de saisie
     
      For I = 3 To 12
      If WbkRef.Sheets("Entrée stock").Cells(18, I).Value = "" Then
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.")
            'Appuie sur Bouton Ok
        End If
    Next I
     
    'Exécution de l'entrée du stock
     
    Set InpRng = Wsh.Range("A3").CurrentRegion
    Debug.Print  InpRng.Address
     
    RowN =InpRng.Rows.Count + 1 'devrait vous positionner sur la ligne après le dernier enregistrement
     
    '
        WbkRef.Sheets("Entrée stock").[Saisie_pièces_non].Copy.Value Destination:=Workbooks("Gestion des pièces maintenance 2ème projet").Sheets("Suivi du stock").RowN
        WbkRef.Sheets("Entrée stock").[Référentiel].Copy.Value Destination:=Workbooks("Référentiel pièces maintenance").Sheets("Feuil2").RowN
     
    End Sub
    Le code ne fonctionne pas. Je suis désolé j'ai vraiment du mal voici 1 semaine que je travaille sur ce code ^^.

  9. #9
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Difficile de t'aider sans avoir les fichiers qui vont bien. Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Entrée_Stock_Non_Référencée()
    Dim I As Byte 'déclare la variable I (Incrément)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim DL1 As Integer 'déclare la variable DL1 (Dernière Ligne 1)
    Dim DL2 As Integer 'déclare la variable DL2 (Dernière Ligne 2)
     
    Set CS = Workbooks("Gestion des pièces maintenance 2ème projet.xls") 'ou .xlsx ou .xlsm
    'Avertissement erreur de saisie
    For I = 3 To 12
        If CS.Sheets("Entrée stock").Cells(18, I).Value = "" Then 'condition : si l'une des cellule de la boucle est vide
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.") 'message
            Exit Sub 'sort de la procédure pour pouvoir finir l'édition des données manquante
        End If 'fin de la condition
    Next I
     
    'comme tu copies les données dans deux onglets différents il te faut définir deux variables de dernière ligne éditée DL1 et DL2 (à moins que ce ne soit la même)
    'définit la dernière ligne éditée DL1 de la colonne 1 (=A) de l'onglet "Suivi du stock" du classeur source CS
    DL1 = CS.Sheets("Suivi du stock").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    'définit la dernière ligne éditée DL2 de la colonne 1 (=A) de l'onglet "Feuil2" du classeur "Référentiel pièces maintenance"
    DL2 = Workbooks("Référentiel pièces maintenance").Sheets("Feuil2").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
     
    CS.Sheets("Entrée stock").[Saisie_pièces_non].Copy CS.Sheets("Suivi du stock").Cells(L1, 1)
    CS.Sheets("Entrée stock").[Référentiel].Copy Workbooks("Référentiel pièces maintenance.xls").Sheets("Feuil2").Cells(LI2, 1) 'ou .xlsx ou .xlms
    End Sub
    Attention à la syntaxe !
    Range(Ta_plage).Value.Copy n'est pas correct. Le Value est en trop...
    Quand tu spécifies le nom d'un fichier il faut mettre l'extension
    À plus,

    Thauthème

    Je suis Charlie

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci pour le code et les explications c'est très compréhensible mais malheureusement il ne fonctionne pas je ne comprends pas pourquoi.
    Ci-joint mes fichiers de gestions. je vous remercie de m'accorder du temps.

    Gestion des pièces maintenance 2ème projet.xlsxRéférentiel pièces maintenance.xlsx

  11. #11
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Skerty, bonjour le forum,

    En effet il y avait encore des erreurs j'avais transformé DL1 en LI1 et on avait oublié les extensions dans le nom des fichiers.
    Le code ci-dessous va planter à la dernière ligne car il n'existe pas de plage nommée Référentiel. Une fois que tu auras nommé la plage en question tu n'auras plus de problème.
    Attention ! Quand tu auras mis la macro dans le fichier Gestion des pièces maintenance 2ème projet il faudra l'enregistrer avec l'extension .xlsm. Le code est déjà adapté pour ça...
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub Entrée_Stock_Non_Référencée()
    Dim I As Byte 'déclare la variable I (Incrément)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim DL1 As Integer 'déclare la variable DL1 (Dernière Ligne 1)
    Dim DL2 As Integer 'déclare la variable DL2 (Dernière Ligne 2)
     
    Set CS = Workbooks("Gestion des pièces maintenance 2ème projet.xlsm")
    'Avertissement erreur de saisie
    For I = 3 To 12
        If CS.Sheets("Entrée stock").Cells(18, I).Value = "" Then 'condition : si l'une des cellule de la boucle est vide
            MsgBox ("ATTENTION : La saisie (ENTREE PIECE NON REFERENCEE) est incorrecte. Toutes les caractéristiques ne sont pas remplies. Veuillez saisir à nouveau.") 'message
            CS.Sheets("Entrée stock").Cells(18, I).Select 'sélectionne la cellule non renseignée
            Exit Sub 'sort de la procédure pour pouvoir finir l'édition des données manquante
        End If 'fin de la condition
    Next I
     
    'comme tu copies les données dans deux onglets différents il te faut définir deux variables de dernière ligne éditée DL1 et DL2 (à moins que ce ne soit la même)
    'définit la dernière ligne éditée DL1 de la colonne 1 (=A) de l'onglet "Suivi du stock" du classeur source CS
    DL1 = CS.Sheets("Suivi du stock").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    'définit la dernière ligne éditée DL2 de la colonne 1 (=A) de l'onglet "Feuil2" du classeur "Référentiel pièces maintenance"
    DL2 = Workbooks("Référentiel pièces maintenance.xlsx").Sheets("Feuil2").Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
     
    CS.Sheets("Entrée stock").[Saisie_pièces_non].Copy CS.Sheets("Suivi du stock").Cells(DL1, 1).Select
    CS.Sheets("Entrée stock").[Référentiel].Copy Workbooks("Référentiel pièces maintenance.xlsx").Sheets("Feuil2").Cells(DL2, 1) 'manque la plage nommée
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai encore un problème. Lorsque j'exécute la macro j'ai une fenêtre qui s'ouvre avec mentionné :"Erreur d'exécution '9' : L'indice n'appartient pas à la sélection". Le débogage me surligne la variable "DL2".

  13. #13
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Skerty, bonjour le forum,

    J'ai vu une erreur à la ligne 23 où il faut supprimer .Select à la fin. Mais ce n'est pas la solution à ton problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CS.Sheets("Entrée stock").[Saisie_pièces_non].Copy CS.Sheets("Suivi du stock").Cells(DL1, 1)

    Sinon j'ai testé chez moi en enregistrant les fichiers sur mon disque dur avec l'extension .xlsm pour le fichier source. Le seul problème est celui que je t'ai cité : manque la plage nommée Référentiel.
    À plus,

    Thauthème

    Je suis Charlie

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Thauthème, c'est parfait. Vous m'avez tous été d'un grand secours

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FAQ] [Access 2007] Gestion des pièces jointes en VBA
    Par Tofalu dans le forum Contribuez
    Réponses: 4
    Dernier message: 04/07/2006, 00h16
  2. Problème gestion actionListener pour JButton
    Par cedricbr dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/05/2006, 16h39
  3. gestion des Piéces Jointes
    Par dimkha dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 01/12/2005, 17h09
  4. Problème - Gestion des exceptions - MFC.
    Par Atomikx dans le forum MFC
    Réponses: 4
    Dernier message: 14/11/2005, 09h38
  5. [Première installation] Problème de connexion
    Par sekiryou dans le forum Installation
    Réponses: 2
    Dernier message: 02/03/2004, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo