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

Résolu
DanGg Messages postés 8 Statut Membre -  
DanGg Messages postés 8 Statut Membre -
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

  1. danielc0 Messages postés 2176 Date d'inscription   Statut Membre Dernière intervention   286
     
    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
    0
  2. DanGg Messages postés 8 Statut Membre
     
    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
    0
    1. danielc0 Messages postés 2176 Date d'inscription   Statut Membre Dernière intervention   286
       
      " 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
      0
  3. DanGg Messages postés 8 Statut Membre
     
    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')
    0
    1. danielc0 Messages postés 2176 Date d'inscription   Statut Membre Dernière intervention   286
       
      Oui, bien sûr, volontiers.

      Daniel
      0
  4. DanGg Messages postés 8 Statut Membre
     
    Comment fait-on pour l'envoyer ? je cherche réponse partout sur le site sans trouver
    0
    1. danielc0 Messages postés 2176 Date d'inscription   Statut Membre Dernière intervention   286
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. DanGg Messages postés 8 Statut Membre
     
    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.
    0
    1. danielc0 Messages postés 2176 Date d'inscription   Statut Membre Dernière intervention   286
       
      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
      0
  7. DanGg Messages postés 8 Statut Membre
     
    Super.
    On apprends peu à peu ..
    Merci.

    Résolu .
    0
  8. DanGg Messages postés 8 Statut Membre
     
    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 ??
    0