Etendre ActiveCell à Une Sélection Multiple
Maybe your like
Navigation
Discussion : Etendre ActiveCell à une sélection multiple
[XL-2010] Sujet :


Inscrivez-vous gratuitementpour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter
- Vous n'êtes pas encore inscrit sur Developpez.com ? Inscrivez-vous gratuitement !
- Recherche avancée

- Forum
- Logiciels
- Microsoft Office
- Excel
- Macros et VBA Excel
- [XL-2010] Etendre ActiveCell à une sélection multiple
Discussion : Etendre ActiveCell à une sélection multiple Macros et VBA Excel
- Outils de la discussion
- Afficher une version imprimable
- S'abonner à cette discussion…
- Affichage
- Mode linéaire
- Choisir le mode hybride
- Choisir le mode arborescent
- 11/02/2015, 12h57 #1 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Etendre ActiveCell à une sélection multiple Bonjour à tous, J'espère pouvoir trouver sur ce forum des réponses à mes questions. Je vous remercie par avance pour le temps que vous me consacrerez. Je dispose d'une macro très simple dont le but est de copier / coller une formule d'une plage aux coordonnées fixes vers une plage définie par l'utilisateur (identifier grâce à Active cell). Pour améliorer ma macro, j'aimerais que cette macro ne s'applique pas seulement à la cellule active mais à une sélection d'une à plusieurs celulles. Voici un fichier pour illustrer mon problème Test.xlsm PS : si l'on se positionne sur une ligne (ligne 9 par exemple), la macro s'applique. J'aimerais pouvoir faire fonctionner la macro en boucle sur l'ensemble des lignes que sélectionnerait l'utilisateur, or si je sélectionne les lignes 9 et 10, la macro ne s'applique que sur la ligne 9. Il y a une contrainte (identifiée en colonne B), si il y a une "x", la macro s'arrête. J'aimerais que la commande s'applique sur chaque ligne sélectionnée en intégrant cette contrainte (si "x", tu appliques le code, si pas de "x", tu passes à la ligne suivante... etc jusqu'à la dernière ligne sélectionnée). Donc à ce jour, la macro fonctionne mais l'utilisateur doit faire la manipulation ligne à ligne, ce qui est un peu fastidieux. Merci d'avance
Répondre avec citation 0 0 - 11/02/2015, 13h10 #2 Philippe Tulliez
Rédacteur 






Formateur, développeur et consultant Excel, Access, Word et VBAInscrit enJanvier 2010Messages13 216
Détails du profil
Informations personnelles :Sexe :
Localisation : BelgiqueInformations professionnelles :Activité : Formateur, développeur et consultant Excel, Access, Word et VBAInformations forums :Inscription : Janvier 2010Messages : 13 216Billets dans le blog53
Bonjour, La sélection d'une cellule ou d'une plage de cellules est représentée par l'objet Selection et ActiveCell est l'objet représentant la cellule active. C'est exactement ce qui se passe lorsque l'on sélectionne manuellement une plage de cellules. Il y a une contrainte (identifiée en colonne B), si il y a une "x", la macro s'arrête. J'aimerais que la commande s'applique sur chaque ligne sélectionnée en intégrant cette contrainte (si "x", tu appliques le code, si pas de "x", tu passes à la ligne suivante... etc jusqu'à la dernière ligne sélectionnée). Pour cela, il faut utiliser une structure conditionnelle telle que If ou Select...Case
Philippe Tulliez Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau) Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur
et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Répondre avec citation 1 0 - 11/02/2015, 13h32 #3 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Bonjour Philippe, Oui je comprends l'utilisation de ActiveCell que j'exploite dans mon code pour identifier la ligne active sur laquelle appliquer mon code. J'ai aussi utilisé IF pour conditionner l'application de ce code. Je ne comprends cependant pas comment appliquer ce code sur une sélection "active", je sélectionne les lignes 2 à 10, mon code s'applique sur la ligne 2, puis la ligne 3... jusqu'à la ligne 10... C'est là que je bloque.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 123456789101112131415161718 Sub Macro() Dim L As Long, R As Range L = ActiveCell.Row Application.ScreenUpdating = False If Cells(L, 2) <> "x" Then Exit Sub For Each R In Range("D7,F7,H7,J7,L7") R.Copy Cells(L, R.Column) Next Calculate Application.ScreenUpdating = True End Sub
Répondre avec citation 0 0 - 11/02/2015, 13h56 #4 Philippe Tulliez
Rédacteur 






