Copier une valeur dans un autre classeur sous condition

Bonjour,

je reviens vers vous aujourd’hui pour une nouvelle demande,

j'ai une fiche de production avec le numéro de fiche dans la cellule E3,

une référence de produit dans la cellule M2,

une date de production en cellule M3,

un numéro de commande en cellule M9,

un numéro de palette en cellule R9.

J'aimerais copié la date de production de la cellule M3 et le numéro de fiche de production de la cellule E3 dans un autre classeur comportant de plusieurs feuilles de commande nommé CF200 , CF201 etc... (recherché la feuille de commande comportant le numéro de commande "200 ou 201" ainsi que la référence du produit et collé la date de production par rapport à la référence de produit et au numéro de palette.

Ci joint les deux fichier pour test.

En vous remerciant par avance de votre aide.

10suivi-commande.xlsx (15.44 Ko)

Bonjour,

Cela manque de précision : ton M9 semble en fait F9 dans le fichier, mais CF200 n'existe pas dans le fichier cible, et la configuration des CF205 et 207 n'est pas identique, ce qui laisse des doutes sur les emplacements cibles...

Cordialement.

Bonjour MFerrand,

merci déjà pour avoir consulté mes fichiers, toujours trop de précipitation dans mes explications.

Ok, alors pour reprendre un peu tous cela effectivement :

Fichier source "Fiche de production"

Numéro de fiche dans la cellule E3,

Référence de produit dans la cellule M2,

une date de production en cellule M3,

un numéro de commande en cellule M9,

un numéro de palette en cellule R9. le M9 c'e

Fichier cible "Suivi de commande" recherché l'onglet comportant la valeur du fichier source M9, "CF205"

sélectionner de l'onglet recherché, et ouvrir la feuille pour atteindre la colonne A

Recherche la référence du produit M2 dans la colonne A et recherche la palette correspondant à la production R9,

Alors collé dans la ligne correspondante et dans la colonne G, la date de production du fichier source M3 (date au format: 13-01-2018).

Ps : les deux nouveaux fichier modifié.

j'espere qu'il ne manque rien dans mes explication , sinon je reste connecter...

Merci encore pour ton aide.

Bonsoir,

Je maintiens que la cellule M9 n'existe pas (c'est à dire ne peut rien contenir), je l'avais déjà indiqué, mais tu y reviens. Tu as quelque chose contre F9 ?

Ensuite tu nous cherches des handicaps ! M2 ne contient pas la référence produit ! Elle l'affiche au moyen d'un format de cellule. On peut tout à fait faire avec mais c'était le piège parfait...

Tout à l'heure, il y avait 200 à la place du 205, et si on avait 207, on ne retrouve pas les éléments détaillés par palette ? Ce qui veut dire que l'on ne pourrait pas traiter de la même façon... !

Pour l'instant, je suis déjà en retard pour la préparation du repas... à voir ensuite.

Cordialement.

Bonjour,

Désolé pour M9, il n'existe pas effectivement il s'agit de F9.

Pour M2, effectivement il est plus judicieux d'avoir une valeur simple au lieu d'une valeur avec un symbole.

Pour l'onglet 200 je m'étais tromper dans la première description il n'existe pas non plus.

pour l'onglet 207 j'ai mis à jour le fichier le nouveau fichier cible s'appelle "suivi de commande"

je viens de voir un nouveau problème mais je pense que c'est pas aussi grave

tu verra en colonne A une rubrique "Automatique, Jumbo, Bache, Paillage" cela veut dire que la recherche dois se faire que sur les jumbos. Parce qu'on pourrais avoir aussi la référence rechercher dans la rubrique automatic et ces rubriques ne sont pas a produire.

Dans l'attente , bonne prépa du repas et bonne app.

18suivistock.xlsx (57.57 Ko)

Avec ton dernier changement on revient à la case départ !

Je résume : on se penche sur la fiche de production, on y prélève les éléments de la recherche : n° commance en F9, produit en M2, n° palette en R9 et date en M3.

On démarre donc ainsi :

Sub Test()
    Dim WsCom$, prd$, pal%, d
    With Workbooks("Fiche de production1.xlsx").Worksheets(1)
        WsCom = "CF" & .Range("F9")
        prd = .Range("M2").Text
        pal = .Range("R9")
        d = CDate(.Range("M3"))
    End With

Avec quelques particularités donc ! Le numéro de commande qui va nous permettre de chercher la feuille, il faut le fabriquer..., le produit : on fait appel à la propriété Text pour récupérer le nom qui apparaît, on obtient donc une valeur texte, sachant qu'on a un nombre dans la cellule mais qui ne suffit pas à désigner le produit [c'est donc un aspect instable... et il est vraisemblable que pour que la recherche aboutisse on devra écraser les valeurs dans la cible pour les transformer en texte si elle ne le sont pas...], le n° palette on l'a, la date qui était du texte et non une date se laisse bien convertir en date...

