Selection d'une plage decalée par rapport à une cellule elle-même decalée [Résolu]

Signaler
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
-
DanGg
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020
-
Bonjour,
En VBA, je n'arrive pas sélectionner la Plage de cellules adéquate à partir d'une celle dont l'adresse est obtenue par la fonction Offset. J’obtiens ailleurs qu’il est voulu ma sélection de plage.
Je précise :
je sélectionne une cellule de début de feuille, exemple A1, avec :
Range("A1").Activate
Suivant mes besoins, je procède ensuite à un décalage de cellule pour activer une cellule particulière, exemple :
ActiveCell.Offset(0, 7).Select
Si cette cellule contient ‘OUI’, je veux que soit sélectionnée une plage qui va de la cellule Départ située 2 ligne plus bas et 3 colonnes à gauche, jusqu’à la cellule Arrivée située 6 lignes plus bas et 11 colonnes à gauche. Ce sera par exemple pour en effacer le contenu.
Sinon, fin de la macro

L’Idéal serait que cette macro se déclenche automatiquement si la cellule obtenue par ‘ActiveCell.Offset(0, 7).Select’’ contient « OUI »
Qui peut m’aider ?? merci.

7 réponses

Messages postés
674
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
5 février 2020
51
Bonjour,

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
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

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
danielc0
Messages postés
674
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
5 février 2020
51
" 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
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

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')
danielc0
Messages postés
674
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
5 février 2020
51
Oui, bien sûr, volontiers.

Daniel
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

Comment fait-on pour l'envoyer ? je cherche réponse partout sur le site sans trouver
danielc0
Messages postés
674
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
5 février 2020
51
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
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

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
674
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
5 février 2020
51
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 :

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
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

Super.
On apprends peu à peu ..
Merci.

Résolu .
Messages postés
8
Date d'inscription
mardi 28 janvier 2020
Statut
Membre
Dernière intervention
31 janvier 2020

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 ??