Microsoft 365 Automatisation reconnaissance valeurs suppression et remplissage autres cases.

codebarre

XLDnaute Nouveau
Bonjour, excusez moi de vous déranger, je reviens vers vous avec une nouvelle question...


J'ai réussi à effectuer grâce à vous ce que je voulais, j'ai également pu automatiser mes dates...mais un autre problème se pose maintenant. Pour vous éclaircir ma situation je travaille pour l'armée (stage) et les documents sont confidentiels. Je vais vous transmettre une feuille excel sans les données d'autres feuilles derrières qu'elle va chercher pour que le système puisse tourner, mais au moins ça imagera mieux ma demande.


Lorsque je scanne à gauche des codes barres, outils puis personnel puis aeronef, mes données se mettent automatiquement dans celui de droite via des recherchesV.
Dans l'idée le système doit me permettent de tracer des outils qui sont donnés par un chef d'atelier à des mécanos, ce qu'on appelle la "perception" dans le tableau de droite, au niveau de la partie perception je n'ai pas de soucis.


Les problèmes arrivent au niveau des deux dernières colonnes de droite, pour la partie "réintégration".
Le mécano va redonner l'outils au chef d'atelier (du genre 1 mois plus tard), et j'aimerais que lorsque l'on scanne une nouvelle fois cet outil dans la colonne "outils" de gauche, mon système puisse reconnaitre que l'outils à déja été percu (une sorte de reconnaissance de présence dans la colonne de gauche) et donc supprimer ce chiffre doublon, et que ca me dirige donc ensuite vers la colonne tout à droite ""valid réint", que je scanne le code barre du chef d'atelier pour validation et qu'ensuite ca me ramène à la colonne A afin de rescanner des outils... !!!
Et ainsi de suite, que ça permette donc de pouvoir rescanner cet outil dans la colonne de gauche pour le refaire percevoir...jusqu'à une nouvelle réintégration !

Voila je ne sais pas si j'ai été clair...!!
Je vous remercie pour votre aide !!!


Belle journée à vous.
 

Pièces jointes

  • TEST PERCEPTION - Copie.xls
    63.5 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Codebarre,
je préfère répondre sur ce fil plutôt que sur l'autre où le sujet n'a rien à voir.
J'ai rien compris à votre fichier donc j'en ai créer un compatible du premier post, à savoir valeur scannée en A1 et liste outil dans une feuille séparée.
J'utilise la macro Worksheet_Calculate qui se déclenche sur un recalcul de la feuille.
Le principe :
- Quand un article est scanné je vérifie s'il est dans la liste
- S'il y est c'est qu'il est sorti donc je met la date en Renté.
- S'il n'y est pas c'est qu'il sort, et dans ce cas je l'inscrit à la fin du tableau.

VB:
Public msValeurSave ' Sauvegarde de la valeur en A1 pour exécution macro si modification valeur
Sub Worksheet_Calculate()
    If [A1].Value <> msValeurSave Then                  ' si c'est la valeur de A1 qui a changé alors
        msValeurSave = Range("D26").Value               ' sauvegarde nouvelle valeur
        Numéro = [A1]                                   ' on mémorise le numéro scanné
        ' L'outil est il déjà sorti ?
        Application.ScreenUpdating = False
        DL = [D65500].End(xlUp).Row                     ' dernière ligne du tableau
        T = Range("D1:G" & DL)                          ' transfert tableau dans array ( plus rapide )
        Rentre = 0                                      ' rentre vadra 0 s'il l'outil sort et 1 si l'outil rentre
        For i = 1 To DL                                 ' pour chaque ligne du tableau
            If T(i, 1) = Numéro And T(i, 4) = "" Then   ' alors outil est déjà sorti, donc il rentre
                Rentre = 1                              ' pour signifier ensuite que l'outil est rentré
                Cells(i, "G") = Date                    ' on inscrit la date de rentrée de l'outil
                Exit For
            End If
        Next i
        If Rentre = 0 Then                              ' si ici Rentre=0 c'est que l'outil n'est pas sorti
            On Error Resume Next
            Outil = Application.Match(Numéro, Sheets("Feuil3").[A:A], 0)    ' l'outil est il dans la liste
            If IsError(Outil) Then
                MsgBox "Outil non référencé.": Exit Sub
            End If
            TypeOutil = Sheets("Feuil3").Cells(Outil, "B")
            Cells(DL + 1, "D") = Numéro                 ' on inscrit le N° scanné
            Cells(DL + 1, "E") = TypeOutil              ' on inscrit le type
            Cells(DL + 1, "F") = Date                 ' on inscrit la date
        End If
        Application.EnableEvents = False
            [A1] = ""                                   ' fini, donc on efface le numéro scanné
        Application.EnableEvents = True
    End If
