Organiser tableau vba

  • Initiateur de la discussion Initiateur de la discussion hbb
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

hbb

XLDnaute Occasionnel
Bonjour à tous,

Je suis à la recherche du code qui me permettrait, pour chaque ligne de tenir compte de la date et de la quantité (en colonne B & C).
Ensuite la quantité est placée au niveau de la date correspondante (sur les colonnes de droite)

Jusque là, pas de souci, par contre, j'aimerais n'obtenir au final qu'une seule ligne par référence avec toutes les quantités triées sous les dates prévues.
J'ai essayé de faire une boucle do until mais le fait de supprimer la ligne à chaque fois me créé des décalages dans mes boucles...

En espérant obtenir un peu d'aide de votre part.
merci;
A bientot
hbb.
 

Pièces jointes

Re : Organiser tableau vba

Bonsoir hbb,

Voici une solution qui semble fonctionner. Il y a sûrement moyen d'optimiser un peu... Note que c'est toujours plus facile de partir par la fin quand on veut effacer des lignes.

Code:
Option Explicit

Sub Classement()
Dim ws As Worksheet
Dim rg As Range, rgC As Range
Dim Ref As String, sDate As String
Dim wRow As Integer, Tot As Double, i As Integer

Application.ScreenUpdating = False

Set ws = ThisWorkbook.Sheets("of")  'feuille contenant les données
Set rg = ws.Range("A4")     'Plage de début

Ref = ""
Do Until IsEmpty(rg)
    If rg.Value <> Ref Then
        Ref = rg.Value   'nouvelle référence
        wRow = rg.Row    'ligne pour écrire
    End If
    sDate = rg.Offset(0, 1)
    
    Set rgC = ws.Range("D3")
    Do Until IsEmpty(rgC)
        If rgC = sDate Then
            Cells(wRow, rgC.Column) = rg.Offset(0, 2)   'Quantité
        End If
    Set rgC = rgC.Offset(0, 1)   ' on déplace de 1 colonne
    Loop
Set rg = rg.Offset(1, 0)
Loop

'Maintenant on efface, en partant de la fin (c'est plus facile)
Set rg = ws.Range("A60000").End(xlUp)

Do Until rg.Row = 3
    If rg.Offset(-1, 0) = rg Then
        rg.Interior.ColorIndex = 3
        Rows(rg.Row).EntireRow.Delete
    End If

Set rg = rg.Offset(-1, 0)   'on recule de 1 ligne
Loop

Application.ScreenUpdating = True

End Sub

A+
 
Re : Organiser tableau vba

Bonjour Grand Chaman Excel,

Tout d'abord merci pour ta réponse.
Le début fonctionne très bien.
par contre, pour la même référence, je me retrouve toujours avec plusieurs lignes.
En fait, je souhaiterais avoir par exemple la référence 1111 sur la ligne 4 uniquement.
Toutes les quantités seraient alors réparties vers la droite.

Si je n'ai pas été assez clair, n'hésite pas.
Merci d'avance
hbb
 
Re : Organiser tableau vba

Bonjour,

Désolé, pour cette histoire de répartition des quantités sur la même ligne, ç marche.

Un seul endroit qui bug, à la fin du code au niveau de :
Set rg = rg.Offset(-1, 0) 'on recule de 1 ligne

J'ai un message d'erreur : "objet requis" erreur 424.

Merci d'avance pour votre aide
hbb
 
Re : Organiser tableau vba

Bonjour hbb,

Oups... ! mon erreur😉 Il était tard hier soir et je t'ai envoyé le mauvais code.
Remplace la fin par ceci, ça devrait aller mieux.

Code:
'Maintenant on efface, en partant de la fin (c'est plus facile)
Set rg = ws.Range("A60000").End(xlUp)

Do Until rg.Row = 3
    Tot = 0
    For i = 3 To 250
        Tot = Tot + rg.Offset(0, i)
    Next i
    
    Set rg = rg.Offset(-1, 0)
   
    If Tot = 0 Then Rows(rg.Row + 1).EntireRow.Delete
Loop

Application.ScreenUpdating = True

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour