XL 2013 Importation d'un classeur fermé et classement

an@s

XLDnaute Occasionnel
Bonsoir à tous,
après une petite absence je reviens vers vous pour solliciter votre aide concernant ma problématique que je vous expliquerai ci-après :
j'ai deux classeurs inventaires & Gestion de stock
je cherche un créer un code et le lier au bouton de l'onglet BD ARTICLES qui fait les rôles suivants :
  • importer les données des colonnes B, C, D, E à partir de la ligne 24 de l'onglet INV du fichier Inventaires et les mettre dans les colonnes B, C, D, E à partir de la ligne 7 de l'onglet BD ARTICLES du fichier Gestion de stock
  • importer les données des colonnes B, F, H à partir de la ligne 24 de l'onglet INV du fichier Inventaires et les mettre dans les colonnes B, D, E à partir de la ligne 7 de l'onglet ETAT DES STOCKS du fichier Gestion de stock
  • dans la colonne A de l'onglet BD ARTICLES du fichier Gestion de stock j'aimerai avoir les deux premières lettre de la colonne B + les deux premières lettres de la colonne C et un tiret et le numéro de claseement qui sera comme ça en 0001. si on prend l'exemple de la cellule A7 on aura COCL-0001 c'est à dire deux lettres de B7 + deux lettres de C7 plus un tiret et le numéro de classement, une fois on a une nouvelle famille dans la colonne B le classement commence dès le début.
  • on copie les données de la colonne A de l'onglet BD ARTICLES dans la colonne A de l'onglet ETAT de stock à partir de la ligne 7

NB: pour la colonne H du fichier Inventaire il faut importer la valeur et non pas la formule

je vous remercie par avance

Amicalement
An@s
 

Pièces jointes

  • INVENTAIRES.xlsx
    111.5 KB · Affichages: 45
  • Gestion de stocks.xlsx
    267 KB · Affichages: 45
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
Oui pour le : UCase()
il aurait fallut que je mettre .
VB:
Str_Search = IIf(Tablo(L, 3) <> "", UCase(Left(Tablo(L, 2), 2) & Left(Tablo(L, 3), 2)), "")
Et
VB:
Str_Compare = UCase(Left(Tablo(LL, 2), 2) & Left(Tablo(LL, 3), 2))
ainsi la comparaison est correcte . Lol
VB:
 Str_Compare Like Str_Search
mais ta solution est très bien et plus Simple !
Bonne continuation
Jean marie
 

ChTi160

XLDnaute Barbatruc
Re ,
Lone-wolf
voila comment j'ai modifié les procédures pour répondre sur le principe a la demande Lol
a toi d'adapter pour répondre a la demande
VB:
Option Explicit
Option Base 1
Public Tablo
Public Tab_Ref() As Variant
Public Str_Search As String
Public Str_Compare As String
Public DerLgn As Long
Public DerCol As Byte
Public LL As Long
Public L As Long
Public I As Long
Public x As Long
Public tbl As Range, ShB As Worksheet
Public derlig As Long
Public Coll_Str As Collection
Public wkSource As Workbook, wkDest As Workbook, ShA As Worksheet
Public shC As Worksheet, Fichier As String

Sub Importer()
    Application.ScreenUpdating = False
    Fichier = ThisWorkbook.Path & "\INVENTAIRES.xlsx"
    Set wkSource = Workbooks.Open(Fichier)
    Set wkDest = ThisWorkbook   
    Set ShA = wkSource.Sheets("INV")   
    Set ShB = wkDest.Sheets("BD ARTICLES")
    Set shC = wkDest.Sheets(3)
With ShB

     With .Range("A7").Resize(10000, 5) 'avec la plage ainsi definie
          .ClearContents 'on efface les donnees
          .Borders.LineStyle = xlNone 'on efface les bordures
     End With
End With
    derlig = shC.Range("f" & Rows.Count).End(xlUp).Row
    With ShA
        derlig = .Range("b" & Rows.Count).End(xlUp).Row
      With .Range("A24:E" & derlig)
           .Copy ShB.Range("A7")
        Tablo = .Value
      End With
       
        .Range("b24:b" & derlig).Copy shC.Range("b7")
        .Range("f24:f" & derlig).Copy shC.Range("d7")
        .Range("h24:h" & derlig).Copy shC.Range("e7")
    End With
    shC.Range("e7:e" & derlig).Value = shC.Range("e7:e" & derlig).Value
    wkSource.Close False

    Call Codes '------------------------

    Application.DisplayAlerts = False
    ThisWorkbook.Save
End Sub