End Sub
 

Pièces jointes

  • Codebarre.xlsm
    18.9 KB · Affichages: 4

codebarre

XLDnaute Nouveau
Re Codebarre,
je préfère répondre sur ce fil plutôt que sur l'autre où le sujet n'a rien à voir.
J'ai rien compris à votre fichier donc j'en ai créer un compatible du premier post, à savoir valeur scannée en A1 et liste outil dans une feuille séparée.
J'utilise la macro Worksheet_Calculate qui se déclenche sur un recalcul de la feuille.
Le principe :
- Quand un article est scanné je vérifie s'il est dans la liste
- S'il y est c'est qu'il est sorti donc je met la date en Renté.
- S'il n'y est pas c'est qu'il sort, et dans ce cas je l'inscrit à la fin du tableau.

VB:
Public msValeurSave ' Sauvegarde de la valeur en A1 pour exécution macro si modification valeur
Sub Worksheet_Calculate()
    If [A1].Value <> msValeurSave Then                  ' si c'est la valeur de A1 qui a changé alors
        msValeurSave = Range("D26").Value               ' sauvegarde nouvelle valeur
        Numéro = [A1]                                   ' on mémorise le numéro scanné
        ' L'outil est il déjà sorti ?
        Application.ScreenUpdating = False
        DL = [D65500].End(xlUp).Row                     ' dernière ligne du tableau
        T = Range("D1:G" & DL)                          ' transfert tableau dans array ( plus rapide )
        Rentre = 0                                      ' rentre vadra 0 s'il l'outil sort et 1 si l'outil rentre
        For i = 1 To DL                                 ' pour chaque ligne du tableau
            If T(i, 1) = Numéro And T(i, 4) = "" Then   ' alors outil est déjà sorti, donc il rentre
                Rentre = 1                              ' pour signifier ensuite que l'outil est rentré
                Cells(i, "G") = Date                    ' on inscrit la date de rentrée de l'outil
                Exit For
            End If
        Next i
        If Rentre = 0 Then                              ' si ici Rentre=0 c'est que l'outil n'est pas sorti
            On Error Resume Next
            Outil = Application.Match(Numéro, Sheets("Feuil3").[A:A], 0)    ' l'outil est il dans la liste
            If IsError(Outil) Then
                MsgBox "Outil non référencé.": Exit Sub
            End If
            TypeOutil = Sheets("Feuil3").Cells(Outil, "B")
            Cells(DL + 1, "D") = Numéro                 ' on inscrit le N° scanné
            Cells(DL + 1, "E") = TypeOutil              ' on inscrit le type
            Cells(DL + 1, "F") = Date                 ' on inscrit la date
        End If
        Application.EnableEvents = False
            [A1] = ""                                   ' fini, donc on efface le numéro scanné
        Application.EnableEvents = True
    End If
End Sub
Je suis fasciné par tant de compétences et de réactivité !
Je regarde ça dès que je suis de retour, mais je pense pouvoir l'adapter à mon problème !
Je vous remercie déjà une première fois et je vous tiens au courant !!!

Vous êtes formidable monsieur ;)
 

codebarre

XLDnaute Nouveau
Re Codebarre,
je préfère répondre sur ce fil plutôt que sur l'autre où le sujet n'a rien à voir.
J'ai rien compris à votre fichier donc j'en ai créer un compatible du premier post, à savoir valeur scannée en A1 et liste outil dans une feuille séparée.
J'utilise la macro Worksheet_Calculate qui se déclenche sur un recalcul de la feuille.
Le principe :
- Quand un article est scanné je vérifie s'il est dans la liste
- S'il y est c'est qu'il est sorti donc je met la date en Renté.
- S'il n'y est pas c'est qu'il sort, et dans ce cas je l'inscrit à la fin du tableau.

