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 !!!
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 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 !!!
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 !)
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
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 :
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.