VBA Excel03 - Copier lignes avec conditions
Résolu
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
-
Modifié par Palteza le 9/04/2010 à 14:26
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014 - 9 avril 2010 à 13:46
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014 - 9 avril 2010 à 13:46
A voir également:
- VBA Excel03 - Copier lignes avec conditions
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Copier texte pdf - Guide
- Historique copier-coller android - Guide
- Copier disque dur - Guide
4 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
9 avril 2010 à 10:25
9 avril 2010 à 10:25
Bonjour,
Ce n'est pas la bonne syntaxe. Il faut faire comme ça :
Si tu as 27 conditions je te conseille de faire un Select Case, par exemple :
;o)
Ce n'est pas la bonne syntaxe. Il faut faire comme ça :
If .Cells(Lig, Col).Value = 33003 Or .Cells(Lig, Col).Value = 33004
Si tu as 27 conditions je te conseille de faire un Select Case, par exemple :
With Sheets(1) ' feuille source NbrLig = .Cells(65536, 2).End(xlUp).Row For Lig = 5 To NbrLig com = .Cells(Lig, 2).Value Select Case com Case 33003 To 330030 .Cells(Lig, 2).EntireRow.Copy NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste End Select Next End With
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
9 avril 2010 à 12:26
9 avril 2010 à 12:26
Merci Polux pour la réponse, ça fonctionne très bien en adaptant le Case.
Pour vraiment cerner la chose, question fonctionnement :
- Comment opère la commande Case en liaison avec ta variable com (qu'est-ce qu'elle fait vraiment?)
- pareil pour Select : rien de sorcier, c'est juste une sélection?
Merci bien en tout cas!
Pour vraiment cerner la chose, question fonctionnement :
- Comment opère la commande Case en liaison avec ta variable com (qu'est-ce qu'elle fait vraiment?)
- pareil pour Select : rien de sorcier, c'est juste une sélection?
Merci bien en tout cas!
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
9 avril 2010 à 13:26
9 avril 2010 à 13:26
La variable "com" récupère la valeur de la cellule ".Cells(Lig, 2).Value"
Le Select Case permet d'effectuer un code en fonction du "Select". Ici c'est le contenu de la cellule,"com" qui détermine ce qu'il faut traiter.
Dans ton exemple, tu dis que tu as 27 cellules à tester. Tu aurais pu avoir un traitement différent en fonction de la valeur de la cellule. Par exemple mettre une couleur de fond différente:
Si la tâche à effectuer est toujours la même, le Select Case ne s'impose pas.
On peut faire ainsi :
;o)
Le Select Case permet d'effectuer un code en fonction du "Select". Ici c'est le contenu de la cellule,"com" qui détermine ce qu'il faut traiter.
Dans ton exemple, tu dis que tu as 27 cellules à tester. Tu aurais pu avoir un traitement différent en fonction de la valeur de la cellule. Par exemple mettre une couleur de fond différente:
With Sheets(1) ' feuille source NbrLig = .Cells(65536, 2).End(xlUp).Row For Lig = 5 To NbrLig com = .Cells(Lig, 2).Value Select Case com Case 33003 To 33010 .Cells(Lig, 2).EntireRow.Copy .Cells(Lig, 2).Interior.Color = VBGreen NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste Case 33011 To 33020 .Cells(Lig, 2).EntireRow.Copy .Cells(Lig, 2).Interior.Color = VBRed NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste ' etc ..... End Select Next End With
Si la tâche à effectuer est toujours la même, le Select Case ne s'impose pas.
On peut faire ainsi :
With Sheets(1) ' feuille source NbrLig = .Cells(65536, 2).End(xlUp).Row For Lig = 5 To NbrLig If .Cells(Lig, 2).Value >= 33003 And .Cells(Lig, 2).Value =< 330030 Then .Cells(Lig, 2).EntireRow.Copy NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste End If Next End With
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 9/04/2010 à 13:46
Modifié par Palteza le 9/04/2010 à 13:46
Impec' les éclaircissements!
Ton Select Case allait vraiment bien dans ce cas, puisque ce sont des valeurs de 330xx à 339xx à tester, mais dans ce champ seules très peu sont à sélectionner (en fait ça correspondait, en gros, à des codes postaux) ... je les ai donc énumérées en les séparant de virgules.
Merci encore, je passe ça en résolu.
Ton Select Case allait vraiment bien dans ce cas, puisque ce sont des valeurs de 330xx à 339xx à tester, mais dans ce champ seules très peu sont à sélectionner (en fait ça correspondait, en gros, à des codes postaux) ... je les ai donc énumérées en les séparant de virgules.
Merci encore, je passe ça en résolu.