[Résolu] Aide à la finalisation de mon projet

Lone-wolf

XLDnaute Barbatruc
Bonsoir le Forum,

toutes mes excuses concernant l'intitulé du sujet.
Comme il y a pas mal de chose à modifier, je ne savait pas quel titre donner.

Je dois modifier un fichier pour l'entreprise dans laquelle je travaille. Le problème c'est que celle-ci, travaille avec MAC, et moi je suis sur Windows.

Voici un exemple de macro, faite avec l'enregistreur, de l'ancien fichier.

Code:
Sub bloc_alimentation()
'
' bloc_alimentation Macro
'
    Sheets("POIDS_INTRO").Select
    Range("E15").Select
    ActiveSheet.Unprotect
    
    Sheets("Feuil1").Select
    ActiveWindow.SmallScroll Down:=-3
    Range("B32").Select
    Selection.Copy
    Sheets("POIDS_INTRO").Select
    Range("E15").Select
    

    
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With
    Selection.Font.Bold = True
    With Selection.Font
        .Name = "Verdana"
        .Size = 22
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Sheets("Feuil1").Select
    Range("A32").Select
    Selection.Copy
    Sheets("POIDS_INTRO").Select
    Range("E23").Select
    ActiveSheet.Paste
    Selection.Font.Bold = True
    With Selection.Font
        .Name = "Verdana"
        .Size = 20
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Range("E19").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub


Fichier joint: CLASSEUR

Maintenant Dans le nouveau fichier j'ai 4 feuilles, (Groupe A-B au Groupe L-V) où se trouves les boutons (Shapes en l'ocurrence). Parmi ceux-ci se trouve les boutons " Fer - Bois et Plastique" qui ont leurs propres feuilles d'inscription et de réception des données.

Pour Fer, feuilles: " Intro fer " et " Poids fer ". Pour Plastique et Bois, feuilles: " Intro plast. et bois " et " Poids plast. et bois ". Plus la feuille " Feuille à imprimer 1 ", qui reçoit les données des 3 Matériaux.

Pour les autres boutons, feuilles: Iintro Autres-matériaux, Poids Autres matériaux et feuille " Feuille à imprimer 2 ".

Dans un premier temps, tous les boutons (36), doivent aller rechercher leur propre nom de matériaux, ainsi que le nombre de cadres leur appartenant dans la feuille Base de données et afficher le résultat dans les feuilles Intro xxxxx.

Dans leurs macros respectives, il faut modifier ceci:

Macros se trouvant dans les feuilles "Intro xxxxx"
np = Sheets("Base de données").Range("B31")

With Sheets("Poids plast. et bois")
lig = .[A65536].End(xlUp).Row + 1 'calcul de ligne
If lig = 2 Then < a modifier si besoin
Faire une recherche ici:
num = np - correspond au numéro de palette
cdr = nombre de cadres. A rajouter.
Else
num = .Cells(lig - 1, 2) + 1
End If

En ce qui concerne Plastique et bois, dans la feuille Intro Plast. et bois, chaque matériaux à son numéro de palette, qui doit s'incrémenter à chaque nouvelle entrées.

Exemple: dans la même feuille, pour Plastique n°560 561 562 563 etc. - Bois 760 761 762 763 etc.

Si possible adapter le code pour Excel toutes versions pour MAC et Windows.

Pour l'instant, je m'arrête là. Il y aura encore d'autres choses à ajouter et modifier.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Bonjour le Forum,

J'ai un problème avec le code la feuille 20 (Intro Stock Intermédiaire) macro "stock_sorties", que je n'arrive pas à résoudre.

Quand je clique, sur le bouton "Stock intermédiaire-Atelier de démontage", les données sont bien affichées, mais ce n'est pas le bon numéro de palette qui s'inscrit.

Exemple: j'inscrit le poids brut (334) la cellule affiche le n° de palette 320 au lieu de 322 (son numéro correspondant).

FICHIER

A+ :cool:
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Re


Tu parles ce cette macro ?
Dans ton cas, je déclarerai les variables dans un premier temps, non ?
VB:
Sub Stock_Sorties()
On Error Resume Next

If [E8] <> "" Or [F11] <> "" Or [E14] <> "" Then

 poids_pal = 21
 poids_cadres = 22
 titre = Sheets("Intro Stock Intermédiaire").Range("D3")     'Titre
 nbr = Sheets("Base de données").Range("C31")                'Nombre de cadres

With Sheets("Stock Int.-sorties")
 lig = .[A65536].End(xlUp).Row + 1 'calcul de ligne
 pn = [E14].Value - poids_pal - (poids_cadres * nbr)              'Poids net
 If lig = 2 Then
 num = p
 Else
 num = .Cells(lig - 1, 2) + 1
 End If
 .Cells(lig, 1) = [E8]    'Nom magasinier
 .Cells(lig, 2) = num     'Numéro de palette
 .Cells(lig, 3) = [E14]   'Poids brut
 .Cells(lig, 4) = pn      'Poids net
 .Cells(lig, 5) = Date    'Date du jour
 .Cells(lig, 6) = titre   'Titre
End With

With Feuil26

 If Application.CountIf(.[B:B], [D3]) Then Exit Sub
  p = Application.VLookup(num, Feuil21.[A:F], 6, 0)                'Poids brut
  pn = [E14].Value - poids_pal - (poids_cadres * nbr)                'Poids net
  nom = [E8]            'Nom du magasinier
  lig = .[A65536].End(xlUp).Row + 1
  .Cells(lig, 1) = [E8]
  .Cells(lig, 2) = p
  .Cells(lig, 3) = [E14]
  .Cells(lig, 4) = pn
  .Cells(lig, 5) = Date
  .Cells(lig, 6) = titre
End With
End If
[E8] = ""
[E14] = ""
[F11] = ""
 End Sub

PS: Heureux que tu aies retenu mes propositions de l'autre jour ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Re

J'ai édité mon premier message.


Cela change quoi si tu déclares tes variables (voir édition du précédent message)

PS: Vais pas pouvoir rester beaucoup plus longtemps pour le moment mais je repasse dès que possible.
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Re, Re Mon cher

Avec les variables la cellule du n° de palette reste vide. En plus, comme on rentre directement des données dans la feuille "Intro Atelier" et que le premier n° est 110, et le n° du stock intermédiaire est 320, je ne sais pas comment programmer pour que ça fasse comme ceci:

110
111
112
320
113
114
115
116
321
etc.

idem pour les autres matériaux qui on leur propre n° de palette (Voir Base de données).


A+ :cool:
 

Staple1600

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Re

De retour sur les ondes d'XLD

A mon sens, en créant un classeur de test avec juste les feuilles nécessaire pour la macro ci-dessous
Code:
Sub Stock_Sorties()
'feuilles utilisées dans cette macro
'Sheets("Intro Stock Intermédiaire").Range("D3")     
'Sheets("Base de données").Range("C31")                
'Sheets("Stock Int.-sorties")
'Feuil26
'Feuil21
End Sub
on y verrait plus clair ;)

Qu'en penses-tu ?
 

Staple1600

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Re,

Lone-Wolf
Oui, j'ai compris, c'est bordelique je l'avoue.

Je n'ai pas dit cela.

C'est juste qu'en faisant de la sorte, il me parait plus simple d'isoler le souci.

En tout cas, c'est comme cela que je ferai si j'étais dans ta situation.

Demain, j'aurai tout pareillement peu de temps à passer sur XLD.
(avant-dernier jour des Tombées de la nuit oblige ;))

Mais ce week-end, j'aurai du temps à consacrer à ton projet (en espérant pouvoir t'aider)

Bonne nuit
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Bonjour Staple,

voilà, j'ai modifié le code comme ceci:


FICHIER-JOINT


Code:
Private Sub Worksheet_Activate()
Sheets(20).EnableSelection = xlUnlockedCells
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$E$8" Or Target.Address = "$F$14" Then [F11].Select
If [E8] = "" Or [F11] = "" Or [E14] = "" Then Exit Sub
If [E8] <> "" Or [F11] <> "" Then: [F11].Select: Exit Sub
End Sub

Sub Stock_Entrees()

Sheets("Intro Stock Intermédiaire").Activate

poids_pal = 21
poids_cadres = 22

If nom <> "" Or cdr <> "" Or poids <> "" Then
With Sheets("Stock Int.-entrées")
 lig = .[A65536].End(xlUp).Row + 1 'calcul de ligne
 If lig = 2 Then
 num = 320
 Else
 num = .Cells(lig - 1, 2) + 1
 End If
 .Cells(lig, 1) = [E8]    'Nom magasinier
 .Cells(lig, 2) = num     'Numéro de palette
 .Cells(lig, 3) = [D3]    'Titre
 .Cells(lig, 4) = [F11]   'Cadres
 .Cells(lig, 5) = [E14]   'Poids brut
 .Cells(lig, 6) = [E17]   'Date du jour

With Sheets("Stock Int.-sorties")
 lig = .[A65536].End(xlUp).Row + 1                                'Calcul de ligne
 pn = [E14].Value - poids_pal - (poids_cadres * [F11])            'Poids net
 If lig = 2 Then
 num = num
 Else
 num = .Cells(lig - 1, 2) + 1
 End If
 .Cells(lig, 1) = .Cells(lig, 1)      'Nom magasinier
 .Cells(lig, 2) = .Cells(lig, 2)      'Numéro de palette
 .Cells(lig, 3) = .Cells(lig, 5)      'Poids brut
 .Cells(lig, 4) = pn                  'Poids net
 .Cells(lig, 5) = .Cells(lig, 6)      'Date du jour
 .Cells(lig, 6) = .Cells(lig, 3)      'Titre
End With
End With
End If
Sheets("Intro Stock Intermédiaire").Range("E8, E14, F11") = ""
End Sub

Sub Stock_Sorties()

With Feuil26
   pn = [E14] - 21 - (22 * [F11])                              'Poids net
  lig = .[A65536].End(xlUp).Row + 1
   If lig = 2 Then
 num = Sheets("Stock Int.-sorties").Cells(lig, 2)
 Else
 num = .Cells(lig - 1, 2) + 1
 End If
  .Cells(lig, 1) = [E8]
  .Cells(lig, 2) = num
  .Cells(lig, 3) = [E14]
  .Cells(lig, 4) = pn
  .Cells(lig, 5) = [E17]
  .Cells(lig, 6) = [D3]
End With
[E8] = ""
[E14] = ""
[F11] = ""
End Sub

Mise à part le n° de palette qui n'ai pas le même (mais ce n'est pas important), on peut voir maintenant d'où viennent les matériaux; que se soit du stock intermédiaire, des clients privés ou de l'atelier de démontage.

Dans Clients Privés, j'ai rajouter un bouton pour celà.

Maintenant, il faudrait rajouter une ligne de code dans Atelier de démontage qui éxecuterais cette action:

Pour chaque nouvelle entrée provenant du Stock Intermédiaire et Clients Privés
Supprimer la ligne dans Stock Intermédiaire et Clients Privés correspondant au poids entré dans la cellule Poids de Atelier de démontage.

Si tu veux, on remet à jour le poids du stock intermédiaire et clients privés.



A+ :cool:
 

Staple1600

XLDnaute Barbatruc
Re : Aide à la finalisation de mon projet

Bonsoir

Vu le temps catastrophique en Bretagne, et notamment sur Rennes, les spectacles de rue (cf Festival les Tombées de la Nuit - voir mon précédent message) ont du déclarer forfait.

Donc je peux passer sur XLD ce soir.

De mon côté, voilà ce que j'ai fait :
VB:
Sub Stock_Entrees()
'Déclarations des variables
Dim mat, nom, cdr, poids, poids_pal, poids_cadre, lig&
'Définition des feuilles utilisées par le code
Dim ws As Worksheet: Set ws = Sheets("Intro Stock Intermédiaire")
Dim ws2 As Worksheet: Set ws2 = Sheets("Stock Int.-entrées")
'Rafraichissement écran = OFF
Application.ScreenUpdating = False

 With ws ' un petit coup d'endives ;-)
    .Activate
    mat = .[D3]: nom = .[E8]: cdr = .[F11]: poids = .[E14]
End With
poids_pal = 21: poids_cadres = 22

If Len(nom) + Len(cdr) + Len(poids) > 0 Then
    ws2.Activate
    lig = ws2.[A65536].End(xlUp).Row + 1
     num = Switch(lig = 2, 320, lig > 2, ws.Cells(lig - 1, 2) + 1) ' utilisation de Switch
         With ws2.Cells(lig, 1) ' encore des endives
            .Value = nom: .Offset(, 1) = num
            .Offset(, 2) = mat: .Offset(, 3) = cdr
            .Offset(, 4) = poids: .Offset(, 5) = Date
        End With
End If

ws.Range("E8, E14, F11") = Empty: Set ws = Nothing: Set ws2 = Nothing
End Sub

Je ne sais pas si cela pourrait t'être utile , mais au moins cela m'aura éviter de me prendre une saucée si j'avais été déambulé dans les rues de Rennes ;)
 

Discussions similaires

Statistiques des forums

Discussions
314 627
Messages
2 111 305
Membres
111 095
dernier inscrit
Ahitos