Selection d'une plage decalée par rapport à une cellule elle-même decalée
Résolu/Fermé
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
-
30 janv. 2020 à 12:18
DanGg Messages postés 8 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 31 janvier 2020 - 31 janv. 2020 à 17:30
DanGg Messages postés 8 Date d'inscription mardi 28 janvier 2020 Statut Membre Dernière intervention 31 janvier 2020 - 31 janv. 2020 à 17:30
A voir également:
- Vba sélectionner une plage à partir de la cellule active
- Aller à la ligne dans une cellule excel - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une liste déroulante dans excel à partir d'une plage nommée ? - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Excel compter cellule couleur sans vba - Guide
7 réponses
danielc0
Messages postés
1331
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
16 décembre 2024
155
30 janv. 2020 à 13:19
30 janv. 2020 à 13:19
Bonjour,
Mets cette macro dans le module de la feuille :
La macro se déclenche au changement de sélection de cellule.
Cordialement.
Daniel
Mets cette macro dans le module de la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub On Error Resume Next If Target.Offset(, 7) = "OUI" Then Application.EnableEvents = False Target.Offset(2, 4).Resize(4, -8).Select Application.EnableEvents = True End If On Error GoTo 0 End Sub
La macro se déclenche au changement de sélection de cellule.
Cordialement.
Daniel
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
30 janv. 2020 à 18:09
30 janv. 2020 à 18:09
Merci d'abord.
mais je constate que ce n'est pas fait, donc j'imagine que n'est pas la peine de définir la cellule A1 avant de demander de décaler de 7 vers la droite par Target.Offset ?
Pour l'essentiel, j'ai recopié et essayé ta macro sur un feuille vierge où j'entre un ''OUI' en cellule H1 puis l’efface, puis le rentre tour à tour, or cela la macro ne fonctionne pas chez moi. (je travaille avec OFFICE 2016)
Autre souci - ma formation VBA est insuffisante - j’espérais pouvoir poursuivre diverses autres étapes de travail dans une macro classique (situé dans un module) et souhaitais aussi pouvoir demander qu'il soit remonté dans la macro avec la fonction Goto , en déclarant jusqu'à quelle ligne, pour lui demander vérifier dans une autre cellule, 14 colonnes plus loin, si le OUI recherché y est et alors agir, et ainsi de suite?
ta macro dans le code de la feuille le permettrait ? Ou bien un appel vers une macro classique ? ou bien le tout dans un module classique ?
merci
mais je constate que ce n'est pas fait, donc j'imagine que n'est pas la peine de définir la cellule A1 avant de demander de décaler de 7 vers la droite par Target.Offset ?
Pour l'essentiel, j'ai recopié et essayé ta macro sur un feuille vierge où j'entre un ''OUI' en cellule H1 puis l’efface, puis le rentre tour à tour, or cela la macro ne fonctionne pas chez moi. (je travaille avec OFFICE 2016)
Autre souci - ma formation VBA est insuffisante - j’espérais pouvoir poursuivre diverses autres étapes de travail dans une macro classique (situé dans un module) et souhaitais aussi pouvoir demander qu'il soit remonté dans la macro avec la fonction Goto , en déclarant jusqu'à quelle ligne, pour lui demander vérifier dans une autre cellule, 14 colonnes plus loin, si le OUI recherché y est et alors agir, et ainsi de suite?
ta macro dans le code de la feuille le permettrait ? Ou bien un appel vers une macro classique ? ou bien le tout dans un module classique ?
merci
danielc0
Messages postés
1331
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
16 décembre 2024
155
30 janv. 2020 à 18:44
30 janv. 2020 à 18:44
" j'imagine que n'est pas la peine de définir la cellule A1 avant de demander de décaler de 7 vers la droite par Target.Offset ?"
Comme je l'ai compris, la sélection se fait depuis la cellule active. Donc elle se fait depuis A1 si tu cliques en A1
"la macro ne fonctionne pas chez moi"
La macro se déclenche automatiquement quand tu changes de cellule. Si ce n'est pas ce que tu veux, dis-le.J'ai dû me tromper dans mon décalage. Si tu cliques en A1, quelle doit-être la plage sélectionnée ?
"j’espérais pouvoir poursuivre diverses autres étapes de travail dans une macro classique (situé dans un module) et souhaitais aussi pouvoir demander qu'il soit remonté dans la macro avec la fonction Goto , en déclarant jusqu'à quelle ligne, pour lui demander vérifier dans une autre cellule, 14 colonnes plus loin, si le OUI recherché y est et alors agir, et ainsi de suite?"
Je ne suis pas sûr d'avoir compris. Peux-tu donner un exemple ?
Daniel
Comme je l'ai compris, la sélection se fait depuis la cellule active. Donc elle se fait depuis A1 si tu cliques en A1
"la macro ne fonctionne pas chez moi"
La macro se déclenche automatiquement quand tu changes de cellule. Si ce n'est pas ce que tu veux, dis-le.J'ai dû me tromper dans mon décalage. Si tu cliques en A1, quelle doit-être la plage sélectionnée ?
"j’espérais pouvoir poursuivre diverses autres étapes de travail dans une macro classique (situé dans un module) et souhaitais aussi pouvoir demander qu'il soit remonté dans la macro avec la fonction Goto , en déclarant jusqu'à quelle ligne, pour lui demander vérifier dans une autre cellule, 14 colonnes plus loin, si le OUI recherché y est et alors agir, et ainsi de suite?"
Je ne suis pas sûr d'avoir compris. Peux-tu donner un exemple ?
Daniel
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
31 janv. 2020 à 09:18
31 janv. 2020 à 09:18
je peux t'adresser un fichier simple qui précise avec clarté le sujet ?
(que j'y simplifie d'ailleurs en donnant une adresse fixe aux Cellules susceptibles de contenir 'OUI')
(que j'y simplifie d'ailleurs en donnant une adresse fixe aux Cellules susceptibles de contenir 'OUI')
danielc0
Messages postés
1331
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
16 décembre 2024
155
31 janv. 2020 à 10:46
31 janv. 2020 à 10:46
Oui, bien sûr, volontiers.
Daniel
Daniel
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
31 janv. 2020 à 14:08
31 janv. 2020 à 14:08
Comment fait-on pour l'envoyer ? je cherche réponse partout sur le site sans trouver
danielc0
Messages postés
1331
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
16 décembre 2024
155
31 janv. 2020 à 14:21
31 janv. 2020 à 14:21
Va sur cette page :
https://mon-partage.fr/
Copie l'adresse du "lien de téléchargement" et poste-le dans ta réponse.
Daniel
https://mon-partage.fr/
Copie l'adresse du "lien de téléchargement" et poste-le dans ta réponse.
Daniel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
31 janv. 2020 à 14:33
31 janv. 2020 à 14:33
Merci.
Voici le lien:
https://mon-partage.fr/f/VcD0RYM2/
Tout est inscrit sur ce document : la question précisée et l'exemple de feuille à traiter
merci.
Voici le lien:
https://mon-partage.fr/f/VcD0RYM2/
Tout est inscrit sur ce document : la question précisée et l'exemple de feuille à traiter
merci.
danielc0
Messages postés
1331
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
16 décembre 2024
155
31 janv. 2020 à 15:12
31 janv. 2020 à 15:12
Voici la macro qui boucle sur les "OUI" et efface la plage correspondante. Elle utilise les méthodes Find et FindNext. Elle est très classique. J'ai mis des commentaires dans la macro pour t'aider. Si tu as des questions, n'hésite pas :
Daniel
Sub Macro2() 'Effacement des plages vertes si "OUI" en ligne 2 Dim C As Range, ResAdr As String Set C = Range("2:2").Find("OUI", , , , xlByColumns, xlNext) 'on stocke l'adresse du premierr "OUI" en mémoire ResAdr = C.Address If C Is Nothing Then Exit Sub Do 'OUI ne doit pas être en colonne A If C.Column > 1 Then 'Effacement C.Offset(2, -1).Resize(5, 3).ClearContents End If 'on passe au suivant Set C = Range("2:2").FindNext(C) 'et on boucle si on n'est pas revenu sur le premier "oui" Loop While ResAdr <> C.Address End Sub
Daniel
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
31 janv. 2020 à 15:23
31 janv. 2020 à 15:23
Super.
On apprends peu à peu ..
Merci.
Résolu .
On apprends peu à peu ..
Merci.
Résolu .
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
Modifié le 31 janv. 2020 à 18:26
Modifié le 31 janv. 2020 à 18:26
Désolé pour mon retour et Re Re merci pour ton aide.
la macro proposée marche parfaitement sur mon classeur d'essai (celui que je te t'avais mis en pièce jointe, maintenant assorti de ta macro.
Mais cette macro ayant été telle que transférée dans mon classeur original, bien plus complexe en ce qu'il comporte de multiples onglets (mais je ne vois pas le rapport car la macro fonctionne pour l'une seule de ses feuilles), cela ne fonctionne plus totalement, avec un blocage sur
ResAdr = C.Address
Seule modification opérée :
Au lieu de :
Dim C As Range, ResAdr As String
Set C = Range("2:2").Find("OUI", , , , xlByColumns, xlNext)
J'ai écrit
Dim C As Range, ResAdr As String
Set C = Range("3:3").Find("Nvelle Facture", , , , xlByColumns, xlNext)
Et bien sûr aussi :
...
End If
Set C = Range("3:3").FindNext(C)
.. pour évidemment m'adapter au besoin réel de mon classeur
Où est donc le problème ?
Serait-ce dans 'DimC' et 'Set C' dont j ne comprends pas le sens et u'il fallait peut-être adapter ??
la macro proposée marche parfaitement sur mon classeur d'essai (celui que je te t'avais mis en pièce jointe, maintenant assorti de ta macro.
Mais cette macro ayant été telle que transférée dans mon classeur original, bien plus complexe en ce qu'il comporte de multiples onglets (mais je ne vois pas le rapport car la macro fonctionne pour l'une seule de ses feuilles), cela ne fonctionne plus totalement, avec un blocage sur
ResAdr = C.Address
Seule modification opérée :
Au lieu de :
Dim C As Range, ResAdr As String
Set C = Range("2:2").Find("OUI", , , , xlByColumns, xlNext)
J'ai écrit
Dim C As Range, ResAdr As String
Set C = Range("3:3").Find("Nvelle Facture", , , , xlByColumns, xlNext)
Et bien sûr aussi :
...
End If
Set C = Range("3:3").FindNext(C)
.. pour évidemment m'adapter au besoin réel de mon classeur
Où est donc le problème ?
Serait-ce dans 'DimC' et 'Set C' dont j ne comprends pas le sens et u'il fallait peut-être adapter ??