Creer un manifeste de chargement

Bonjour,

J'ai créé un manifeste de chargement sur excel, pour faciliter la saisie et gagner du temps.

Il y a le manifeste en feuille 1(un tableau) et les données en feuille 2 et 3

Et j'ai besoin d'aide pour transposer les données des feuille 2 et 3 sur le tableau en feuille 1. Je souhaiterai qu'an sélectionnant une donnée dans une cellule via un menu déroulant, que toutes les données de la ligne ce transfère dans le tableau.

Je ne maitrise pas très bien le VBA et j'aurai besoin de votre aide ou d'indication pour y arriver, malgré des recherche de mon coté je n'y arrive pas.

En pièce joint j'ai mi le fichier en question.

En vous remerciant de votre aide.

31manifeste.xlsx (23.08 Ko)

Bonjour Mat, bonjour le forum,

Dans le Gestionnaire de Noms à l'aide de la formule DECALER j'ai créé une plage dynamique N°_Serie_1 qui récupère les numéros de série de la colonne A de l'onglet Données.

Dans l'onglet Manifeste, les cellules A13, A16, A19, A22, A25 et A28 sont désormais dotées d'une Liste de Validation de Données avec ces numéros de série.

Le code s'exécute automatiquement au changement d'une de ces cellules via la macro événementielle Change ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OD As Worksheet 'déclare la variable OD (Onglet Données)
Dim OC As Worksheet 'déclare la variable OC (Onglet Code)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim FplusH As Double 'déclare la variable FplusH (somme des colonnes F et H)

