VBA fonction Carte Contrôle

Bonjour à tous,

Je suis alternant en dernière année d'école d'ingénieur et je m'adresse à vous pour la première fois sur ce forum afin que je puisse mener à bien un projet professionnel mais surtout personnel (j'y tiens à ce projet).

Aujourd'hui, je cherche à mettre en place une carte de contrôle pour assurer le suivi de ma production et permettre de réaliser les réglages préventifs.

Mon moyen de mesure (KEYENCE IM 6225) me fournit un fichier en .CSV avec les valeurs des cotations de mes pièces.

J'ai créé à coter un fichier CarteModele qui permet (ou plutôt doit permettre) d'automatiser la création de la carte par simple commande afin que les opérateurs ne puissent accéder au fichier et le modifier ainsi que gagner en efficacité.

Donc ce fichier se remplit à l'aide de messagebox (que j'ai programmé, là ca va niveau difficulté) jusqu'à ce qu'on arrive à la partie donnée.

Je dois faire une boucle qui vérifie où se situe la première colonne vide. Une fois fait, la fonction doit copier les X première valeur du tableau de donnée en CSV et les coller dans la première colonne (X etant la taille de l'échantillon inscrit avec un messagbox)

Il faut probablement convertir le fichier CSV en TXT.

Et ca se répète en décalant et le numéro de ligne des valeur a copier, et la colonne où les valeurs sont collées.

Je vous met ci dessous le code et en PJ les fichiers. Je bloque très rapidement dans la fonction copier coller.

Sub Acquisition()

Dim resultat As String

    A = InputBox("Veuillez indiquer la désignation du produit", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If A <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(4, 1) = A
    End If

    B = InputBox("Veuillez indiquer si nécessaire les caractéristiques du produit", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If B <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(4, 3) = B
    End If

    C = InputBox("Veuillez indiquer la lettre assignée à la cote contrôlée", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If C <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(2, 6) = C
    End If

    d = InputBox("Veuillez indiquer la nominale de la cote contrôlée", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If d <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(3, 5) = d
    End If

    e = InputBox("Veuillez indiquer la tolérance max de la cote contrôlée", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If e <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(3, 6) = e
    End If

    F = InputBox("Veuillez indiquer la tolérance min de la cote contrôlée", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If F <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(4, 6) = F
    End If

    G = InputBox("Veuillez saisir la taille de l'échantillon (compris entre 2 et 5)", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If G <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(4, 7) = G
    End If

    H = InputBox("Veuillez saisir la désignation de la carte de contrôle", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If H <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(3, 9) = H
    End If

    I = InputBox("Veuillez saisir la phase du produit", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If I <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(3, 11) = I
    End If

    J = InputBox("Veuillez saisir votre nom", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If J <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(5, 2) = J
    End If

    K = InputBox("Veuillez saisir la date du contrôle", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If K <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(6, 2) = K
    End If

    L = InputBox("Veuillez saisir l'heure du contrôle", "Données du lot") 'La variable reçoit la valeur entrée dans l'InputBox
    If L <> "" Then 'Si la valeur est différente de "" on affiche le résultat
    Cells(7, 2) = L
    End If

    Dim Ligne As Long
    Dim Colonne As Long

    ActiveSheet.Range("B9:K9").End(xlToRight).Offset(0, 1).Select
    Ligne = ActiveCell.Row
    Colonne = ActiveCell.Column

    Cells(2, 24) = Ligne
    Cells(3, 24) = Colonne

    Dim wbMyWb As Workbook
    Dim Nom_Fichier As Variant

    Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.csv), *.csv")
    If Nom_Fichier <> False Then
    Set wbMyWb = Workbooks.Open(Nom_Fichier)
    wbMyWb.Activate
    End If

    Windows("TEST.csv").Activate
    Sheets("TEST").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("CarteModele.xls").Activate
    Sheets("C A").Select
    Cells.Select
    ActiveSheet.Paste

End Sub

Je remercie d'avance toute personne prête à s'investir dans mon projet.

Khalyst

169cartemodele.xlsm (82.21 Ko)
97test.csv (3.06 Ko)

Salut et Bienvenue sur le forum.

J'ai pris connaissance de ton fichier et j'ai plusieurs questions :

  • Ton fichier carte de contrôle contient plusieurs onglet (CA, CB...). Faut-il remplir les autres onglets ou uniquement l'onglet CA ?
  • Ton fichier CSV contient 25 mesures dans sa 1ere partie puis des valeurs de synthèse. Quelles valeurs veux tu récupérer dans ton fichier carte de contrôle ?
  • L'onglet CA contient 5 échantillons pour 10 mesures. Cela signifie que chaque import de CSV doit compléter une mesure de 5 échantillons ? Dans ce cas, comment choisit-on les 5 échantillons dans les 25 du fichier CSV ?

Cela fait bcp de questions

En tout cas, sujet très intéressant.

Dernière chose, je pense qu'un userform serait plus sympa pour l'utilisateur que des inputbox à répétition. On modifiera cela si ca t'interesse.

Jers

Bonsoir Jers,

Vraiment, j'hésite beaucoup !!! 2 fois plus froid ? 2 × 0° = 0 ° ou -2° ?

dhany

Salut Jers,

Aucun problème les questions révèlent l'intérêt que tu portes à mon projet.

Alors en effet il y a plusieurs onglets :

- L'onglet C A représente la carte de contrôle de la cote A, C B la cote B, etc...

- A terme, la macro remplira automatiquement l'intégralité des cotes contrôlées en "piochant" les valeurs "cote A" du fichier CSV pour l'onglet C A, "cote B" du fichier CSV pour l'onglet C B, etc....

Sur le fichier CSV, il y a X mesures pour la Cote A, X pour la cote B, etc... Ce chiffre peux changer en fonction du nombre de pièces contrôler. Ma macro doit pouvoir, en fonction de la taille Y de l'échantillon (c'est à dire le nombre de pièce contrôler en même temps au cours de la production (par exemple les 5 première puis les 5 à la moitiés et enfin les 5 dernières pour simplifier)) et de la colonne à remplir (X1, X2, X3) choisir les Y valeurs à copier situé à la ligne Z du CSV, sachant que Z va bouger en fonction de Y et de X1 X2 X3. (je sais pas si c'est clair)

Pour résumé dans les faits le fichier CSV c'est un contrôle d'une pièce pour chaque ligne, chaque échantillon comporte un nombre entre 2 et 5 pièces et on contrôle plusieurs échantillon au cours de la production d'un lot unique. Je veux que mon fichier soit intelligent pour récupérer les valeurs en fonction de cette taille d'échantillon et de l'avancement de la production. Si ce n'est pas encore assez claire n'hésite pas à me demander des détails.

J'espère que tout cela te permettra de mieux comprendre mes attentes sur ce fichier intelligent qui permet de sécuriser la prod sans risque d'erreur de la part de l'opérateur.

Ah et je suis tout a fait enclin à apprendre le codage VBA, à vrai dire c'est aussi pour cela que je me lance dans ce projet, sachant qu'une carte de contrôle papier aurait tout autant fonctionner au yeux de ma direction x).

En tout cas merci d'avance pour l'aide que tu peux m'apporter !

Khalyst

Modification : AH et les onglet C B , C C, C D, etc n'ont pas encore la bonne forme mais a terme auront la même que pour C A (c'est juste que je fais mes essais sur C A)

Salut Dhany,

Au niveau de la question, la température n'est pas une mesure objective, comme une longueur, mais subjective.

En tant qu'être vivant, nous ne ressentons pas le 0° le 4° le 8° etc...

Nous ressentons l'écart de température, c'est ca qu'on apelle le froid.

Habitué a 18° en Température ambiante, si nous ressentons du 0°, nous pouvons alors dire que deux fois plus froid équivaut à -18°C.

(car n'oublions pas que l'échelle des Celsus n'est pas la seule (Kelvin....))

Bonjour Khalyst,

Effectivement, il n'y a pas que les degrés Celsius... en plus des degrés kelvin, j'ai vu aussi, sur internet : ° centigrade, ° Fahrenheit, ° Rankine, ° Delisle, ° Newton, ° Réaumur, ° Rømer ... mais je n'ai pas vu de ° Khalyst (ça reste à inventer).

Merci pour toutes tes infos très intéressantes ! ainsi donc, c'est à cause de la subjectivité et de l'écart de température que j'ai hélas très fortement ressenti la grosse vague de froid qu'on a eu cet hiver :

dhany

Haha tout a fait, je m'y apprêterai dès que j'aurais résolu mon problème de carte de contrôle

Et oui, c'est aussi pour ça que quand tu sors de l'avion climatisé à Marrakech par exemple tu as l'impression de suffoquer et d'être oppressé, ça ne marche pas que pour le froid héhé.

Khalyst

Bonsoir Khalyst et Dhany

Je vois que ma petite question a été sujet à interrogation.

En tout cas, moi aussi j'ai trouvé que l'écart de T° de cet hiver était rude

Bon pour en revenir à notre sujet de carte de contrôle, j'ai compris le principe.

Il me reste une seule interrogation.

Comment peut-on identifier que l'on passe d'un échantillon à un autre (Xi 1, Xi2, etc ...) ??

Ton fichier CSV contenant 25 cotations, quel critère permet de savoir quand on change d'échantillon ?

Jers

En fait en parcourant le fichier, j'ai trouvé la réponse à ma question.

Salut Jers,

Tout a fait, j'imagine que tu as vu la cellule "liste" permettant de choisir la taille de l'échantillon (allant de 2 à 5).

Je te remercie de ton aide !

Dans l'attente de ta réponse,

Khalyst

Salut Khalyst

Voici une proposition.

Pour lancer le code, j'ai crée un nouveau bouton sur la feuille A.

Chaque exécution du code, tu devra saisir toutes les infos et sélectionner le CSV.

Si l'heure et la date existe, il sélectionne une plage de cellule allant de la 1ere valeur correspondante au nombre n indiqué dans l'userform et les collent dans la feuille A.

Pour l'instant, cela ne marche que pour la cote A. Je suppose que pour les autres, il faut aller récupérer les colonnes suivantes dans le CSV mais pour cela, j'ai besoin de savoir si elles sont tjs dans l'ordre dans le CSV et le nombre de colonnes max.

Attention, dans l'userform, il est impératif d'indiquer la lettre A dans "lettre assignée" sinon il va selectionner une autre feuille.

Dans l'attente de tes commentaires et en espérant avoir bien compris ta demande.

Jers

67cartemodele.xlsm (102.53 Ko)

Salut Jers

Génial je ne pourrais pas regarder ça demain je serai en déplacement mais dès vendredi j analyse tout ça et aiguille pour la suite

En tout cas merci énormément pour tout il le restera à décrypter tout le code pour comprendre.

Au plaisir de tes prochains messages

Khalyst

Salut Jers,

Comment vas-tu ?

J'ai pu testé ton fichier ce matin cependant je n'arrive pas à lui faire sélectionner les valeurs pour les copier, le message FALSE" de ton boléen apparait systématiquement.

J'indique bien "A" (j'ai test Cote A ; cote A ; a ; A) pour le nom de la cote. J'indique le 08/12/2017 à 11:45 (j'ai aussi fait l'essai pour 11:46 ; 11:47 ; 11:48 ; 11:49 ; 11:50).

Je me demande si il n'y a pas un problème à cause du CSV mais je ne sais pas dire.

Ensuite, comment puis-je modifier les intitulés du userform ?

Pour les cotes suivantes, on fait en sorte de toujours mettre les cotes à la suite, cependant, la première cote n'est pas forcément la A :/

Il peux y avoir jusqu'à 15 cotes (pour le moment en tout cas, dans l'avenir je ne saurais dire si on va renforcer les contrôles).

Enfin, est-il possible de distinguer le userform général où les infos resterons inchangé tout le long de l'acuisition des mesures et le userforme des données de la mesure de l'échantillonage où la le controleur et les dates de contrôle peuvent bouger ?

En tout cas je te remercie de ton aide,

Au plaisir de te relire,

Khalyst

salut Khalyst

ça va bien merci.

pour répondre dans l'ordre

Question 1

as-tu utilisé le même fichier ce que celui de ton 1er message ?

Question 2

dans l'éditeur vba tu vas sur l'userform, tu cliques sur un intitulé tu affiches les propriétés du contrôle (F4) et tu modifies le champ caption

Question 3

ça c'est un problème car il va être difficile de savoir quelle colonne choisir. Les titres des colonnes sont ils tjs explicites (Cote A / Cote B etc...) ?

Question 4

Oui ce n'est pas un problème. on pourra faire ça 1x que le code actuel fonctionnera chez toi

Jers

Jers,

J'utilise exactement le même fichier CSV (pas de modification de disposition ni de donnée).

Les titres des colonnes comporteront toujours la mention Cote A / Cote B / ... mais ils peuvent être accompagnés par des renseignement complémentaires ( Cote A [centre-centre] par exemple) créé par le moyen de mesure.

Merci,

Khalyst

Coucou à nouveau,

Ok, j'ai trouvé le problème du copier coller.

Dans le fichier CSV, l'heure de la mesure et sous le format HH:MM:SS tandis que sur le fichier XSLM, l'heure est au format HH:MM, du coup en indiquant 11h46 le fichier ne trouve rien car il n'y a aucune mesure réalisé à 11:56:00.

Évidemment, il est impossible de demander au contrôleur de noté avec précision l'heure à laquelle le contrôle à été réalisé.

Est-il possible de sélectionner non pas une horaire mais une plage horaire ? (exemple : le userform nous demande de remplir l'heure du contrôle, si je note 11h45, ca prend en compte les mesures de 11h40 à 11h50) sachant que les contrôle ont lieu toutes les 2H et que ce fichier CSV etait juste la pour tester, ca devrait fonctionner sans problème de mesures situées sur deux plages en même temps ?

Milles Merci d'avance,

Khalyst

sauf erreur de ma part, les secondes sont tjs indiquées dans le csv mais elles sont tjs égale à 00.

donc en entrant 11:46 dans le formulaire ça doit marcher.

il est tout à fait possible d'indiquer une plage horaire. il faut juste le définir.

par contre au final, est ce que ça fonctionne chez toi ?

Au final, ca fonctionne si je supprime les secondes de mon fichier CSV, si je les laisse, la maccro ne me renvoie rien....

Khalyst

Et une plage de +/- 5min autour de l'heure nominale me parait parfait =)

En tout cas tu m'as vraiment énormément aider heureusement qu'il existe des personnes comme toi =)

J'espère pouvoir rendre la pareil lorsque je maitriserais ce langage (pas pour tout de suite malheureusement)...

Khalyst =)

Bonjour Khalyst,

C'est parfait !!! Il te reste plus qu'à passer le sujet en résolu, puis à inventer le ° Khalyst !

et bonne chance pour ton apprentissage du VBA !

dhany

Rechercher des sujets similaires à "vba fonction carte controle"