code VBA

Ranohira

XLDnaute Nouveau
Bonjour,
Voici un fichier excel
J'ai besoin d'une code vba pour la feuille macro1 pour obtenir dans une autre feuille une résultat comme j'avais fait dans la feuille "résultat".
Merci pour votre aide
 

Pièces jointes

  • Ranohira.xlsx
    114.2 KB · Affichages: 38
  • Ranohira.xlsx
    114.2 KB · Affichages: 65
  • Ranohira.xlsx
    114.2 KB · Affichages: 55

Paf

XLDnaute Barbatruc
Re : code VBA

Bonjour à tous

Une macro à tester. la feuille traitée est la feuille macro 1 et la copie en feuille Feuil2 ( à adapter)
Code:
Sub MAMACRO1()
 Dim TablIni, DerLig As Long, i As Long, x As Long
 Dim TabFin()

 With Worksheets("macro 1") ' à adapter
 DerLig = .Range("A" & Rows.Count).End(xlUp).Row
 TablIni = .Range("A1:N" & DerLig)
 End With

 For i = LBound(TablIni) To UBound(TablIni)
    If TablIni(i, 8) <> "" Then
        x = x + 1
        ReDim Preserve TabFin(1 To 8, x)
        TabFin(1, x) = TablIni(i, 8)
        TabFin(2, x) = TablIni(i, 13)
        TabFin(3, x) = TablIni(i + 6, 7)
        If TablIni(i + 6, 11) <> "" Then
            If TablIni(i + 4, 11) Like "*8*" Then TabFin(4, x) = TablIni(i + 6, 11)
            If TablIni(i + 4, 11) Like "*22*" Then TabFin(6, x) = TablIni(i + 6, 11)
            If TablIni(i + 4, 11) Like "*45*" Then TabFin(8, x) = TablIni(i + 6, 11)
        End If
        If TablIni(i + 6, 14) <> "" Then
            If TablIni(i + 4, 14) Like "*16*" Then TabFin(5, x) = TablIni(i + 6, 14)
            If TablIni(i + 4, 14) Like "*30*" Then TabFin(7, x) = TablIni(i + 6, 14)
        End If
        i = i + 6
    End If
 Next
 Worksheets("Feuil2").Range("B2").Resize(UBound(TabFin, 2), UBound(TabFin, 1)) = Application.Transpose(TabFin)
End Sub

Par regarder pour la macro 2 mais ce doit être dans le même esprit, à adapter donc.

A+
 

Ranohira

XLDnaute Nouveau
Re : code VBA

Merci Paf
Le prolème c'est le code du vendor c'est repète 2 fois
Est ce qu'on peut le supprimer ?
ensuite le 8 days/22 ...doit alligner comme ceci
Vendor Name Open Items Total Due In 8 days Due In 16 days Due In 22 days Due In 30 days
140 ONE TIME VENDOR - MG -10,753.89 -10,753.89
2734 RIO TINTO FRANCE SAS -550,005.82 -115,625.97
 

Ranohira

XLDnaute Nouveau
Re : code VBA

Merci paf
j'avais colorer de même couleur l'endroit où on doit copier en bas des colonnes résultat attendu comme ceci
Vendor Name Due In 8 days Due In 16 days Due In 22 days Due In 30 days Due In 45 days
1èrement: les codes vendor ne doivent pas répétes 2 fois
2èment:
- en colonne H les codes vendor
- en colonne M les codes name (sans prendre en compte le name 2 et le city )
- en colonne K: on doit imposer une condition si on trouve Due In 8 days on prend les valeurs qui s'est trouve dans le cellule où j'avais fais même couleur. Idem pour 22 et 45 days
Idem pour le 16 et 30 days en colonne N
Merci
 

Paf

XLDnaute Barbatruc
Re : code VBA

Re

en fait vous voulez regrouper toutes les info pour chaque 'vendor' ?


dans la PJ Lignes vendor 140.jpg se trouvent les 3 groupes d'informations concernant le vendor 140
dans la PJ attendu vendor 140.jpg se trouve le résultat que vous voulez tel que je le comprens désormais.

en attente de confirmation

A+
 

Pièces jointes

  • Lignes vendor 140.jpg
    Lignes vendor 140.jpg
    91.6 KB · Affichages: 20
  • attendu vendor 140.jpg
    attendu vendor 140.jpg
    81.1 KB · Affichages: 21

camarchepas

XLDnaute Barbatruc
Re : code VBA

Bonjour Paf, Gosselien et Ranohira,

Cela me fait toujours de la peine de voir des personnes en plein naufrage,