A ce stade on a nos 4 éléments.

On peut cependant remarquer, qu'on ne construit pas un dispositif de recherche... on fait une recherche unique à partir d'un classeur particulier... rien ne permet de réitérer une recherche semblable par la suite avec les éléments dont on dispose...

En plus, on devrait logiquement opérer à partir du dernier classeur fourni. Pour l'instant on ne le peut: SuiviStock est endommagé, pas d'accès au projet VBA, un problème à régler ultérieurement.

On poursuit donc notre procédure :

Sub Test()
    Dim WsCom$, prd$, pal%, d
    Dim lid%, lif%
    With Workbooks("Fiche de production1.xlsx").Worksheets(1)
        WsCom = "CF" & .Range("F9")
        prd = .Range("M2").Text
        pal = .Range("R9")
        d = CDate(.Range("M3"))
    End With
    On Error GoTo Fin
    With Workbooks("SuiviStock.xlsm").Worksheets(WsCom)
        For lid = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(lid, 1) = "Jumbo" Then
                lif = .Cells(lid, 1).MergeArea.Rows.Count + lid - 1
                Exit For
            End If
        Next lid
        If lif = 0 Then
            MsgBox "Zone 'Jumbo' non trouvée !", vbCritical, "Recherche infructueuse"
            Exit Sub
        End If

    End With
    Exit Sub
Fin:
    MsgBox "Numéro de commande non trouvé !", vbCritical, "Recherche infructueuse"
End Sub

On prend naturellement les précaution d'usage dans une recherche, on sait qu'on cherche, on ne sait pas si on va trouver... il faut donc prévoir de sortir en bon quand on ne trouve pas.

Jusque là la feuille CF205 existe (à noter que si elle était nommée 'Commande en cours CF205', comme l'est la CF207, on ne l'aurait pas trouvée, évidemment).

On trouve 'Jumbo', dans une cellule fusionnée, on le sait avant donc on prend le dispositif qui convient pour définir son étendue, et on se retrouve en possession d'une ligne de début et d'une ligne de fin, délimitant la zone de recherche (au cas particulier, 8 à 31).

Et puis là on arrête les tests car la feuille n'est tout d'un coup plus reconnue ! Et rien n'y fait : je remets un nom je recherche ce nom en dur, il n'est pas trouvé !

De toute façon la phase suivante était de trouver le produit. Ce qu'on testait, c'est la méthode de recherche, car il ne figure pas et on ne pouvait donc le trouver...

Il s'agit donc d'avoir un classeur, d'une part en état de fonctionner, sans anomalie, et d'autre part où l'on puisse trouver ce qu'on cherche.

Cordialement.

Bonjour MFerrand,

très belle description, j'ai du me reprendre à deux fois pour bien assimilé la complexité de cette recherche.

Effectivement il fallait fabriquer le numéro de commande je pensait à une concaténation des deux cellule mais je vois que sa peut être plus simple.

Concernant le M2 on peut dissocier le nombre du symbole "µ" ( ex: le nombre 20 pourrais être dans la cellule L2:M2 et le "µ" dans la colonne N2 en réduisant bien sure A2:K2, si besoin mais je vois qu'on peut le contourner par une valeur texte.

Concernant l'onglet commande en cour CF207, c'est une commande qui est en cour d'arrivage et l'onglet serra renommer en CF207 lors de la réception. et ainsi de suite pour les commandes suivantes " commande en cour CF208...

Du coup j'ai pas tous compris sur l'anomalie du classeur "SuiviStock" faut il que je le recréer? Le fichier est partagé cela peut-il posé un problème?

Merci déjà pour cette avancer

Cordialement

Je n'avais connecté sur cette idée... L'invisibilité du projet VBA vient effectivement de là... J'ai désactivé le partage et tout va bien. Pour insérer une macro, il faudra ôter le partage, ensuite elle devrait pouvoir fonctionner sans désactiver le partage, ce sera à tester.

Pour le moment, repartager le classeur après insertion de la macro ne déclenche pas d'erreur, mais elle est encore incomplète.

J'ai du même coup trouvé la source de l'erreur, qui ne venait pas du nom de la feuille mais d'une ligne de code que je croyais avoir supprimé (justement parce qu'elle produisait une erreur ! je devais commencer à fatiguer hier soir, ou plutôt cette nuit...)

Suite du feuilleton, on en est là :