Set OD = Worksheets("Données") 'définit l'onglet données OD
Set OC = Worksheets("Codes") 'définit l'onglet codes OC
TV = OD.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
If Target.Column <> 1 Then Exit Sub 'condition : si le changement a lieu ailleurs que dans la colonne 1, sort de la procédure
Select Case Target.Row 'agit en fonction du numéro de ligne de la cellule éditée
    Case 13, 16, 19, 22, 25, 28 'cas 13 as 28 par pas de 3
        Set PL = Range(Cells(Target.Row - 2, "A"), Cells(Target.Row, "R")) 'définit la plage PL
        'si la cellule est effacée, efface la plage PL complète et sort de la procédure
        If Target(1, 1).Value = "" Then PL.ClearContents: Exit Sub
        For J = 2 To UBound(TV, 1) 'boucle sur toutes les lignes J du tableau des valeurs 9en partant de la seconde)
            'si la donnée ligne J colonne 1 de TV est égale à la valeur de la cellule modifiée, définit la ligne LI sort de la boucle
            If CStr(TV(J, 1)) = Target.Value Then LI = J: Exit For
        Next J 'prochaine ligne de la Boucle
        'la cellule ligne 1 colonne 1 de PL prend la valeur de la donnée ligne LI colonne 15 du tableau des valeurs TV
        PL.Cells(1, 1).Value = TV(LI, 15)
        'la cellule ligne 1 colonne 2 de PL récupère la valeur de la cellule colonne B de l'onglet code, du code récupéré
        PL.Cells(1, 2).Value = OC.Columns(1).Find(PL.Cells(1, 1).Value, , xlValues, xlWhole).Offset(0, 1).Value
        'la cellule ligne 1 colonne 4 de PL prend la valeur de la donnée ligne LI colonne 16 du tableau des valeurs TV
        'plus un espace plus la valeur de la donnée ligne LI colonne 17 du tableau des valeurs TV
        PL.Cells(1, 4).Value = TV(LI, 16) & " " & TV(LI, 17)
        'la cellule ligne 3 colonne 5 de PL prend la valeur de la donnée ligne LI colonne 2 du tableau des valeurs TV
        PL.Cells(3, 4).Value = TV(LI, 2)
        'la cellule ligne 1 colonne 9 de PL prend la valeur de la donnée ligne LI colonne 18 du tableau des valeurs TV
        PL.Cells(1, 9).Value = TV(LI, 18)
        'la cellule ligne 1 colonne 13 de PL prend la valeur de la donnée ligne LI colonne 12 du tableau des valeurs TV
        PL.Cells(1, 13).Value = TV(LI, 12)
        'la cellule ligne 1 colonne 18 de PL prend la valeur de la donnée ligne LI colonne 13 du tableau des valeurs TV
        PL.Cells(1, 18).Value = TV(LI, 13)
        FplusH = CDbl(TV(LI, 6)) + CDbl(TV(LI, 8)) 'définit la somme des cellules colonne F et H de la lighne LI
        'renvoie la formule dans la cellule ligne 1 colonne 12 de la plage PL
        PL.Cells(1, 12).FormulaR1C1 = "=""" & FplusH & """*RC[-4]"
End Select 'fin de l'action en fonction du numéro de ligne de la cellule éditée
End Sub

J'espère ne rien avoir oublié... Le fichier :

sans macro, il suffit d'utiliser la fonction

=rechercheV(Valeur cherchée;plage sur lqauelle chercher; n° de la colonne correspondant; Vrai/Faux)

(explications sur cette fonction :https://support.office.com/fr-fr/article/recherchev-recherchev-fonction-0bbc8083-26fe-4963-8ab8-93a18ad188a1 ;

= RECHERCHEV (valeur recherchée; plage contenant la valeur recherchée, le numéro de la colonne dans la plage contenant la valeur de retour, une correspondance approximative (vrai) ou une correspondance exacte (faux)).

)

Ici il faudra utiliser l'argument 'faux'

Bonjour Mat, bonjour le forum,

Dans le Gestionnaire de Noms à l'aide de la formule DECALER j'ai créé une plage dynamique N°_Serie_1 qui récupère les numéros de série de la colonne A de l'onglet Données.

Dans l'onglet Manifeste, les cellules A13, A16, A19, A22, A25 et A28 sont désormais dotées d'une Liste de Validation de Données avec ces numéros de série.

Le code s'exécute automatiquement au changement d'une de ces cellules via la macro événementielle Change ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OD As Worksheet 'déclare la variable OD (Onglet Données)
Dim OC As Worksheet 'déclare la variable OC (Onglet Code)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (Incrément)
Dim FplusH As Double 'déclare la variable FplusH (somme des colonnes F et H)

Set OD = Worksheets("Données") 'définit l'onglet données OD
Set OC = Worksheets("Codes") 'définit l'onglet codes OC
TV = OD.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
If Target.Column <> 1 Then Exit Sub 'condition : si le changement a lieu ailleurs que dans la colonne 1, sort de la procédure
Select Case Target.Row 'agit en fonction du numéro de ligne de la cellule éditée
    Case 13, 16, 19, 22, 25, 28 'cas 13 as 28 par pas de 3
        Set PL = Range(Cells(Target.Row - 2, "A"), Cells(Target.Row, "R")) 'définit la plage PL
        'si la cellule est effacée, efface la plage PL complète et sort de la procédure
        If Target(1, 1).Value = "" Then PL.ClearContents: Exit Sub
        For J = 2 To UBound(TV, 1) 'boucle sur toutes les lignes J du tableau des valeurs 9en partant de la seconde)
            'si la donnée ligne J colonne 1 de TV est égale à la valeur de la cellule modifiée, définit la ligne LI sort de la boucle
            If CStr(TV(J, 1)) = Target.Value Then LI = J: Exit For
        Next J 'prochaine ligne de la Boucle
        'la cellule ligne 1 colonne 1 de PL prend la valeur de la donnée ligne LI colonne 15 du tableau des valeurs TV
        PL.Cells(1, 1).Value = TV(LI, 15)
        'la cellule ligne 1 colonne 2 de PL récupère la valeur de la cellule colonne B de l'onglet code, du code récupéré
        PL.Cells(1, 2).Value = OC.Columns(1).Find(PL.Cells(1, 1).Value, , xlValues, xlWhole).Offset(0, 1).Value
        'la cellule ligne 1 colonne 4 de PL prend la valeur de la donnée ligne LI colonne 16 du tableau des valeurs TV
        'plus un espace plus la valeur de la donnée ligne LI colonne 17 du tableau des valeurs TV
        PL.Cells(1, 4).Value = TV(LI, 16) & " " & TV(LI, 17)
        'la cellule ligne 3 colonne 5 de PL prend la valeur de la donnée ligne LI colonne 2 du tableau des valeurs TV
        PL.Cells(3, 4).Value = TV(LI, 2)
        'la cellule ligne 1 colonne 9 de PL prend la valeur de la donnée ligne LI colonne 18 du tableau des valeurs TV
        PL.Cells(1, 9).Value = TV(LI, 18)
        'la cellule ligne 1 colonne 13 de PL prend la valeur de la donnée ligne LI colonne 12 du tableau des valeurs TV
        PL.Cells(1, 13).Value = TV(LI, 12)
        'la cellule ligne 1 colonne 18 de PL prend la valeur de la donnée ligne LI colonne 13 du tableau des valeurs TV
        PL.Cells(1, 18).Value = TV(LI, 13)
        FplusH = CDbl(TV(LI, 6)) + CDbl(TV(LI, 8)) 'définit la somme des cellules colonne F et H de la lighne LI
        'renvoie la formule dans la cellule ligne 1 colonne 12 de la plage PL
        PL.Cells(1, 12).FormulaR1C1 = "=""" & FplusH & """*RC[-4]"
End Select 'fin de l'action en fonction du numéro de ligne de la cellule éditée
End Sub

J'espère ne rien avoir oublié... Le fichier :

Déjà merci beaucoup !

je rejoint le fichier avec les petits soucis que j'ai décrit directement sur le fichier et signalés par les casses coloriées en jaune pour que ça soit plus compréhensible.

Encore merci pour votre aide.

Re,

En pièce jointe la version 02 modifiée.

Tout a l'air de fonctionner correctement, saut au niveau de la case E11, il faudrait que le résulta de cette cellule soit multiplié par la case "quantité unité" en H11.

Ce qui fait qu'en E11 il faut le chiffre de la colonne M de la feuille "Données" soit multiplié par H11 (Quantité unité) de la feuille "Manifeste".

Et j'ai fais une erreur de calcul dans la cellule "Masse brute (Kg)" le calcul exacte c'est F de la feuille "Données" multiplié par la casse L de la feuille "manifeste" + H de la feuille "Données".

En espérant être compréhensible dans mais propos, pas facile à expliquer lol

Cordialement.

sans macro, il suffit d'utiliser la fonction

=rechercheV(Valeur cherchée;plage sur lqauelle chercher; n° de la colonne correspondant; Vrai/Faux)

(explications sur cette fonction :https://support.office.com/fr-fr/article/recherchev-recherchev-fonction-0bbc8083-26fe-4963-8ab8-93a18ad188a1 ;

= RECHERCHEV (valeur recherchée; plage contenant la valeur recherchée, le numéro de la colonne dans la plage contenant la valeur de retour, une correspondance approximative (vrai) ou une correspondance exacte (faux)).

)

Ici il faudra utiliser l'argument 'faux'

Merci pour votre aide également, mais je vais suivre ThauThème qui a déjà fait un gros taf pour m'avancer.

Je vais étudier la fonction RECHERCHEV qui me sera surement utile dans l'avenir.

Re,

La version 03 !...

Re,

La version 03 !...

Ça fonctionne par contre dessolé, jetais entrain de modifier mon message précédant, je me suis rendu compte d'une erreur de calcule de ma part, mais vous avez était plus rapide que moi.

L 'erreur de calcul est dans la cellule "Masse brute (Kg)" le calcul exacte c'est F de la feuille "Données" multiplié par la casse L de la feuille "manifeste" + H de la feuille "Données".

Re,

Et j'ai fais une erreur de calcul dans la cellule "Masse brute (Kg)" le calcul exacte c'est F de la feuille "Données" multiplié par la casse L (???) de la feuille "manifeste" + H de la feuille "Données".

Bon il faudrait que tu te poses et que tu réfléchisses à ce que tu veux car je risque de perdre patience...

Ta dernière formule est erronée car elle va provoquer une référence circulaire. En effet en L11 une formule avec L11 c'est pas possible...

Re,

Et j'ai fais une erreur de calcul dans la cellule "Masse brute (Kg)" le calcul exacte c'est F de la feuille "Données" multiplié par la casse L (???) de la feuille "manifeste" + H de la feuille "Données".

Bon il faudrait que tu te poses et que tu réfléchisses à ce que tu veux car je risque de perdre patience...

Ta dernière formule est erronée car elle va provoquer une référence circulaire. En effet en L11 une formule avec L11 c'est pas possible...

Effectivement je commence à dire n'importe quoi, c'est pas L11 mais H11 de la feuille "manifeste" (Quantité unité).

Ce qui fait: F de la feuille "données" multiplié par H11 de la feuille "manifeste"+ H de la feuille "Données".

Désolé pour le cafouillage.

Re,

La version 04...

Un grand merci !

Désolé d'avoir usé de votre patience.

Je vous souhaite une bonne fin de soirée.

Bonjour,

J'ai un problème "erreur d’exécution 1004, erreur définie par l'application ou par l'objet"

Je me suis rendu compte que ça vient de la colonne H de l'onglé données, dans mon exemple il y avait que des chiffres sans virgule et lorsque je mais mes données ou il y a des chiffres à virgule, j'ai cette erreur qui apparait. Comment la corriger ?

L'erreur apparait dans se morceau de code:

'renvoie la formule dans la cellule ligne 1 colonne 12 de la plage PL
PL.Cells(1, 12).FormulaR1C1 = "=(""" & CDbl(TV(LI, 6)) & """*RC[-4])+" & CDbl(TV(LI, 8)) & ""
TEST = False 'redéfinit TEST
End Sub

PS: faut il mieux ouvrir un autre sujet ou continuer ici ?

Re,

Je tiens à remercier Ric qui m'a trouvé une solution qui fonctionne sur mon PC et qui m'a permis de te proposer des formules qui fonctionnent.

La version 05 en pièce jointe :

Merci pour la modif.

J'ai vu sur le forum que tu t’ai bien cassé la tête pour résoudre les problème avec la formule FormulaR1C1, j'ai regardé un peux sur le net pour trouver une solution mais avec mon niveau zéro en VBA, j’étais sur quand changeant juste FormulaR1C1. en FormulaLocal. cela n'allait pas fonctionner...

Merci à toi et à Ric pour votre aide.

Rechercher des sujets similaires à "creer manifeste chargement"