VB:
Public msValeurSave ' Sauvegarde de la valeur en A1 pour exécution macro si modification valeur
Sub Worksheet_Calculate()
    If [A1].Value <> msValeurSave Then                  ' si c'est la valeur de A1 qui a changé alors
        msValeurSave = Range("D26").Value               ' sauvegarde nouvelle valeur
        Numéro = [A1]                                   ' on mémorise le numéro scanné
        ' L'outil est il déjà sorti ?
        Application.ScreenUpdating = False
        DL = [D65500].End(xlUp).Row                     ' dernière ligne du tableau
        T = Range("D1:G" & DL)                          ' transfert tableau dans array ( plus rapide )
        Rentre = 0                                      ' rentre vadra 0 s'il l'outil sort et 1 si l'outil rentre
        For i = 1 To DL                                 ' pour chaque ligne du tableau
            If T(i, 1) = Numéro And T(i, 4) = "" Then   ' alors outil est déjà sorti, donc il rentre
                Rentre = 1                              ' pour signifier ensuite que l'outil est rentré
                Cells(i, "G") = Date                    ' on inscrit la date de rentrée de l'outil
                Exit For
            End If
        Next i
        If Rentre = 0 Then                              ' si ici Rentre=0 c'est que l'outil n'est pas sorti
            On Error Resume Next
            Outil = Application.Match(Numéro, Sheets("Feuil3").[A:A], 0)    ' l'outil est il dans la liste
            If IsError(Outil) Then
                MsgBox "Outil non référencé.": Exit Sub
            End If
            TypeOutil = Sheets("Feuil3").Cells(Outil, "B")
            Cells(DL + 1, "D") = Numéro                 ' on inscrit le N° scanné
            Cells(DL + 1, "E") = TypeOutil              ' on inscrit le type
            Cells(DL + 1, "F") = Date                 ' on inscrit la date
        End If
        Application.EnableEvents = False
            [A1] = ""                                   ' fini, donc on efface le numéro scanné
        Application.EnableEvents = True
    End If
End Sub
RE Bonjour Sylvanu, encore désolé de vous embeter.

