selectionner certaines lignes et colonnes avec VBA

F

frédéric

Guest
Bonjour,

J'ai une feuille de travail qui comporte 2000 lignes et 15 colonnes. Chaque jour, cette feuille est modifiée et je dois en extraire certaines lignes. Tout est classé selon la colonne 2 qui renferme des codes successifs du style 209..209, puis 210..210, puis 211..211.

Je cherche à faire une petite macro qui me sélectionnera toutes les lignes possédant le code 209 (en colonne 2) et qui me copiera les lignes sélectionnées dans une autre feuille... De même pour le code 210, puis 211...

Merci à ceux qui m'aideront à me donner des pistes de vba.
 
S

STéphane

Guest
une méthode parmi d'autres
mais je ne pense pas que ce soit la meilleure

Sub CacheLignesMemesValeurs()
With [A1].CurrentRegion
.Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula = "=LEFT(RC[-1],3)=""209"""
.AutoFilter 2, True
.Columns(2).ClearContents
Worksheets.Add
.CurrentRegion.Copy [A1]
End With
End Sub

bye
Stéphane
 
A

andré

Guest
Il y a aussi moyen de le faire sans macro, avec une tenue à jour instantanée et automatique.
Voir le petit exemple ci-joint (à développer).
André.
 

Pièces jointes

  • colonnes.xls
    30.5 KB · Affichages: 278
  • colonnes.xls
    30.5 KB · Affichages: 293
  • colonnes.xls
    30.5 KB · Affichages: 287
S

STéphane

Guest
bonjour

c'est l'équivalent en formule de la formule
=gauche(celluledegauche;3)="209"

je fais en fait un test, je contrôle si la chaîne constituée par les trois premiers caractères de la cellule est égale à la chaîne "209"
si oui, excel retourne vrai, sinon faux

RC[-1] => même ligne/Row, mais une colonne/Column de moins
(excusez-moi pour la piètre interprétation)

bye
stephane
 
N

neuba

Guest
Salut Stef,
je pense que ton code peut m'aider à résoudre mon problème si je l'adapte mais le problème c'est que je suis novice en VBA et certains termes me sont nouveaux comme currentregion et cell(row.cont,1) et autofilter2, true
Voudrais-tu m'aider àsavoir ce que c'est merci.
Mon prblème c'est de pouvoir parcourir une matrice et supprimer toute les colonnes dont le total est zero.
 
S

STéphane

Guest
bonjour

mon code était le suivant
Sub CacheLignesMemesValeurs()
With [A1].CurrentRegion
.Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula = "=LEFT(RC[-1],3)=""209"""
.AutoFilter 2, True
.Columns(2).ClearContents
Worksheets.Add
.CurrentRegion.Copy [A1]
End With
End Sub

explications

================
with [A1].currentregion

=> excel comprendra qu'il devra appliquer certaines actions à l'objet [A1].currentregion
=> [A1].currentregion correspond à la région courante/adjacente à la cellule A1. Manuellement, vous pouvez l'atteindre en appuyant sur les touches Ctrl et *
=> [A1] est une manière de désigner la plage A1 que l'on désigne normalement comme suit : range("A1"). Les crochets sont en fait un raccourci syntaxique qui indique à excel d'évaluer l'expression qui est passée entre les crochets. Onpeut aussi écrire msgbox [5*4]
================
.Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Offset(0, 1).Formula = "=LEFT(RC[-1],3)=""209"""

=> cette dernière instruction applique une action sur une plage définie à partir de [A1].currentregion
=> cette plage va de la cellule située dans la 1ière ligne et 1ière colonne de cette plage, jusqu'à la dernière cellule non vide de la première colonne de cette région.
=> l'action appliquée est l'insertion d'une formule relative.

ce n'est pas facile pour moi à expliquer. le mieux pour toi serait d'étudier el comportement de certaines instructions. regarde le lien suivant, tu y trouveras des exemples de sélection <http://xlbysteph.free.fr/aideinformatique/actioncellule.htm>


================
.AutoFilter 2, True

=> cela filtre la zone [A1].currentregion en sélectionnant toutes les lignes pour lesquelles les valeurs de la 2nde colonne de la plage [A1].currentregion sont égales à VRAI
================

.Columns(2).ClearContents
Colonne plus utile, son contenu est effacé
=================
Worksheets.Add
ajout d'une feuille
=================
.CurrentRegion.Copy [A1]
copie de la plage [A1].currentregion sur la plage A1 de la feuille nouvellement insérée

bye
Stéphane
 
N

neuba

Guest
Merci Stef,
j'ai résolu mon problème.
Sub col()
Range("a1").Select
While ActiveCell.Value <> ""
If ActiveCell = 0 Then
ActiveSheet.Columns(ActiveCell.Column).Delete
End If
ActiveCell.Offset(0, 1).Range("a1").Select
Wend
End Sub
avec ce code je parcours toute la matrice pour rechercher toutes les celles d'une ligne quelconque ici la première contenant 0 et je les supprime.
bye
 
N

neuba

Guest
Voilà un autre code qui marche
Sub effacecolonnenulle()
Range("a1").End(xlDown).Select
While ActiveCell <> ""
If ActiveCell = 0 Then
ActiveSheet.Columns(ActiveCell.Column).Delete
End If
If ActiveCell <> 0 Then
ActiveCell.Offset(0, 1).Range("a1").Select
x = ActiveCell
End If
Wend
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2