Sélection en langage VBA
Résolu/Fermé
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
-
Modifié par megatronnbjja le 14/05/2013 à 09:34
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 16 mai 2013 à 14:47
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 16 mai 2013 à 14:47
A voir également:
- Sélection en langage VBA
- Langage ascii - Guide
- Langage binaire - Guide
- Inverser selection excel - Forum Excel
- Pascal langage - Télécharger - Édition & Programmation
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
5 réponses
Uryon
Messages postés
73
Date d'inscription
lundi 29 avril 2013
Statut
Membre
Dernière intervention
21 janvier 2015
14 mai 2013 à 10:43
14 mai 2013 à 10:43
Tu veux sélectionner tout ça en VBA ? Pour ça on utiliserait plus du SQL, en tout cas je n'ai aucune idée de comment en langage VBA uniquement on pourrait sélectionner tout cela.
En SQL ça donnerai :" Select B, E, G FROM **Nomdetatable**;"
En SQL ça donnerai :" Select B, E, G FROM **Nomdetatable**;"
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
14 mai 2013 à 10:55
14 mai 2013 à 10:55
Bonjour,
exemple avec enregistreur de macro
Sub Macro1()
'
' Macro1 Macro
' enregistreur de macro: selection plages de cellules
Range("J3:J14,L3:L14,N3:N14").Select
End Sub
votre macro:
Sub test()
'ligne derniere cellule non vide feuille1,colonne B
derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
'selection des cellules B1 a Bderlig,D1 a Dderlig,G1 a Gderlig
Worksheets("feuil1").Range("B1:B" & derlig & ",E1:E" & derlig & ",G1:G" & derlig).Select
End Sub
Bonne suite
exemple avec enregistreur de macro
Sub Macro1()
'
' Macro1 Macro
' enregistreur de macro: selection plages de cellules
Range("J3:J14,L3:L14,N3:N14").Select
End Sub
votre macro:
Sub test()
'ligne derniere cellule non vide feuille1,colonne B
derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
'selection des cellules B1 a Bderlig,D1 a Dderlig,G1 a Gderlig
Worksheets("feuil1").Range("B1:B" & derlig & ",E1:E" & derlig & ",G1:G" & derlig).Select
End Sub
Bonne suite
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
14 mai 2013 à 15:36
14 mai 2013 à 15:36
Bonjour,
merci pour ta réponse, ça me sort du petrin.
Je me pose toutefois deux questions:
1/ derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
pourquoi xlUp alors que l'on souhaite avoir la dernière ligne (j'aurais pensé a xlDown) et à quoi sert le .Row ?
2/ j'avais écrit pour une autre application la ligne suivante:
Range("$A$2", Range("$AC$2").End(xlDown)) avec dernière ligne:10
Ceci me permet bien de sélectionner la plage (A2:AB10) ?
merci d'avance,
Megatronnbjjja
merci pour ta réponse, ça me sort du petrin.
Je me pose toutefois deux questions:
1/ derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
pourquoi xlUp alors que l'on souhaite avoir la dernière ligne (j'aurais pensé a xlDown) et à quoi sert le .Row ?
2/ j'avais écrit pour une autre application la ligne suivante:
Range("$A$2", Range("$AC$2").End(xlDown)) avec dernière ligne:10
Ceci me permet bien de sélectionner la plage (A2:AB10) ?
merci d'avance,
Megatronnbjjja
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
14 mai 2013 à 19:38
14 mai 2013 à 19:38
Re,
ecrivez avec (j'aurais pensé a xlDown) vous verrez le resultat.
ecrivez avec (j'aurais pensé a xlDown) vous verrez le resultat.
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
15 mai 2013 à 09:16
15 mai 2013 à 09:16
re
avec xlDown j'ai un message d'erreur. Mais j'essai de comprendre comment fonctionne cette syntaxe.
Avez-vous la réponse pour ma deuxième question?
avec xlDown j'ai un message d'erreur. Mais j'essai de comprendre comment fonctionne cette syntaxe.
Avez-vous la réponse pour ma deuxième question?
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
Modifié par f894009 le 15/05/2013 à 09:41
Modifié par f894009 le 15/05/2013 à 09:41
Bonjour,
faudrait la ligne de code complete pour votre deuxieme question!! Chez moi la selection est: A2:AC le fond du panier (derniere ligne pour execl 2007) ce qui pour moi tout a fait normal.
faudrait la ligne de code complete pour votre deuxieme question!! Chez moi la selection est: A2:AC le fond du panier (derniere ligne pour execl 2007) ce qui pour moi tout a fait normal.
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
14 mai 2013 à 10:55
14 mai 2013 à 10:55
Alors je ne connais pas du tout le SQL. Où suis-je censé écrire ce type de langage?
Merci de ta réponse en tout cas.
Merci de ta réponse en tout cas.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié par eriiic le 15/05/2013 à 10:39
Modifié par eriiic le 15/05/2013 à 10:39
Bonjour,
1/ derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
pourquoi xlUp alors que l'on souhaite avoir la dernière ligne (j'aurais pensé a xlDown) et à quoi sert le .Row ?
Ici tu pars de la dernière ligne de la feuille (rows.count=nombre de lignes de la feuille) et tu remontes pour trouver la dernière ligne occupée.
Toi, avec xldown, tu pars de A2 et tu cherches la dernière ligne occupée de la zone en cours.
Si tu as 20 lignes avec la ligne 10 vide tu seras sur la ligne 9. Si tu es sûr qu'il n'y a pas de vides c'est bon.
Avec la 1ère syntaxe tu seras sur la ligne 20, la dernière occupée réelle même s'il y a des vides.
.row te donne le n° de ligne du range.
F1 sur une fonction te donne l'aide excel qui est très bien faite
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
1/ derlig = Worksheets("feuil1").Range("B" & Rows.Count).End(xlUp).Row
pourquoi xlUp alors que l'on souhaite avoir la dernière ligne (j'aurais pensé a xlDown) et à quoi sert le .Row ?
Ici tu pars de la dernière ligne de la feuille (rows.count=nombre de lignes de la feuille) et tu remontes pour trouver la dernière ligne occupée.
Toi, avec xldown, tu pars de A2 et tu cherches la dernière ligne occupée de la zone en cours.
Si tu as 20 lignes avec la ligne 10 vide tu seras sur la ligne 9. Si tu es sûr qu'il n'y a pas de vides c'est bon.
Avec la 1ère syntaxe tu seras sur la ligne 20, la dernière occupée réelle même s'il y a des vides.
.row te donne le n° de ligne du range.
F1 sur une fonction te donne l'aide excel qui est très bien faite
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
15 mai 2013 à 10:45
15 mai 2013 à 10:45
Bonjour et merci
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
15 mai 2013 à 10:46
15 mai 2013 à 10:46
Bonjour eriic,
Merci pour ta réponse. J'ai bien compris.
J'ai une nouvelle question concernant la sélection de plage de cellules en fonction de la dernière cellule non vide.
Avec le code suivant je demande à excel de trouver la dernière colonne occupée ainsi que la dernière ligne:
Je ne trouve pas la bonne syntaxe pour le Range de la variable tableau. J'ai essayé pas mal de combinaison entre " , & derlig, dercol mais rien de probant.
Merci encore pour ton aide.
Merci pour ta réponse. J'ai bien compris.
J'ai une nouvelle question concernant la sélection de plage de cellules en fonction de la dernière cellule non vide.
Avec le code suivant je demande à excel de trouver la dernière colonne occupée ainsi que la dernière ligne:
Dim derlig As Long Dim dercol As Integer Dim tableau As Range derlig = Range("A" & Rows.Count).End(xlUp).Row dercol = Cells(5, Cells.Columns.Count).End(xlToLeft).Column tableau = Range( tableau.Select
Je ne trouve pas la bonne syntaxe pour le Range de la variable tableau. J'ai essayé pas mal de combinaison entre " , & derlig, dercol mais rien de probant.
Merci encore pour ton aide.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié par eriiic le 15/05/2013 à 11:05
Modifié par eriiic le 15/05/2013 à 11:05
Set est obligatoire, tableau est un objet (un range), pas une variable.
2 exemples :
Set tableau = Range([A2], Cells(derlig, dercol))
ou
Set tableau = [A2].Resize(derlig - 1, dercol)
Les colonnes ne sont donc pas collées les unes aux autres.
tu peux utiliser l'intersection et l'union de plages :
Set tableau = Intersect(tableau, Union([A:A], [C:F], [H:H]))
eric
PS: un .select est très souvent totalement inutile, et toujours chronophage.
2 exemples :
Set tableau = Range([A2], Cells(derlig, dercol))
ou
Set tableau = [A2].Resize(derlig - 1, dercol)
Les colonnes ne sont donc pas collées les unes aux autres.
tu peux utiliser l'intersection et l'union de plages :
Set tableau = Intersect(tableau, Union([A:A], [C:F], [H:H]))
eric
PS: un .select est très souvent totalement inutile, et toujours chronophage.
megatronnbjja
Messages postés
63
Date d'inscription
mardi 12 mars 2013
Statut
Membre
Dernière intervention
28 avril 2020
15 mai 2013 à 11:18
15 mai 2013 à 11:18
pour sélectionner une plage de cellules avec Range, il ne faut pas séparer le nom des cellules par " : " ? Je croyais qu'un ; permettrait de sélectionner la cellule A2 et la dernière cellule....
merci pour l'info à propos du .select et pour la fonction intersect.
merci pour l'info à propos du .select et pour la fonction intersect.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié par eriiic le 15/05/2013 à 11:42
Modifié par eriiic le 15/05/2013 à 11:42
il ne faut pas séparer le nom des cellules par " : " ?
oui si tu connais les cellules.
Ici tu connais 1ère cellule, dernières ligne et colonne. Ca serait plus long à écrire pour obtenir range("A2:C5") mais tu pourrais.
eric
oui si tu connais les cellules.
Ici tu connais 1ère cellule, dernières ligne et colonne. Ca serait plus long à écrire pour obtenir range("A2:C5") mais tu pourrais.
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
16 mai 2013 à 14:47
16 mai 2013 à 14:47
Ta demande était :
alors si par exemple je veux filtrer la plage (A1:A10) avec comme critère: ne contient ni "a" ni "b" ni "c",
C'est fichier qui correspond à ta demande et qui permet tous les test de tous les cas de figure que je voulais.
Pas un torchon avec une seule cellule de remplie avec "JF" sur A1:A10.
Ca j'arrive à le faire en 0.2s...
Ras le bol des demandeurs qui ne fournissent pas un fichier minimum pour travailler sur leur question.
J'abandonne, la question de départ étant résolue tu peux mettre en résolu.
eric
alors si par exemple je veux filtrer la plage (A1:A10) avec comme critère: ne contient ni "a" ni "b" ni "c",
C'est fichier qui correspond à ta demande et qui permet tous les test de tous les cas de figure que je voulais.
Pas un torchon avec une seule cellule de remplie avec "JF" sur A1:A10.
Ca j'arrive à le faire en 0.2s...
Ras le bol des demandeurs qui ne fournissent pas un fichier minimum pour travailler sur leur question.
J'abandonne, la question de départ étant résolue tu peux mettre en résolu.
eric