effectivement , il y a urgence , c'est une question de minute .....

Dommage le Samu est partit dans le mauvais département :

Et oui le titre : Code vba et je vous le donne en millle , que nous donne-t-on en pièce jointe ?

un fichier XLSX, débutant ok ,

mais bon , y'a un minimum d'effort personnel à faire , non?
 

gosselien

XLDnaute Barbatruc
Re : code VBA

re à tous,

je pense qu'il reçoit son fichier d'une base extérieure genre SAP (et encore, SAP sait sortir un format excel) et que ça se présente comme on le voit dans les onglets présentés.

Ceci dit, pour Ranohira, les gens ici ne sont que bénévoles !!!

P.
 

Paf

XLDnaute Barbatruc
Re : code VBA

re et bonjour camarchepas, gosselien

un code modifié pour arriver au résultat souhaité, à un soucis près: tous les nombres supérieurs à -1000,00 sont stockés sous forme de texte. (?)

je regarde

à copier dans un module standard

Code:
Sub MAMACRO1()
 Dim TablIni, DerLig As Long, i As Long, x As Long
 Dim TabFin(), TabTemp()

 With Worksheets("macro 1") ' à adapter
 DerLig = .Range("A" & Rows.Count).End(xlUp).Row
 TablIni = .Range("A1:N" & DerLig)
 End With


 
 For i = LBound(TablIni) To UBound(TablIni)
    If TablIni(i, 8) <> "" Then
        x = x + 1

        ReDim Preserve TabFin(1 To 8, 1 To x)
        TabFin(1, x) = TablIni(i, 8)
        TabFin(2, x) = TablIni(i, 13)
        TabFin(3, x) = TablIni(i + 6, 7)
        If TablIni(i + 6, 11) <> "" Then
            If TablIni(i + 4, 11) Like "*8*" Then TabFin(4, x) = TablIni(i + 6, 11)
            If TablIni(i + 4, 11) Like "*22*" Then TabFin(6, x) = TablIni(i + 6, 11)
            If TablIni(i + 4, 11) Like "*45*" Then TabFin(8, x) = TablIni(i + 6, 11)
        End If
        If TablIni(i + 6, 14) <> "" Then
            If TablIni(i + 4, 14) Like "*16*" Then TabFin(5, x) = TablIni(i + 6, 14)
            If TablIni(i + 4, 14) Like "*30*" Then TabFin(7, x) = TablIni(i + 6, 14)
        End If
        i = i + 6
    End If
 Next
 TabFin = Application.Transpose(TabFin)

 Call Tri(TabFin(), 1, LBound(TabFin, 1), UBound(TabFin, 1))
 x = 0
 For i = LBound(TabFin) To UBound(TabFin) Step 3
    x = x + 1
    TabFin(x, 1) = TabFin(i, 1)
    TabFin(x, 2) = TabFin(i, 2)
    TabFin(x, 3) = TabFin(i, 3)
    TabFin(x, 4) = TabFin(i, 4) & TabFin(i + 1, 4) & TabFin(i + 2, 4)
    TabFin(x, 5) = TabFin(i, 5) & TabFin(i + 1, 5) & TabFin(i + 2, 5)
    TabFin(x, 6) = TabFin(i, 6) & TabFin(i + 1, 6) & TabFin(i + 2, 6)
    TabFin(x, 7) = TabFin(i, 7) & TabFin(i + 1, 7) & TabFin(i + 2, 7)
    TabFin(x, 8) = TabFin(i, 8) & TabFin(i + 1, 8) & TabFin(i + 2, 8)
 Next
 Worksheets("Feuil2").Range("B2").Resize(x, UBound(TabFin, 2)) = TabFin

End Sub

Code:
Sub Tri(a(), ColTri, gauc, droi) ' Quick sort "emprunté" à J. Boisgontier
 Dim ref, g, d, k, temp
  ref = a((gauc + droi) \ 2, ColTri)
  g = gauc: d = droi
  Do
    Do While a(g, ColTri) < ref: g = g + 1: Loop
    Do While ref < a(d, ColTri): d = d - 1: Loop
    If g <= d Then
       For k = LBound(a, 2) To UBound(a, 2)
         temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
       Next k
       g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call Tri(a, ColTri, g, droi)
  If gauc < d Then Call Tri(a, ColTri, gauc, d)
End Sub


A+
 

Discussions similaires

Réponses
2
Affichages
173
Réponses
16
Affichages
343

Statistiques des forums

Discussions
312 391
Messages
2 087 984
Membres
103 690
dernier inscrit
LeDuc