Effectivement je n'ai pas fait d'effort en vous transmettant une seule feuille.
Vous trouverez en pièce jointe mon fichier complet, avec la feuille "perception" dont je vous parle (aussi les feuilles "personnels", "aéronefs" "outils", je vous y ai mit des commentaires en E2, N2 et O2 (sur la fiche perception) car ce sont les cases qu'ils me restent à programmer pour finir mon projet.

La partie verte est la partie où je me place pour scanner (décalage à droite jusqu'à la colonne D puis retour à la ligne automatique). Le fichier devrait être fonctionnel pour vous également.

Je n'ai pas réussi à adapter votre fichier au mien, en effet je n'ai pas réussi à programmer pour déplacer votre case A1 qui reçoit les scans dans votre fichier à ma case E2 pour la réintégration.

Dans l'idéal ma manip consisterait à faire ce que vous avez fait, mais en "plus simple", juste que votre case A1 soit ma case E2 et que si l'outils à déjà été scanné en colonne A (ça sera toujours le cas normalement), eh bien j'aimerais que le système m'amène juste dans la case en colonne N de l'outils correspondant.

Une fois en colonne N je scannerais uniquement le code barre assigné au chef d'atelier pour "validation" et puis j'aimerais qu'apres ce scan le système fasse repartir le curseur en E2. (vous pouvez mettre juste un chiffre pour votre programme)

J'ai modifié les valeurs des autres tableaux mais mon système devrait etre fonctionnel actuellement avec un exemple en ligne 2 sur la feuille "perception".

Je sais que ce que je vous demande est énorme, et si vous ne pouvez pas j'essaierais de m'en sortir mais pour le moment je n'y arrive pas.

Je suis très reconnaissant de l'aide que vous m'avez déjà apportée, et vous me direz comment vous remercier comme il se doit.

Merci à vous si vous arrivez à solutionner ma demande...! ;)

Thomas (aka codebarre) (je peux bien vous dire mon nom vu tout ce que je vous doit !)
 

Pièces jointes

  • TEST PERCEPTION - Copie.xls
    243 KB · Affichages: 3
Dernière édition:

codebarre

XLDnaute Nouveau
Re Codebarre,
je préfère répondre sur ce fil plutôt que sur l'autre où le sujet n'a rien à voir.
J'ai rien compris à votre fichier donc j'en ai créer un compatible du premier post, à savoir valeur scannée en A1 et liste outil dans une feuille séparée.
J'utilise la macro Worksheet_Calculate qui se déclenche sur un recalcul de la feuille.
Le principe :
- Quand un article est scanné je vérifie s'il est dans la liste
- S'il y est c'est qu'il est sorti donc je met la date en Renté.
- S'il n'y est pas c'est qu'il sort, et dans ce cas je l'inscrit à la fin du tableau.

VB:
Public msValeurSave ' Sauvegarde de la valeur en A1 pour exécution macro si modification valeur
Sub Worksheet_Calculate()
    If [A1].Value <> msValeurSave Then                  ' si c'est la valeur de A1 qui a changé alors
        msValeurSave = Range("D26").Value               ' sauvegarde nouvelle valeur
        Numéro = [A1]                                   ' on mémorise le numéro scanné
        ' L'outil est il déjà sorti ?
        Application.ScreenUpdating = False
        DL = [D65500].End(xlUp).Row                     ' dernière ligne du tableau
        T = Range("D1:G" & DL)                          ' transfert tableau dans array ( plus rapide )
        Rentre = 0                                      ' rentre vadra 0 s'il l'outil sort et 1 si l'outil rentre
        For i = 1 To DL                                 ' pour chaque ligne du tableau
            If T(i, 1) = Numéro And T(i, 4) = "" Then   ' alors outil est déjà sorti, donc il rentre
                Rentre = 1                              ' pour signifier ensuite que l'outil est rentré
                Cells(i, "G") = Date                    ' on inscrit la date de rentrée de l'outil
                Exit For
            End If
        Next i
        If Rentre = 0 Then                              ' si ici Rentre=0 c'est que l'outil n'est pas sorti
            On Error Resume Next
            Outil = Application.Match(Numéro, Sheets("Feuil3").[A:A], 0)    ' l'outil est il dans la liste
            If IsError(Outil) Then
                MsgBox "Outil non référencé.": Exit Sub
            End If
            TypeOutil = Sheets("Feuil3").Cells(Outil, "B")
            Cells(DL + 1, "D") = Numéro                 ' on inscrit le N° scanné
            Cells(DL + 1, "E") = TypeOutil              ' on inscrit le type
            Cells(DL + 1, "F") = Date                 ' on inscrit la date
        End If
        Application.EnableEvents = False
            [A1] = ""                                   ' fini, donc on efface le numéro scanné
        Application.EnableEvents = True
    End If
End Sub
Après plusieurs essais je n'y arrive toujours pas...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Codebarre a dit :
Lorsque je cherche à rajouter une colonne en plus, un message "error 9" s'affiche, pour la ligne :
If T(i, 1) = Numéro And T(i, 4) = "" Then
A quoi correspond cette ligne ? Je n'arrive pas à la comprendre, quels paramètres dois-je changer pour ajouter des colonnes ?
Mon tableau de données colonne D:G est stocké dans un tableau ( array ), puis je regarde tous les éléments de 1 à la fin si on a le bon N° en colonne 1 (T(i, 1) = Numéro) et qu'il n'y a pas de dates de sortie (T(i, 4) = "").
Erreur 9 signifie que vous êtes allez au delà de l'indice max de votre tableau, ou que votre tableau est vide.
Par ex, si dans ma macro je ne m'arrête pas à la fin mais à DL+1 alors j'ai :
1652966095642.png

Regardez ce que contient votre tableau, ou essayez de faire : For i = 1 To Ubound(T) , mais ça ne devrait rien changer.
Pour ajouter des colonnes, il suffit de modifier la ligne de transfert : T = Range("D1:G" & DL)
Ici on transfert de la colonne D à la colonne G.
 

Discussions similaires