Compacter un tableau avec VBA

Résolu/Fermé
slimscud Messages postés 51 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 13 janvier 2020 - 3 juin 2014 à 14:44
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 6 juin 2014 à 13:19
Bonjour,

Je voudrais compacter les valeurs de mon tableau le plus a gauche possible
Je n'ai pas le droit de joindre un fichier
mais en gros ce que je veux c'est que sur une ligne au lieu d'avoir par exemple mes valeures

X 1 X 2 X 3 X 4
je les veux
1 2 3 4 X X X X
ca fait 4 heures que je suis bloquer sur ce probleme a cause d'un simple bouton
merci a vous

6 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
5 juin 2014 à 16:51
Bonjour,

Une macro qui devrait mettre moins de 30 min : https://www.cjoint.com/?DFfqY3OSYLI
Comme apparemment tu as plusieurs feuilles concernées c'est une macro unique dans Thisworkbook.
Elle se lance par un double-clic en J2. Ajoute un contrôle du nom des feuilles, qu'elle ne se lance que sur les feuilles concernées.

eric
1
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 3/06/2014 à 15:54
Bonjour

Pas très clair.
Tu peux joindre un exemple bidon (avec la même structure et quelques lignes) de ce que tu veux obtenir, au format excel 2003 sur cjoint.com et mets le lien obtenu à ton prochain message

Cdlmnt
0
slimscud Messages postés 51 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 13 janvier 2020
4 juin 2014 à 08:44
Bonjour désole de ne pas avoir répondu plus tot je n'etais plus sur omn lieu de travail et je n'avais plus excel sous la main
https://www.cjoint.com/?DFeiPkaP35X
voila en gros ce que je veut qu'un bouton me fasse
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 4/06/2014 à 16:37
Désolé, mais je t'ai demandé un fichier au format excel 2003 (fichier/enregistrer sous/Type/ ... xls)
0
Bonjour
il faut faire 2 boucle

Sub test()
Nlig = Range("B" & Rows.Count).End(xlUp).Row
For L = 3 To Nlig
Col = 10
For C = 3 To 7
If Cells(L, C).Value <> "" Then
Cells(L, Col).Value = Cells(L, C).Value
Col = Col + 1
End If
Next
Next
End Sub

A+
Maurice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
4 juin 2014 à 18:08
Bonjour

A toi de modifier les valeurs des constantes selon ta configuration

Option Explicit

Const NF = "Feuil1"
Const lideb = 1
Const codeb = 1

Public Sub Kompacte()
Dim lifin As Long, li As Long, co As Long, cofin As Long, coco As Long
With Sheets(NF)
lifin = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
For li = lideb To lifin
cofin = .Cells(li, Columns.Count).End(xlToLeft).Column
coco = codeb
For co = codeb To cofin
If .Cells(li, co) <> "" Then
.Cells(li, coco) = .Cells(li, co)
.Cells(li, co) = ""
coco = coco + 1
End If
Next co
Next li
End With
End Sub

Cdlmnt
0
slimscud Messages postés 51 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 13 janvier 2020
5 juin 2014 à 14:01
Ok merci je vais essayer ca tout de suite.
Désole pour le fichier excel j'ai pas trop compris pourquoi il me la pas mis en 2003 ce lien devrait etre bon.
https://www.cjoint.com/?DFfoaBkTrPE
0
slimscud Messages postés 51 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 13 janvier 2020
5 juin 2014 à 14:56
Les Vba ne sont pas du tout comme ce a quoi je m'attendais enfait peu etre que si j'expliquais un peu mieu ce que je veux ca serait mieu
je voudrais que si la case de gauche est vide il me decale ma valeure dedan ceci pour 20 lignes et 30 colonnes
j'ai utiliser un copier coller si avec une boucle je met presque 30 minutes a tout decaler si il y a beaucoup de valeures
0
slimscud Messages postés 51 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 13 janvier 2020
6 juin 2014 à 09:33
C'est exactement ce qu'il me faut !
il est instantané
par contre j'aimerais qi'il soit sur un bouton comment j'ajoute la macro au bouton?
et pourquoi la colonne S n'est pas decalée ?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 6/06/2014 à 13:19
Bonjouir,

pourquoi la colonne S n'est pas decalée ?

Erreur de ma part, corrigé


par contre j'aimerais qi'il soit sur un bouton
Si tu préfères, dans ce cas il faudra mettre le code sur chaque bouton :
    Dim pl As Variant, lig As Long, col As Long, col2 As Long, i As Long
    Const plage As String = "B5:S34"
    
    pl = Range(plage).Value
    If Target.Address = "$J$2" Then
        Cancel = True
        For lig = 1 To UBound(pl, 1)
            For col = 1 To UBound(pl, 2)
                If pl(lig, col) = "" Then
                    col2 = col
                    Do
                        col2 = col2 + 1
                        If col2 > UBound(pl, 2) Then Exit For
                    Loop Until pl(lig, col2) <> ""
                    i = 0
                    For col2 = col2 To UBound(pl, 2)
                        pl(lig, col + i) = pl(lig, col2)
                        pl(lig, col2) = ""
                        i = i + 1
                    Next col2
                End If
            Next col
        Next lig
        Range(plage) = pl
    End If


eric
0