Saisie automatique des données

Bonjour à tous,

Je débute dans Excel, j'ai déjà fait appel à vous pour une première demande.

Mon tableau a évoluer et j'aurai besoin d'aide ou d'explication car je n'arrive pas à reproduire les tutos j'ai l'impression qu'il me manque des fonctions dans mon Excel.

Dans le tableau ci-joint il y a déjà une macro événementielle qui a été créé mais il faudrait la modifier.

Dans ce tableau, il y a :

  • " stock atelier" : base de données
  • "mouvement " qui consiste à lister les entrées et les sorties des stocks + passer des commandes en cochant la case si besoin.

J'aimerai qu'en rentrant "la désignation" dans l'onglet des "mouvements" : les colonnes : descriptifs, quantité, réelle, quantité et unité se remplisse automatiquement.

De plus j'ai un message d'erreur qui apparait dans le classeur des mouvements " instructions incorrectes à l'extérieur d'une procédure" si quelqu'un peut me la débloquer ou m'expliquer comment faire ...

Je vous remercie d'avance pour votre aide.

Bonjour,

De plus j'ai un message d'erreur qui apparait dans le classeur des mouvements " instructions incorrectes à l'extérieur d'une procédure" si quelqu'un peut me la débloquer ou m'expliquer comment faire ...

Dans le module de la feuille "Stock ATELIER" tu as le mot "Formulaire" qui est inscrit, supprime le !

J'aimerai qu'en rentrant "la désignation" dans l'onglet des "mouvements" : les colonnes : descriptifs, quantité, réelle, quantité et unité se remplisse automatiquement.

Dans cette colonne tu as des formules (voir ci-dessous) donc, tu ne peux pas saisir des valeurs manuellement sans supprimer ces formules !

=SIERREUR(RECHERCHEV($C11;'Stock ATELIER '!$A$11:$DB$15;COLONNE()-1;FAUX);"")

Bonjour,

Merci pour votre réponse.

Concernant la saisie des données j'aimerai qu'elle soit automatique et pas manuelle, j'ai supprimé les formules qui ne sont plus bonnes mais je n'arrive pas à trouver la nouvelle formule qui correspond.

Bonjour,

Dans ce tableau, il y a :

- " stock atelier" : base de données

Comme ta feuille est construite, je n'appelle pas ça une base de données parce que quand je vois "Volige" trois fois avec comme descriptif "4ml*12mm*105mm" pour les trois il y a doublons

J'aimerai qu'en rentrant "la désignation" dans l'onglet des "mouvements" : les colonnes : descriptifs, quantité, réelle, quantité et unité se remplisse automatiquement.

Oui d'accord mais la source de ces désignations c'est la colonne B de la feuille "Stock ATELIER " ou c'est autre chose ?

Je dois alors supprimer manuellement ou il y a une méthode pour les supprimer ?

Concernant la source c'est bien la colonne B de la feuille stock atelier.

Je vous remets le tableau avec les modifications que vous m'avez conseillé.

Merci pour votre aide

Une piste pour commencer.

Le code ci-dessous est à mettre dans le module de la feuille "MOUVEMENTS" en supprimant celui existant (sinon, conflit).

Attention, le nom de la feuille "Stock ATELIER" contient un espace parasite à la fin ("Stock ATELIER ") qui est à supprimer !