Formateur, développeur et consultant Excel, Access, Word et VBAInscrit enJanvier 2010Messages13 216
Détails du profil
Informations personnelles :Sexe :
Localisation : BelgiqueInformations professionnelles :Activité : Formateur, développeur et consultant Excel, Access, Word et VBAInformations forums :Inscription : Janvier 2010Messages : 13 216Billets dans le blog53
Bonjour, J'ai aussi utilisé IF pour conditionner l'application de ce code. Je n'ai pas examiné l'ensemble de ta procédure mais est-ce normal de faire le test de la présence d'un X en dehors de la boucle ? D'après moi, non Je ne comprends cependant pas comment appliquer ce code sur une sélection "active", je sélectionne les lignes 2 à 10, mon code s'applique sur la ligne 2, puis la ligne 3... jusqu'à la ligne 10... D'après ma première lecture, tu sélectionnes une colonne sur deux et seulement la ligne 7 ("Range("D7,F7,H7,J7,L7")").
Philippe Tulliez Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau) Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur
et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Répondre avec citation 1 0 - 11/02/2015, 14h15 #5 PMO2017
Membre Expert 






Inscrit enJuin 2009Messages652
Détails du profil
Informations personnelles :Localisation : France, Paris (Île de France)Informations forums :Inscription : Juin 2009Messages : 652
Bonjour, Essayez avec votre code modifié
Code : Sélectionner tout - Visualiser dans une fenêtre à part 12345678910111213141516171819202122 Sub Macro() Dim Plage As Range Dim C As Range Dim L As Long Dim R As Range '--- If TypeName(Selection) <> "Range" Then Exit Sub Set Plage = Selection Application.ScreenUpdating = False '--- For Each C In Plage L = C.Row If Cells(L, 2) = "x" Then For Each R In Range("D7,F7,H7,J7,L7") R.Copy Cells(L, R.Column) Next R End If Next C '--- Calculate Application.ScreenUpdating = True End Sub
Répondre avec citation 1 0 - 11/02/2015, 14h17 #6 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Philippe, Le test de condition "X" devrait effectivement être intégré dans la boucle, mais pour l'instant je n'arrive pas à créer cette boucle à l'intérieur d'une sélection de plage. Donc la plage de référence qui contient les formules à copier est fixe (1 colonne sur 2 et la ligne 7). Pour cela pas de problème. Le code doit donc faire un copier/ coller très basique de cette plage de référence ("Range("D7,F7,H7,J7,L7")"), vers une plage dont les coordonnées sont déterminés par la ligne active.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
. Le défi, c'est de pouvoir copier ces formules vers une première ligne (corresponsant à la première ligne de ma sélection), puis de passer à la ligne suivante et ce jusqu'à la dernière ligne selectionnée par l'utilisateur. Si en plus, la condition rentrait dans la boucle, alors ce serait parfait, mais bon ce n'est pas là le véritable enjeu. Je suis un bricoleur en VBA, je n'ai aucune formation, donc mes préoccupations peuvent paraître futiles et j'essaie de progresser via des forums comme celui-ci... Merci encore du temps que tu consacres à mon post.12 For Each R In Range("D7,F7,H7,J7,L7") R.Copy Cells(L, R.Column)
Répondre avec citation 0 0 - 11/02/2015, 14h42 #7 Philippe Tulliez
Rédacteur 






Formateur, développeur et consultant Excel, Access, Word et VBAInscrit enJanvier 2010Messages13 216
Détails du profil
Informations personnelles :Sexe :
Localisation : BelgiqueInformations professionnelles :Activité : Formateur, développeur et consultant Excel, Access, Word et VBAInformations forums :Inscription : Janvier 2010Messages : 13 216Billets dans le blog53
Bonjour, Si j'ai bien compris, tu voudrais copier des lignes d'une plage de cellules contiguës en les insérant dans des cellules non contiguës. J'avoue ne pas très bien saisir la finalité de cette procédure. Voici en guise d'exemple, une procédure qui parcourt des cellules non contiguës (K2, K4, K6 et K8) et qui affiche un message si une de ces cellules contient un "X"
Code : Sélectionner tout - Visualiser dans une fenêtre à part 1234 Dim c As Range For Each c In Range("K2,K4,K6,K8") If LCase(Trim(c)) = "x" Then MsgBox "Un x à l'adresse " & c.Address Next Philippe Tulliez Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau) Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur
et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Répondre avec citation 1 0 - 11/02/2015, 16h42 #8 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Je vais au moins t'expliquer à quoi sert ce fichier, et cette commande. J'ai un tableau qui correspond à un prévisionnel de dépenses. Les utilisateurs doivent remplir à la main les dépenses qu'ils prévoient sur une période de 12 mois. En ligne, nous avons des types de dépenses, en colonne des mois. Voici un screen shot du tableau en question
Certaines dépenses sont récurrentes, donc pour éviter que l'utilisateur reporte le même montant sur les 12 mois, j'ai crée ce bouton qui permet de reprendre un montant (colonne J) et de le reporter sur toute la ligne dans des cellules (non contigues) prévues à et effet. L'utilisateur doit pouvoir quand même modifier ces cellules (je ne veux donc pas les protéger) et la macro veux à nouveau utiliser cette fonction de report automatique (c'est pour cette raison que j'ai besoin d'une macro). La macro permet de recréer la formule de base. Mon challenge c'est de fiare en sorte que la macro agisse non pas sur la ligne active ou la première ligne d'une sélection, mais sur toutes les lignes sélectionnées. Cela laisserait la possibilité de faire ligne à ligne ou de faire une mise à jourtrès rapide du fichier en sélectionnant toutes les lignes du tableau. J'avais crée un fichier pour simplifier la lecture (celui en pj). Je pense que c'est plus simple de l'utiliser pour voir ce qui se passe dans mon code et je suis certain que tu comprendras ce que je cherche. Je comprendrais aussi que tu aies autre chose à faire auquel cas je me contenterais du code actuel qui fonctionne
Répondre avec citation 0 0 - 11/02/2015, 17h13 #9 PMO2017
Membre Expert 






Inscrit enJuin 2009Messages652
Détails du profil
Informations personnelles :Localisation : France, Paris (Île de France)Informations forums :Inscription : Juin 2009Messages : 652
@ Barbenault Cela vous arrive de tester toutes les pistes qui vous sont proposées ? Voir message #5
Répondre avec citation 1 0 - 11/02/2015, 17h30 #10 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Merci PMO2017, Mille excuses, je n'avais pas vu ton message, toute aide est précieuse, je regarde cela tout de suite. C'est exactement ce qu'il me fallait. Je suis confus de n'avoir pas vu ton message plus tôt. Je te remercie encore, tu me rends un grand service. Non seulement mon fichier est optimisé, mais en plus j'ai appris quelquechose. Merci PS : merci aussi à Philippe d'avoir essayé de me comprendre.
Répondre avec citation 0 0 - 11/02/2015, 17h31 #11 Philippe Tulliez
Rédacteur 






Formateur, développeur et consultant Excel, Access, Word et VBAInscrit enJanvier 2010Messages13 216
Détails du profil
Informations personnelles :Sexe :
Localisation : BelgiqueInformations professionnelles :Activité : Formateur, développeur et consultant Excel, Access, Word et VBAInformations forums :Inscription : Janvier 2010Messages : 13 216Billets dans le blog53
Bonjour, Bien que je privilégie les feuilles de données organisées comme des tables en Access et pas comme des tableaux de bord ou formulaire, voici un petit exemple Pour cet exemple, les données à copier doivent se trouver en colonne J et la sélection des lignes doit se faire sur cette même colonne. Par exemple en sélectionnant J3, J7, J11 et J12, la copie des données sélectionnées se fera sur les colonnes K, N, Q, etc. de cette même ligne. La procédure ne contrôle pas s'il n'y a rien dans la cellule sélectionnée et ne contrôle que la colonne source (Colonne J)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 12345678910111213141516 Sub T() Dim Cel As Range, Col As Integer ' Contrôle si la cellule active est bien la colonne J If ActiveCell.Column <> 10 Then MsgBox "La colonne sélectionnée n'est pas la bonne": Exit Sub End If For Each Cel In Selection With Cel If .Column = 10 Then ' Ctrl si cette cellule sélectionnée est bien en colonne J For Col = 1 To 36 Step 3 .Offset(columnoffset:=Col).Value = .Value Next End If End With Next Cel End Sub Philippe Tulliez Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau) Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur
et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Répondre avec citation 1 0 - 11/02/2015, 17h40 #12 Barbenault
Membre averti 






Contrôleur de gestionInscrit enAvril 2014Messages31
Détails du profil
Informations personnelles :Sexe :
Âge : 44Localisation : France, Paris (Île de France)Informations professionnelles :Activité : Contrôleur de gestionSecteur : Associations - ONGInformations forums :Inscription : Avril 2014Messages : 31
Merci Philippe pour cette dernière contribution, je pense qu'elle pourrait m'être utile. C'est effectivement intéressant de tester la colonne active. Je pourrais l'adapter à mon besoin. En l'occurrence je vais rester avec la proposition de PMO2017 qui correspond exactement à mon besoin. Merci encore.
Répondre avec citation 0 0
| Actualités | FAQs OFFICE | TUTORIELS OFFICE | LIVRES OFFICE | SOURCES VBA | OFFICE 2010 |

- Forum
- Logiciels
- Microsoft Office
- Excel
- Macros et VBA Excel
- [XL-2010] Etendre ActiveCell à une sélection multiple
Discussions similaires
- Utiliser une sélection multiple comme critère de requête Par Sébastien Le Goyet dans le forum Requêtes et SQL. Réponses: 6 Dernier message: 03/04/2007, 15h40
- l'index de la première et de la dernière ligne d'une sélection multiple Par Thierry_brest dans le forum Access Réponses: 2 Dernier message: 28/02/2007, 21h20
- Glisser/Déposer une sélection multiple Par mxh77 dans le forum 4D Réponses: 1 Dernier message: 28/09/2006, 12h41
- [WebForms]Comment faire une sélection multiple dans une DropDownList ? Par totoche9 dans le forum Général Dotnet Réponses: 2 Dernier message: 24/08/2006, 12h33
- [JFileChooser] récupéré le résultat d'une sélection multiple Par hadler dans le forum AWT/Swing Réponses: 5 Dernier message: 04/07/2006, 12h19
Partager
Partager
Tag » Activecell Sélectionner Plusieurs Cellules
-
How To Select Cells Or Ranges By Using Visual Basic Procedures In ...
-
Sélection Et Activation De Cellules | Microsoft Docs
-
Selection De Plusieurs Cellules - Forum Excel-Pratique
-
Selection De Plusieurs Cellules De L'activeCell.row
-
VBA : Sélectionner Une Plage De Cellules - Comment Ça Marche
-
Sélectionner Plusieurs Cellules - Microsoft 365 - Excel-Downloads
-
VBA Sélectionner Des Plages / Cellules - Automate Excel
-
Gestion Des Cellules - Formation Excel VBA JB
-
Astuces Microsoft Excel - Conseil Création
-
Comment Sélectionner Des Lignes Et Des Colonnes Entières Dans ...
-
Actions Sur Cellules, Lignes, Commentaires - Free
-
Excel - VBA Simple De Sélection: La Sélection De 5 Cellules à Droite ...
-
VBA Excel - Travailler Avec Des Sélections - Médiaforma - Mediaforma
-
Comment Mettre En évidence Une Cellule Ou Une Sélection Active ...