Sub Test()
    Dim wsCom$, prd$, pal%, d
    Dim lid%, lif%, i%, jumbo()
    With Workbooks("jeanleo_Fiche de production1.xlsx").Worksheets(1)
        wsCom = "CF" & .Range("F9")
        prd = .Range("M2").Text
        pal = .Range("R9")
        d = CDate(.Range("M3"))
    End With
    On Error GoTo Fin
    With Workbooks("jeanleo_SuiviStock.xlsm").Worksheets(wsCom)
        For lid = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(lid, 1) = "Jumbo" Then
                lif = .Cells(lid, 1).MergeArea.Rows.Count + lid - 1
                Exit For
            End If
        Next lid
        If lif = 0 Then
            MsgBox "Zone 'Jumbo' non trouvée !", vbCritical, "Recherche infructueuse"
            Exit Sub
        End If
        With .Range(.Cells(lid, 2), .Cells(lif, 2))
            ReDim jumbo(1 To .Rows.Count)
            For i = 1 To .Rows.Count
                If .Cells(i, 1) <> "" Then jumbo(i) = .Cells(i, 1).Text
            Next i
        End With

    End With
    Exit Sub
Fin:
    MsgBox "Numéro de commande non trouvé !", vbCritical, "Recherche infructueuse"
End Sub

A l'emplacement de la ligne vide, on a récupéré dans le tableau jumbo les valeurs de la colonne B (zone Jumbo) sous forme texte. On peut donc à ce stade y rechercher la valeur de la variable prd...

Mais pour poursuivre, il me faudrait un fichier où elle figure !

Cordialement.

ah oui c'est vrai, c'est pas grave comme on est en phase de test on va remplacer la référence 20µ par 28µ dans la fiche de production qui du coup est présent ds le fichier Suivi de stock.

cordialement

Mais avec 28µ on n'a plus le même numéro de palette, il faudrait donc le changer aussi !

oui effectivement, il y pas de soucis pour le changement

oui effectivement, il y pas de soucis pour le changement de numéro de palette sur la fiche de production

Voilà la version complétée :

Sub TraitementFiche()
    Dim wsCom$, prd$, pal%, d
    Dim lid%, lif%, i%
    With Workbooks("Fiche de production1.xlsx").Worksheets(1)
        wsCom = "CF" & .Range("F9")
        prd = .Range("M2").Text
        pal = .Range("R9")
        d = CDate(.Range("M3"))
    End With
    On Error GoTo Fin
    With ThisWorkbook.Worksheets(wsCom)
        For lid = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(lid, 1) = "Jumbo" Then
                lif = .Cells(lid, 1).MergeArea.Rows.Count + lid - 1
                Exit For
            End If
        Next lid
        If lif = 0 Then
            MsgBox "Zone 'Jumbo' non trouvée !", vbCritical, "Recherche infructueuse"
            Exit Sub
        End If
        With .Range(.Cells(lid, 2), .Cells(lif, 2))
            For i = 1 To .Rows.Count
                If .Cells(i, 1).Text = prd Then
                    Do While .Cells(i, 1).Text = prd Or .Cells(i, 1) = ""
                        If .Cells(i, 2) = pal Then
                            .Cells(i, 6) = d
                            MsgBox "Date apposée en regard du N° de palette.", vbInformation, _
                             "Recherche terminée": Exit Sub
                        End If
                        i = i + 1
                    Loop
                    MsgBox "N° de palette non trouvé !", vbCritical, "Recherche infructueuse"
                    Exit Sub
                End If
            Next i
            MsgBox "Produit non trouvé !", vbCritical, "Recherche infructueuse"
        End With
    End With
    Exit Sub
Fin:
    MsgBox "Numéro de commande non trouvé !", vbCritical, "Recherche infructueuse"
End Sub

Un peu modifiée, on n'a pas besoin du tableau jumbo de tout à l'heure, qui servait juste à montrer qu'on pouvait bien récupérer les données... Là on passe directement à la recherche du produit, et une fois trouvé à celle du numéro de palette. Un message indique si la date aété apposée, et les autres messages en cas de recherche infructueuse balisent le parcours pour signaler à quel endroit on a chuté...

Maintenant, comme je suppose que tu dois pouvoir faire la même chose avec de multiples fiches, je me proposais, si tu en est d'accord à apporter un aménagement pour quelle prenne en charge une liste de fiches...

Cordialement.

pour l'instant j'ai fait le test mais sa marche pas encore, j'ai numéro de commande non trouvé.

Pour ta question pour la suite concernant l’aménagement et la liste de fiche, a vrai dire je ne voulais pas trop demander mais comme tu me le propose je t’envoie le fichier global auquel je souhaiterais ajouter ce code, et tu carte blanche pour corriger améliorer tous ce qui te semble possible.

Par contre je ne suis qu'un petit bricoleur de code donc désolé pour tous ce que tu va trouver dans mon fichier global. je te laisse regarder cela et on aménagera et complétera pour finaliser ce projet.

