selectionner certaines lignes et colonnes avec VBA

  • Initiateur de la discussion Initiateur de la discussion frédéric
  • 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 !

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.
 
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
 
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
 
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.
 
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
 
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
 
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
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour