colmater

A

Art

Guest
Bonjour à tous les participants à ce Forum et bon week end
J'ai trouver cette macro sur le forum qui est très interessante et qui permet de colmater les lignes vides d'une colonne en remontant les données qui se trouvent en dessous sans laisser de trous.

Sub colmater()
Dim collect As New Collection
Dim cptr, nbre As Long
Application.ScreenUpdating = False
'nbre = Application.CountA(Range("A:A")) + 1
nbre = Range("A65536").End(xlUp).Row
cptr = 1
While cptr <= nbre
If IsEmpty(Cells(cptr, 1)) = False Then
collect.Add (Cells(cptr, 1).Value)
End If
cptr = cptr + 1
Wend
Range("A:A").ClearContents
nbre = collect.Count
cptr = 1
While cptr <= nbre
Cells(cptr, 1) = collect.Item(cptr)
cptr = cptr + 1
Wend
Set collect = Nothing
End Sub

Ma question est de savoir si il est possible qu'elle fasse la meme chose mais vers la droite et dans une selection que j'aurais choisi auparavant.
Je fais des essais depuis quelques heures mais je bloque.
Quelqu'un aurait il une idée ou un début d'indice?
Merci à tous
@+
Art
 
M

Michel_M

Guest
Salut Art, salut le Forum

Art,

Ci dessous la macro colmater_H, petite soeur de colmater que j'avais envoyé il y a quelque temps(fil 740 je crois)
C'est le coup de pot, j'avais oublié de l'archiver

Sub colmater_H()
'Michel_M
' la plage doit être sélectionnée avant de lancer la macro
Dim collect As New Collection
Dim lig, colG, colD, nbre, cptr As Long

' caractéristiques de la plage sélectionnée
With Selection
lig = .Row
colG = .Column
nbre = .Count
End With
colD = colG + nbre - 1

' collecte des cellules non vides
cptr = colG
While cptr <= colD
If IsEmpty(Cells(lig, cptr)) = False Then
collect.Add (Cells(lig, cptr).Value)
End If
cptr = cptr + 1
Wend

Range(Cells(lig, colG), Cells(lig, colD)).ClearContents

' restitution comatée
nbre = collect.Count
cptr = 1
While cptr <= nbre
Cells(lig, cptr + colG - 1) = collect.Item(cptr)
cptr = cptr + 1
Wend
Set collect = Nothing
End Sub
 
A

Art

Guest
Bonsoir Michel_M, ou plutot bonne nuit.

Je n'arrive hélas pas à faire fonctionner correctement ta macro, soit elle me provoque une erreur d'execution 1004 "Erreur définie par l'application ou par l'objet", soit elle ne déplace rien.
Par contre je l'ai essayé sur une sélection de deux lignes et cinq colonnes et elle ne colmate que la première ligne en "poussant" les données vers la gauche, (pour mon cas j'aurais préferé vers la droite).
En tout les cas, je te remercie beaucoup et je continue de chercher de mon coté.
@+
Art
 
M

Michel_M

Guest
Re


J'ai modifié:
- pour pousser à droite au lieu d' à gauche
- pour prendre en compte que le nombre de colonnes quelque soit le nombre de lignes (selection.columns.count plutôt que selection.count qui compte le nombre de cellules dans la selection).
- Pour nettoyer la ligne, j'ai utilisé selection plutôt que Range(cells(pattin-couffin…)) . c'est peut-être là ton 1004


Par contre je n'ai pas eu d'erreur 1004: je te joins ma maquette, si cela persiste, il serait intéressant de me dire où ça bloque.

A+
Michel
 

Pièces jointes

  • colmatH2.zip
    7.2 KB · Affichages: 10
A

Art

Guest
Bonjour Michel_M, bonjour le Forum
Michel_M, encore merci de ton coup de main, c'est super sympa de ta part (comme tous ceux de ce forum d'ailleurs).
Voici les problèmes que je rencontre maintenant.
Si je ne selectionne qu'une ligne tout se passe à merveille, par contre si j'en selectionne plusieurs et que je lance la macro seule la première ligne est colmatée et toutes les autres lignes sont effacées (problème très embetant pour une base de données ;-)).
Je continue donc à faire des essais.
@+
Art
 
A

Art

Guest
Bonjour Michel_M, bonjour le forum

Super, les données ne disparaissent plus mais il n'y a toujours que la première ligne de la selection qui est colmatée
De mon coté je ne vois pas d'ou cela peut venir.
@+
Art
 
M

michel_M

Guest
Salut Art et le forum


C’est bien ce que je craignais hier quand tu as parlé de base de données sous la ligne colmatée !…

La macro " colmater " que tu as indiqué en référence dans ton post travaille sur une colonne et non sur toutes les colonnes.

J’ai donc écrit "colmateH" dans le même esprit et je travaille sur une ligne.

Le problème était donc différent CAR IL S'AGIT DE SUPPRIMMER DES COLONNES ENTIERES ET NON DE REECRIRE UNE LIGNE.

Aujourd'hui, je n'aurai guère le temps, donc repose la question sur le forum, désolé

A+
Michel (au boulot)
 
A

Art

Guest
Bonsoir à tous, bonsoir Michel_M
Pas de problème Michel_M, je te remercie pour le temps que tu m'as consacré et pour tes macros.
Je ne sais pas si en adaptant un compteur qui boucle sur toutes les lignes sera efficace, je vais essayer dans ce sens.
Encore merci et à bientot, je te tient au courant.
@+
Art
 

Discussions similaires

Réponses
6
Affichages
281