GRAND merci à toi

https://www.cjoint.com/c/HAospSk8Ziw

oupss un fichier c'est glisser de trop, a prendre en compte que celui en téléchargement cjoint.com

Merci

Pour expliquer un peu mon projet:

a l'origine il y avait 3 classeur, Fiche de production, fiche de traçabilité-Livraison, et suivi de commande.

J'ai voulu regrouper la production et la livraison dans un seule et même classeur car cela regroupe des même informations et cela m’évite d’écrire dans des classeur fermé.

Du coup j'ai fusionner Fiche de production et Traçabilité- livraison, cela me permet de gérer mes stock en fonction des protections et des livraison fiche de traçabilité-livraison.

Comme tu connais déjà les différentes fiches, pour expliquer succinctement :

La fiche de production est en 3 partis :

1 stock avant production ligne 5 à 7,

2 Production du jour ligne 9 à 17

3 Partis administratif ligne 20 à 25

  • ---------------
  • 1 Suite à une production l'opérateur rempliera sa fiche en fonction:
du métrage manuel ou auto,

la tare de la palette,

Nbre de jumbo utilisé (kg et Rouleaux)

Nbre de rouleau produit (kg et Rouleaux)

Poids moyen d'une bobine

Kilo perdu .

Enregistrement de la date de production dans le fichier SuiviStock

-2 Partis administratif :

Sert à décompter le stock après la production et créer le numéro de l'ordre de fabrication suivant, car nous travaillons sur un fichier model .xlmt

Ensuite imprime sa fiche de production pour archive et via une commande permettre l'enregistrement au format PDF et xls dans un dossier de production sur le serveur. Également copier la valeur de la partis administratif qui correspondra au nouveau stock physique avant production de la fiche suivante. Aussi d’incrémenter le numéro de la fiche suivante et de sauvegarder et écraser le model sources avec les nouveaux stock.

Voila pour la parti production.

Pour la partis traçabilité-livraison, nous avons:

un numéro de fiche en cellule H3 à incrémentation automatique à l'enregistrement

En E7 nous retrouvons le référence du produit, en le changeant avec le menu déroulant une interactivité ce produit sur les cellules C4 et C5 pour affiché les stocks en cour.

ensuite nous remplissons la fiche en fonction de la commande du client et imprimons la fiche pour accompagner la livraison.

en cellule C14 nous retrouvons le numéro commande et de palette qui peut nous ramener automatique en cellule C15 la date de fabrication.

Ensuite il y a des bouton de visualisation avant impression et impression en fonction du type de format et papier a imprimé . A4 pour livraison palette complète, Étiquette pour livraison par pack .

Ensuite un bouton enregistrer pour sauvegarder dans le dossier du client sur le serveur et incrémentation du numéro suivant.

Je suis arriver à la pour l'instant, il restera plus qu'a déstocker dans la fiche la quantité qui a été livrer.

Voila, mon projet

j'espère que tu as compris dans l'ensemble , je sais que cela impliquera beaucoup de travail et de test. Si jamais tu est toujours partant pour relever le défis je saurais récompenser le travaille fournis.

Bien à toi

Bonjour,

Pas le temps de répondre tout de suite, je reviendrai plus tard...

La proc. que je t'ai envoyée fonctionne chez moi, y compris en classeur partagé, par contre le lancement à partir d'une autre procédure semble se dérouler positivement (message de succès), mais Excel se "gèle" immédiatement après et rien n'a été fait... Il faut que j'élucide ça...

Cordialement.

Bonjour,

ok merci pour ta réponse, je vais réessayer pas eu le temps non plus.

Merci encore je t'enverrais une nouveau fichier le le dernier bug on dirais .

Bien à toi,

Cordialement.

J e m'apprêtais justement à t'envoyer les fichiers où ça fonctionnait bien, mais ayant fait un aménagement pour appeler la procédure en relais, système dont je n'avais pas de doute sur le fait que ça fonctionne ! J'ai tout de même voulu tester avant... et Excel plante de façon inexplicable (au moins pour le moment).

J'ai donc différé, il fallait que je profite absolument du 2e jour sans pluie pour remettre mon jardin à un niveau acceptable car cela ne va pas durer...

Le plus gros est fait mais faut que je récupère un peu.

A+

Ok , il ya pas de soucis pas d'urgence pour moi en tous cas . Depuis le temps que je cherche en vain je suis ravi que tu comprenne au moins ma demande.

Je t'enverrais tous a l'heure une version un peu plus épure de ce que j'ai fait jusqu’à maintenant. si tu as télécharger le dernier fichier ne tiens pas compte je t'envoie la version dans un instant. Le temps pour moi de prendre une douche et de manger un morceau.

A tout , ++

Rechercher des sujets similaires à "copier valeur classeur condition"