Selection d'une plage decalée par rapport à une cellule elle-même decalée
Résolu
DanGg
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
DanGg Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
DanGg Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Vba sélectionner une plage à partir de la cellule active
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Aller à la ligne dans une cellule excel - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Excel compter cellule couleur sans vba - Guide
- Combien y a-t-il de bateaux dans la zone de 475 pixels de large et 1000 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum Photoshop
7 réponses
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
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
" 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
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')
Comment fait-on pour l'envoyer ? je cherche réponse partout sur le site sans trouver
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
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.
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
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 ??