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 :

Macro VBA excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 6
    Par défaut Macro VBA excel
    Bonjour à tous,
    Je m'appelle Alexandre et je suis nouveau sur ce forum
    Je suis actuellement en stage dans une entreprise d'agroalimentaire et j'ai pour mission de synchroniser certaines données de torréfactions de l'entreprise.
    Je vous expose mon problème : Des containers de matière première sont pesés et les données de pesée sont collectées dans une feuille excel. Ensuite, les containers sont vidés dans des trappes liées à des machines de torréfaction.
    J'ai pensé à mettre en place un système de code à barre pour effectuer le suivi des containers. c'est à dire associer un containers à chaque pesée et à chaque vidange (sachant qu'un containers peut être pesé et vidé plusieurs fois dans la journée).
    J'ai donc écrit un code en VBA pour simuler le fonctionnement de la bipette du code à barre et ainsi pouvoir anticiper la collecte des données. Cependant, j'ai des erreurs dans le code que je n'arrive pas à comprendre. J'imagine que c'est des erreurs assez faciles à corriger mais j'ai beau me creuser la tête je ne trouve pas de solutions. (Je ne suis pas très très bon en VBA).
    Je voudrais savoir si quelqu'un aurait la gentillesse de m'aider dans mon problème puisque je n'arrive pas à appliquer mon code.
    Merci d'avoir pris de votre temps pour lire mon message, bonne journée

    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
    Sub Bipette()
        Dim NBipette As Integer
        Dim x As Integer    'Lignes utilisées pour le tri de la colonne N°Bipette
        Dim i As Integer    'Lignes utilisées pour le tri de la colonne N°Vidange
        x = 1 'Initialise les lignes N°Bipette
        NBipette = InputBox("Insérez N°Bipette", "N°Bippette", "Valeur N°Bipette")
        While Cells(x, 2).Value <> "" 'Cherche le nombre de lignes dans la colonne N°Bipette
            x = x + 1 'Cherche le nombre de lignes dans la colonne N°Bipette
        Wend    'Cherche le nombre de lignes dans la colonne N°Bipette
        i = x 'Une fois trouvé, attribut x à i, variable ligne N°Vidange qui va permettre d'effectuer un tri depuis la dernière valeur entrée pour éviter les cas où le numéro du container est bien le bon mais que c'était une vidange déjà effectuée bien avant la dernière effectuée par ce même container
        While Cells(i, 2).Value <> NBipette 'Tant que la valeur de la cellule n'est pas égale à celle de la bipette (C'est cette ligne qui semble bloquer. De plus, j'aimerais bien ajouter ici une condition que i doit être supérieur à 0 mais je pense qu'un OR ne convient pas)
            i = i - 1 'On regarde la cellule précédente
        Wend
        If Cells(i, 2).Value <> Cells(i, 3).Value Then
            Cells(i, 3) = NBipette  'On attribue à la case de vidange le n°Bipette
        Else
            Cells(x + 1, 2) = NBipette 'Sinon on l'attribut à une nouvelle cellule de pesée
        End If
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par koxandre Voir le message
    J'ai donc écrit un code en VBA pour simuler le fonctionnement de la bipette du code à barre et ainsi pouvoir anticiper la collecte des données.
    Les participants à ce forum ne savent rien du contexte et de la nature de ton développement.
    Pourrais-tu être plus explicite sur ce qu'est supposé réalisé ton code ?

    Cependant, j'ai des erreurs dans le code que je n'arrive pas à comprendre.
    Quelle est la nature de ces "erreurs" ?
    Un bug ? (quelle message ? quelle ligne de code ?)
    Un résultat incohérent ? Quel résultat attendais-tu ? Quel résultat obtiens-tu ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 6
    Par défaut
    Bonjour Menhir, merci de ta réponse rapide.
    Je suis désolé si je n'ai pas détaillé correctement ^^
    Alors en fait, un même container va être utilisé pour effectuer une pesée et une vidange. Il va donc être bipé deux fois. J'ai donc essayé de faire un code qui prend en compte chaque bipage. Pour chaque bipage, le code va vérifier si le numéro du container a déjà été bipé.
    => Si il n'a jamais été bipé : le code va écrire le numéro du container dans une nouvelle ligne de la colonne associée au N° de pesée (vu que la pesée se fait avant la vidange, cela est logique).
    => Si il a déjà été bipé, le code va regarder dans la colonne de pesée la dernière fois qu'il a été bipé et il va ensuite regarder si dans la cellule a côté (qui appartient à la colonne des vidange) le N° du container est présent.
    ===>Si il n'est pas présent, c'est qu'il n'a pas été vidangé et qu'il est entrain de se vidanger (vu qu'il a déjà été bipé comme pesé). On va donc compléter la case de vidange par le N° de container (plus tard il y aura d'autres informations associées mais pour l'instant j'essaie déjà avec un exemple simple donc juste avec le numéro du container (même si juste répéter les mêmes numéros deux fois ne semble pas pertinent)).
    ===>Si la case de vidange est déjà remplie, on va alors ajouter une nouvelle cellule dans la colonne des pesée avec le N° du container pesé associé.

    Pour l'instant j'essaie juste d'effectuer une simulation sans avoir de bipette donc juste essayer de créer un code qui fonctionne sur le même principe. J'ai donc remplacé ce qui va être la bipette par un InputBox.

    Pour ce qui est des bug je ne sais pas ce qui se passe, c'est justement mon problème, je n'arrive pas à comprendre ce qui ne va pas.
    j'ai un problème à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Cells(i, 2).Value <> NBipette
    avec comme message "Erreur d'execution '1004' erreur définie par l'application ou par l'objet". Cependant, je ne vois pas e"n quoi ma ligne comporte des erreurs.

    Pour l'instant mon code ne me retourne qu'un 0 sur ma ligne de vidange ce qui n'est pas ce que je veux ^^

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par koxandre Voir le message
    j'ai un problème à la ligne " While Cells(i, 2).Value <> NBipette " avec comme message "Erreur d'execution '1004' erreur définie par l'application ou par l'objet".
    Quand le bug se déclenche, regarde la valeur de la variable i dans la fenêtre Variables locales.
    Je suis à peu près sûr que cette valeur sera 0. Il serait donc normal que le Cells ne l'accepte pas comme n° de ligne.
    Plus clairement, si la boucle ne trouve pas NBipette dans les lignes, rien ne l'arrête quand elle arrive en haut de tableau et elle essaye de continuer sa recherche au dessus du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Bipette()
        Dim NBipette As Integer
        Dim Cherche As Range
        NBipette = InputBox("Insérez N°Bipette", "N°Bippette", "Valeur N°Bipette")
        Set Cherche = Range("B1:B" & Range("B1").End(xlDown).Row).Find(NBipette)
        If Cherche Is Nothing Then
            Range("B1").End(xlDown).Offset(1,1).Value = NBipette 'Sinon on l'attribut à une nouvelle cellule de pesée
        Else
            Cells(Cherche.Row, 3).Value = NBipette
        End If
    End Sub
    Cela dit, je ne pense pas que définir un code barre comme Integer soit une bonne idée. A la place, je le définirais comme String.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2016
    Messages : 6
    Par défaut
    J'ai bien pris en compte ce que tu m'as dit. Effectivement il y avait un problème avec la valeur du i, j'ai donc rajouté une boucle while comme suit :
    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
    Sub Bipette()
        Dim NBipette As Integer
        Dim x As Integer    'Lignes utilisées pour le tri de la colonne N°Bipette
        Dim i As Integer    'Lignes utilisées pour le tri de la colonne N°Vidange
        x = 1 'Initialise les lignes N°Bipette
        NBipette = InputBox("Insérez N°Bipette", "N°Bippette", "Valeur N°Bipette")
        While Cells(x, 2).Value <> "" 'Cherche le nombre de lignes dans la colonne N°Bipette
            x = x + 1 'Cherche le nombre de lignes dans la colonne N°Bipette
        Wend    'Cherche le nombre de lignes dans la colonne N°Bipette
        i = x 'Une fois trouvé, attribut x à i, variable ligne N°Vidange qui va permettre d'effectuer un tri depuis la dernière valeur entrée pour éviter les cas où le numéro du container est bien le bon mais que c'était une vidange déjà effectuée bien avant la dernière effectuée par ce même container
        While i >= 2
            While Cells(i, 2).Value <> NBipette 'Tant que la valeur de la cellule n'est pas égale à celle de la bipette
                i = i - 1 'On regarde la cellule précédente
            Wend
        Wend
        If Cells(i, 2).Value <> Cells(i, 3).Value Then
            Cells(i, 3) = NBipette  'On attribue à la case de vidange le n°Bipette
        Else
            Cells(x + 1, 2) = NBipette 'Sinon on l'attribut à une nouvelle cellule de pesée
        End If
    End Sub
    Cependant j'ai maintenant un autre problème : l'algorithme ne détecte plus d'erreurs mais note que la première valeur sur la première cellule de la colonne de pesée. Lorsque je relance l'algorithme, cela remplace la valeur précédente.

    Pour ce qui est du code que tu m'as envoyé, je suppose qu'il s'agit d'une correction améliorée de mon code ? Merci beaucoup ! Cependant, je retrouve à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B1").End(xlDown).Offset(1, 1).Value = NBipette
    la même erreur que j'avais précédemment sur la première version de mon code.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par koxandre Voir le message
    J'ai bien pris en compte ce que tu m'as dit. Effectivement il y avait un problème avec la valeur du i, j'ai donc rajouté une boucle while comme suit :
    Sincèrement (et sans vouloir être désobligeant), c'est n'importe quoi.
    Une boucle n'est pas un test. Si tu veux intégrer cette seconde condition à ta boucle, il faut le faire dans la même boucle en utilisant des opérateurs logiques (And, Or, etc.) pour clarifier la condition de sortie de boucle (ce qui est sur la même ligne que While).

    Pour ce qui est du code que tu m'as envoyé, je suppose qu'il s'agit d'une correction améliorée de mon code ?
    Etant donné qu'il n'y a que la ligne InputBox qui soit conservée, on ne peut pas appeler ça une "amélioration". C'est plutôt une recréaction.

    Cependant, je retrouve à la ligne "Range("B1").End(xlDown).Offset(1, 1).Value = NBipette " la même erreur que j'avais précédemment sur la première version de mon code.
    Qu'est-ce que tu as dans la colonne B ?

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

Discussions similaires

  1. [VBA-E]Probleme macro VBA excel 2000 2003
    Par skichatchat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2007, 21h16
  2. incompatibilité macros VBA excel 2000 et 2003
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2007, 12h20
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 21h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45

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