Compacter un tableau avec VBA
Résolu
slimscud
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Compacter un tableau avec VBA
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
6 réponses
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
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
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
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
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
https://www.cjoint.com/?DFeiPkaP35X
voila en gros ce que je veut qu'un bouton me fasse
Désolé, mais je t'ai demandé un fichier au format excel 2003 (fichier/enregistrer sous/Type/ ... xls)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
A toi de modifier les valeurs des constantes selon ta configuration
Cdlmnt
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
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
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
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
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
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 ?
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 ?
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 :
eric
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