VB:
Public Sub Codes()
Erase Tab_Ref
Set Coll_Str = New Collection
I = 1
Set ShB = Sheets("BD ARTICLES")
ReDim Tab_Ref(UBound(Tablo, 1), 1)
On Error Resume Next 'gestion des erreurs eventuelles
For L = I To UBound(Tablo, 1) 'pour chaque ligne du tableau des donnees
 Str_Search = IIf(Tablo(L, 3) <> "", UCase(Left(Tablo(L, 2), 2) & Left(Tablo(L, 3), 2)), "") 'on récupére si la Colonne 3 n'est pas vide les deux premiers caracteres des Colonne "B"(2) et "C"(3)
    Coll_Str.Add Str_Search, CStr(Str_Search) 'on entre la variable ainsi définie dans la Collection des références
 If Err.Number = 0 Then 'Si réference Non encore référencée
        x = 1 'on incremente la variable
 For LL = I To UBound(Tablo, 1)  'puis pour chaque ligne du tableau
   Str_Compare = UCase(Left(Tablo(LL, 2), 2) & Left(Tablo(LL, 3), 2)) 'on va récupérer les deux premiers caracteres des Colonne "B"(2) et "C"(3)
   If Str_Compare Like Str_Search Then 'on compare les deux variables si Ok
      Tab_Ref(LL, 1) = Str_Compare & Format(x, "-0000") 'Récupére dans le tableau des références la Variable formatee
        x = x + 1: I = I + 1: L = I  'on incremente les Variables
   End If
 Next LL
 End If
Err.Clear 'on efface l'erreur eventuelle
Next L
     With Sheets("BD ARTICLES").Range("A7") 'a partir de la cellule "A7"
                               .Resize(UBound(Tab_Ref, 1), 1) = Tab_Ref 'on redimensionne la plage Cible des références
                              With .Resize(UBound(Tab_Ref, 1), 5).Borders 'puis on redimensionne la plage x Lignes 5 colonnes
                                   .LineStyle = xlContinuous 'on formate les bordures
                                   .Weight = xlThin 'Idem
                              End With
     End With
Set Tablo = Nothing: Set Coll_Str = Nothing
End Sub
En espérant avoir pu t'aider
bonne fin de journée
jean marie
 

an@s

XLDnaute Occasionnel
Bonsoir Lone-Wolf, Chti160
je comprends rien de ce que vous dites mais j'attends avec impatience la version finale pour tester
merci beaucoup d'avoir consacré du temps pour répondre à ma problématique
 

Lone-wolf

XLDnaute Barbatruc
Re jean marie,

Il y a un souci avec le dernier code. C'est juste la dernière ligne remplie qu'il faut mettre la bordure, mais pas de problème, on va laisser tomber ça, elle la mettra manuellement.

@an@s: ton fichier final en retour. Et il faut revoir tes formules dans la gestion de stock elles sont erronées, et pas besoin de mettre le + avant C7+D7 par exemple, il ne sert à rien (je les ai enlevé).

=H7*'BD ARTICLES'!F7 , qu'est-ce que ça à voir la somme des sorties avec le délai??? :rolleyes:
 

Pièces jointes

  • Gestion de stocks - Final.xlsm
    240.3 KB · Affichages: 17
Dernière édition:

an@s

XLDnaute Occasionnel
Bonsoir Lone-Wolf,
je viens de faire un test et j'ai constaté que les problèmes n'ont pas été résolu
la colonne H d'inventaires qui doit être copiée dans la colonne E de l'onglet ETAT DES STOCKS doit être en valeur et non pas formule
les codes de la colonne A de l'onglet BD ARTICLES doivent être copiés aussi dans l'onglet ETAT DES STOCKS..j'avais pas ces soucis dans la version précédente
en plus de ça il y'a le problème de bordure...

mais ce qui est bizzare quand je clique une deuxième fois sur le bouton mise à jour les 2 premiers disparaissent et reste celui de la bordure...
y'a t'il possibilité de l'adapter pour que ca marche dès le premier clic ?

Cordialement
 

Lone-wolf

XLDnaute Barbatruc
Bonjour an@s :), le Forum :)

Il est temps de se reveiller ;).

Dans le classeur final et chez moi, la colonne A est copiée dans l'état des stocks. La colonne E de l'onglet ETAT DES STOCKS contient bien une valeur et non la formule. Pour la bordure en fin de tableau, tu peux la faire manuellement. Sélectionner la dernière ligne et cliquer sur Bordures ce n'est pas la mère à boire.

resultat.gif


Dans la feuille "JOURNAL STOCKS", j'ai supprimé la formule en colonne B et j'ai mis un code à la place. Pour les listes déroulantes, j'ai nommé les plages(Voir dans Formules > Gestionnaire des noms) Codes - Entrees et References. Fait de même pour les autres colonnes, ça sera plus facile. Dans le classeur "Inventaire", il y a noté un Step en minuscule, met-le en majuscule, sinon les références ne seront pas toutes inscrites dans le classeur GS. Clique sur l'image pour l'agrandir.

formule.gif
 

Pièces jointes

  • Gestion de stocks - Final V3.xlsm
    221.3 KB · Affichages: 27
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour an@s
Bonjour Lone-wolf , le Forum
Pour ce qui est de la mise en forme des Lignes , c'était juste un exemple reste a l'adapter , pour mettre juste une Ligne au Bas de la Base de données.
j'avais aussi pensé à effacer les données avant un nouveau transfert , mais apparemment ça n'a pas d'utilité ! Lol
je quitte donc ce fil !Lol
Bonne journée
Jean marie
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 337
Messages
2 087 391
Membres
103 536
dernier inscrit
komivi