Le code fonctionne de la manière suivante ;

  • tu entres la désignation au complet (sans faute de frappe) et en validant la cellule de la colonne D de la feuille "MOUVEMENTS" (Désignation) les valeurs sont inscrites dans les cellules à coté (là, il y a adapter car les champs que tu demandes ne se trouvent pas dans la feuille "Stock ATELIER" mais bon, c'est un détail)
  • tu entres seulement une partie de la désignation et après validation, une boite de message apparaît avec une liste des correspondances te demandant de faire un choix c'est à dire d'indiquer le numéro d'index (chiffre situé en début de phrase). Par exemple, si tu tapes "bas" tu vas avoir un choix de 4 produits "Basting 3ml*63mm*105mm", "Bastaing 4ml 63*175", etc... et si tu saisis 2, les valeurs correspondants à "Bastaing 4ml 63*175" seront inscrites dans les différents champs.
  • tu entres une valeur qui n'existe pas dans la base, tu auras un message te disant qu'il n'y a pas de correspondance.
Fais quelques tests et reviens :
Option Explicit
Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl()
    Dim I As Integer
    Dim J As Integer
    Dim Result As String
    Dim Retour As String

    'zonage
    If Target.Column <> 4 Then Exit Sub
    If Target.Row < 11 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    'gestionnaire d'erreur
    On Error GoTo Fin

    'défini la feuille cible
    Set Fe = Worksheets("Stock ATELIER") '<--- attention aux espaces parasites dans les noms de feuille !

    '"défini la plage de recherche sur la colonne B à partir de B11
    With Fe: Set Plage = .Range(.Cells(11, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    'effectue la recherche...
    For Each Cel In Plage

        'si il y a une correspondance même partielle, récupère les valeurs dans le tableau
        'définir les offsets pour récupérer les valeurs voulues
        If Cel Like Target & "*" Then

            I = I + 1

            ReDim Preserve Tbl(1 To 5, 1 To I)

            Tbl(1, I) = Cel 'Descriptif, valeur en colonne C
            Tbl(2, I) = Cel.Offset(0, 1) 'Descriptif, valeur en colonne C
            Tbl(3, I) = Cel.Offset(0, 3) 'Stock réel, valeur en colonne E
            Tbl(4, I) = Cel.Offset(0, 4) '<--- adapter l'offset en fonction !
            Tbl(5, I) = Cel.Offset(0, 5) '<--- adapter l'offset en fonction !

        End If

    Next Cel

    'gèle les événements
    Application.EnableEvents = False

    'si I est égal à 0, aucune correspondance, génère alors
    'une erreur pour passer sur l'instruction d'activation des événement (Application.EnableEvents = True)
    If I = 0 Then

        MsgBox "Aucune correspondance trouvée !": Err.Raise vbObjectError + 1000

    'sinon, si égal à 1, inscrit les valeurs dans les différentes cellules (adapter probablement ici aussi...)
    ElseIf I = 1 Then

        Target.Value = Tbl(1, 1)
        Target.Offset(, 1).Value = Tbl(2, 1)
        Target.Offset(, 3).Value = Tbl(3, 1)
        Target.Offset(, 4).Value = Tbl(4, 1)
        Target.Offset(, 5).Value = Tbl(5, 1)

    'sinon, il y a plusieurs correspondances etr dans ce cas, un choix est demandé et il faut indiquer
    'l'index du tableau (en début de ligne) où se trouve le produit voulu
    Else

        For J = 1 To UBound(Tbl, 2)

            Result = Result & J & " - " & Tbl(1, J) & vbCrLf

        Next J

        Retour = InputBox("Plusieurs correspondances, indiquer l'index voulu !" & vbCrLf & Result, "Désignation.", 1)

        If Retour <> "" Then

            If IsNumeric(Retour) Then

                Target.Value = Tbl(1, CInt(Retour))
                Target.Offset(, 1).Value = Tbl(2, CInt(Retour))
                Target.Offset(, 3).Value = Tbl(3, CInt(Retour))
                Target.Offset(, 4).Value = Tbl(4, CInt(Retour))
                Target.Offset(, 5).Value = Tbl(5, CInt(Retour))

            Else

                MsgBox "Indiquer le numéro de l'index !": Err.Raise vbObjectError + 1000

            End If

        End If

    End If

Fin:

    Application.EnableEvents = True

End Sub

Merci beaucoup, je vais essayer de ce pas et je te dirais ce qu'il en est.

Rechercher des sujets similaires à "saisie automatique donnees"