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 :

Aller à ligne résultat variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut Aller à ligne résultat variable
    Bonjour à toutes et à tous,
    Pour mon projet, j'ai besoin de gérer un stock d'articles.
    Mon tableau est déjà rempli avec un inventaire à jour, je cherche à le maintenir à jour avec une macro.
    J'ai 2 colonnes, la première A comprend les numéro d'articles (art1, art2 art3 etc...)
    La seconde, B, correspond aux quantités d'articles qui correspondent (5, 200, 5000 etc...).
    Je souhaite faire une inputbox dans laquelle je rentre le nom de l'article, et la quantité à ajouter.
    Seulement, je n'arrive pas à trouver une méthode pour activer une cellule en fonction d'un résultat d'une variable.
    Pourriez vous m'aider?
    J'ai des connaissances sommaires en VBA.
    Ci dessous le code.

    D'avance merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub selectart()
    'déclaration selectart comme variable '
    Dim selectart As String
    selectart = InputBox("Saisie code article : ")
    'affichage résultat seclectart dans la cellule'
    Range(selectart.Value).Copy
    End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    Je viens apporter des précisions.
    Dans l'inputbox, je vais écrire la référence d'un article déjà dans une cellule de la colonne A (art3 par exemple).
    J'aimerais que la macro sélectionne la cellule juste à coté, dans la colonne B donc.
    J'y rajouterais cette variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim qteart As String
    qteart = InputBox("Saisie quantité : ")
    Cells(celluleactive).Select
    Selection.Value = qteart
    End Sub

  3. #3
    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
    Quand on veut gérer correctement un stock, il faut faire trois onglets :

    Un onglet "Inventaire" qui indique les quantités réelles constatées dans le stock à un instant donné.

    Un onglet "Mouvement" qui indique toutes les entrées et sorties (une ligne pour chaque entrée ou sortie).

    Un onglet "Etat", calculé d'après les deux précédents, qui donne la quantité actuelle en stock, en ajoutant aux valeurs de l'onglet "Inventaire" toutes les entrées de l'onglet "Mouvement" et en soustrayant toutes les sorties de ce même onglets.
    On peut facilement connaitre la somme des entrées et des sorties en utilisant la fonction SOMME.SI().
    https://support.office.com/fr-FR/art...2-1697a653039b

    Avec cette méthode, ça t'évitera d'utiliser du VBA, ce qui sera une bonne chose pour toi puisque, visiblement, c'est un outils que tu ne maitrises pas.

  4. #4
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    Bonjour Menhir,
    Merci pour ta réponse.
    Mon projet ne concerne pas uniquement une gestion de stock, mais également une planification-mise en production.
    Je ne l'ai pas précisé avant pour ne pas que cela parte dans tout les sens.
    Voilà une ébauche du cahier des charges du projet:

    Je souhaite créer un fichier excel pour une gestion d’articles et d’ordre de fabrication (OF).
    Il y aura 5 feuilles, peut être 6 (entrée – sorties – stock – OF en cours – OF finis – peut être acceuil)
    Dans la feuille stock :
    J’aimerais 2 colonnes ; Nomarticle // quantité
    Dans la feuille entrée :
    Ici je souhaiterais via une inputbox sélectionner un article présent dans la feuille ‘’stock’’ et y ajouter une quantité.
    Avec une option ‘’fin OF’’, j’en parlerais plus bas
    Cela met à jour l’article concerné dans la feuille ‘’stock’’.
    Cela met à jour l’OF concerné dans la feuille ‘’OF Finis’’
    Dans la feuille sortie :
    Via une inputbox sélectionner un article présent dans la feuille ‘’stock’’ et y soustraire une quantité.
    Avec 2 choix possibles : début OF // Destruction
    Cela met à jour l’article concerné dans la feuille ‘’stock’’.
    Cela met à jour l’OF concerné dans la feuille ‘’OF en cours’’
    Dans la feuille OF en cours :
    J’aimerais que pour chaque sortie de stock faites avec le choix ‘’début OF’’, une ligne soit crée avec :
    Nom de l’article // Quantité // Numéro de l’OF // date de saisie
    Dans la feuille OF finis :
    J’aimerais que pour chaque entrée de stock faites avec l’option ‘’fin OF’’, la ligne crée dans la feuille OF en cours soit supprimée, puis collée ici avec la date de saisie.

    Pour l'instant, j'essaye via une macro d'ajouter manuellement une quantité via l'inputbox, mais je n'arrive pas à sélectionner la bonne cellule
    Pourtant, j'arrive à:
    Sélectionner une cellule avec une adresse fixe (exemple B1)

    Voici le début de macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub selectart()
    'déclaration selectart comme variable '
    Dim selectart As String
    'affichage résultat seclectart dans la cellule B2'
    selectart = InputBox("Saisie code article : ")
    Cells(2, 2).Select
    Selection.Value = selectart
    'déclaration qteart comme variable '
    Dim qteart As String
    'affichage résultat qteart dans la cellule C2'
    qteart = InputBox("Saisie quantité : ")
    Cells(2, 3).Select
    Selection.Value = qteart
    End Sub
    Ici les cellules sont fixes car je butte sur la syntaxe.
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Rows("selectart.Value").select
    Rows(selectart.value).select
    Rows("selectart".value).select
    Rows(selectart).select
    Aucune ne fonctionne

    Ce que j'aimerais, c'est qu'après avoir validé le code article via l'inputbox, la macro sélectionne la case quantité en face, dans laquelle je mettrais la quantité à jour
    Les articles sont déjà crées, et seront reconnu à terme, par une douchette.

    Merci pour vos réponses

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim selectart As String
    selectart = InputBox("Saisie code article : ")
    Cells(2, 2).Select
    Selection.Value = selectart
    Déjà, ce bout de code peut se résumer à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(2, 2).Value = InputBox("Saisie code article : ")
    Mais je ne comprends pas pourquoi tu utilises un InputBox simplement pour écrire dans une cellule données.
    pourquoi ne pas simplement écrire la valeur dans la cellule B2 sans utiliser d'InputBox ?

    Pour le reste de ton explication, franchement, je ne sais pas si c'est une application professionnelle que tu développes, mais ça me semble basé sur une manque de rigueur flagrant qui m'inquiète pour toi.
    Une gestion de stock sans référentiel fixe ni historique des mouvements ???

  6. #6
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    Merci pour la réponse.
    Merci pour le résumé du code.
    Cependant, cela ne résous pas mon problème.
    Le code article est déjà crée dans la colonne A.

    Je souhaite que l'article que lorsque l'on saisit un article dans l'inputbox, la cellule de l'article soit sélectionnée.

    Cet interface va être utilisé avec une douchette, il faut que cela soit rapide, et clair.
    On ne veut pas avoir à utiliser la souris, et pour le clavier, le moins possible (entrée numérique des quantités uniquement)


    Pour le manque de rigueur, sois rassuré, tout va bien.
    Pour le référentiel fixe et l'historique des mouvement, je pense que tu as lu en diagonale mon post précédent:

    "J’aimerais que pour chaque sortie de stock faites avec le choix ‘’début OF’’, une ligne soit crée avec :
    Nom de l’article // Quantité // Numéro de l’OF // date de saisie"

    "Dans la feuille stock :
    J’aimerais 2 colonnes ; Nomarticle // quantité"

    Un manque de rigueur me semble t'il.

    Mais là n'est pas la question.

    Pour résumer:
    Dans la colonne A:
    Nomarticle
    Colonne B:
    Quantité de l'article

    J'aimerais que pour ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(2, 2).Value = InputBox("Saisie code article : ")
    "saisie code article :") renvoie directement à la cellule de l'article saisie.


    D'avance merci

  7. #7
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    Rebonjour,
    J'ai réussi à faire le code correspondant à mes attentes:

    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
    Sub selectart()
    Set myRange = Worksheets("Feuil1").Range("A1:A65000")
    'déclaration selectart comme variable '
    Dim selectart As String
    'affichage résultat seclectart dans la cellule concernée'
    selectart = InputBox("Saisie code article : ")
     myRange.find(selectart).Select
     
    'déclaration qteart comme variable '
    Dim qteart As String
    'affichage résultat qteart dans la cellule C2'
    qteart = InputBox("Saisie quantité : ")
    'décallage cellule pour aller sur qté
    ActiveCell.Offset(0, 1).Select
    Selection.Value = qteart
    End Sub

    Cependant, lorsque j'essaie de scanner un code barre pour y rentrer un code article, j'ai une erreur qui apparaît:
    Variable Objet ou variable de bloc With non définie.
    J'ai formaté les cellules articles en tant que nombre, sans décimales, sans séparateur de milliers, et avec les polices suivantes:
    - barcode font
    - C39HrP24DhTt
    - Code EAN13
    - CODE3X
    Malheureusement rien à changé.
    Le modèle de douchette est le suivant:
    Datalogic Touch 90.

    Merci d'avance pour votre aide

  8. #8
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Septembre 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 17
    Par défaut
    Bonjour Marc-L,
    Avec le bloc note, elle lit bien le code barre.
    J'ai également remarqué qu'une partie du chant de l'input box est renseignée avant l'apparition du message d'erreur.

    Bonjour Menhir,
    La ligne de code surlignée est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myRange.Find(selectart).Select
    Merci à vous deux pour vos réponses

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    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
    Dim P As Range, C1 As String, c2 As String, L As Integer
    Public Function MiIputeBox(ByRef Plage As Range, Col1 As String, Col2 As String) As String
    Set P = Plage: C1 = Col1: c2 = Col2
    Me.Show vbModal
     
     
    If L <> 0 Then MiIputeBox = Plage.Parent.Cells(L, 1).Address
    End Function
    Private Sub CommandButton1_Click()
    Dim txt As String, I As Integer
     
     
    For I = 1 To 2
        If Me.Controls("TextBox" & I) = "" Then txt = txt & Me.Controls("Label" & I) & " ne peut pas être nule!" & vbCrLf
    Next
     If Me.TextBox2 <> "" And Not IsNumeric(Me.TextBox2) Then txt = txt & Me.Label2 & " n'est pas numérique!" & vbCrLf
    If txt <> "" Then MsgBox txt: Exit Sub
     
     
     
     
    L = RechercheDoubleEntre(P, Me.TextBox1, Me.TextBox2, C1, c2)
    Me.Hide
     
     
    End Sub
    Function RechercheDoubleEntre(Plage As Range, ChercheTxt1 As String, ChercheTxt2 As String, ColCherche1 As String, ColCherche2 As String) As Long
    Dim L As Long: L = 1
    Do While L > 0
        L = SerchXls(Plage, Plage.Cells(L, 1), ChercheTxt1, True, False)
        If Not CBool(L) Then Exit Do
        If Plage.Parent.Cells(L, ColCherche2) = ChercheTxt2 Then Exit Do
    Loop
    RechercheDoubleEntre = L
    End Function
    Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean, EnBoucle As Boolean) As Long '
    On Error Resume Next
    SerchXls = 0
    If EntierCell = False Then Entier = xlPart Else Entier = xlWhole
       SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=Entier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row And EnBoucle = False Then SerchXls = 0
    End Function
    Private Sub UserForm_Click()
     
     
    End Sub
    si ça t'inspire ms https://www.developpez.net/forums/d1...e/#post7819625
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 13/09/2017 à 15h25.

Discussions similaires

  1. retour à la ligne sur variable DOS
    Par Goldorak2 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 29/03/2007, 17h32
  2. saut de ligne dans variable de type Mémo
    Par Yanmeunier dans le forum Access
    Réponses: 2
    Dernier message: 05/05/2006, 15h52
  3. Requète paramétrée avec résultat variable
    Par slackjayo dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 20h39
  4. Réponses: 3
    Dernier message: 07/04/2006, 10h40
  5. nb ligne résultat
    Par GMI dans le forum SQL
    Réponses: 3
    Dernier message: 28/09/2004, 12h23

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