IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel 2010-2016 Evenement cellule dans une plageRange


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 114
    Points
    114
    Par défaut Excel 2010-2016 Evenement cellule dans une plageRange
    Bonjour

    je viens sur le forum, afin d' avoir de l'aide, sur ce que je tente de faire.
    comme sur la capture d'écran prise ; le scénario est le suivant:

    je sélectionne, une plage range quelconque avec la souris; et par un for Each in.... dans la dite plage, je boucle afin de rentrer des valeurs; là ok. ( je sais faire.)

    par contre, en fin de plage comme vous pouvez le voir, " un évènement range du type " Private Sub Worksheet_Change(ByVal Target As Range)"
    se déclenche et demande ""Continuez la Macro En cours!...."
    à ce niveau, je sais faire par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox("Continuez la Macro En cours!....", vbOKCancel + vbInformation + vbDefaultButton1, "Macro") = vbOK then....
    mon problème, c'est que je n'arrive pas à dire a Excel, par une boucle , de déclencher "l'évènement range" dans la dernière cellule,
    à chaque ligne de la plage Range définis avec ma souris ( comme spécifié en 1,2,3,4,5 de ma capture ci-dessus)
    comment déterminer, la dernière cellule d'une ligne, dans une plageRange. ( comme sur la capture d'écran )

    Merci à tous vos démos, conseils et directives
    cordialement
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pas certain d'avoir bien compris ce que tu souhaites faire mais pour connaître la dernière cellule d'une ligne sélectionnée, tu peux te baser sur la propriété Count de la collection Columns comme

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 114
    Points
    114
    Par défaut
    Bonjour et merci de ta première piste

    ce que tu me proposes ne répond pas tout a fait au problème.

    si je rentre les valeurs successives dans la première ligne de la plage soit :1, 2,3,4,5,6,7 quand je rentre la valeur 7; j'ai l'évènement qui se déclenche , du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " Private Sub   Worksheet_Change(ByVal Target As Range)"
    et demande ""Continuez la Macro En cours!...." je sais faire par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "MsgBox("Continuez la Macro En cours!....", vbOKCancel + vbInformation + vbDefaultButton1, "Macro") = vbOK  then...."
    si je continus la saisie, de d'autres valeurs 8,9,10,11..... ect .. à chaque ligne de la plage; et en fin de celle-ci " Evènement déclenché.!!!..."; comme tu peux le voir sur la capture d'écran..

    cordialement

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour
    Je ne comprends rien à ce que tu exposes :
    - "l'évènement range" ne veut rien dire. Range est un objet et non un évènement
    -
    et par un for Each in.... dans la dite plage, je boucle afin de rentrer des valeurs; là ok. ( je sais faire.)

    par contre, en fin de plage comme vous pouvez le voir, " un évènement range du type Private Sub Worksheet_Change(ByVal Target As Range).
    se déclenche et demande ""Continuez la Macro En cours!...."
    est incompréhensible sans autres explications. Sauf à avoir inhibé les évènements (mais où est ton code, dans ce cas ?) l'évènement worksheet_Change se déclenche à chaque saisie

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 114
    Points
    114
    Par défaut
    bonsoir unparia,

    et merci d'avoir pris part à mon post

    certes tu as raison, je me suis mal expliqué dans les termes..

    "l'évènement range" ne veut rien dire. effectivement, c'est un objet.

    je faisais allusion à " l'évènement de la feuille " donc déclencher l'évènement quand la cellule est modifié ( saisie d'une valeur), dans ma plage. ( regarde la capture d'écran )

    tu me demandes

    l'évènement worksheet_Change se déclenche à chaque saisie ???
    je te réponds

    non, pas à chaque saisie; mais elle se déclenche, sur la saisie de la dernière cellule, à chaque fin ligne de ma plage Range.

    et comme je le montre sur ma " capture d'écran" , en fin de plage; donc dans la dernière cellule ou je la modifie par une saisie de valeur, je déclenche l'évènement par le code

    suivant

    Message recherché par l'évènement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Worksheet_Change (ByVal Target As Range)
    MsgBox("Continuez la Macro En cours!....", vbOKCancel + vbInformation + vbDefaultButton1, "Macro") = vbOK then  '????--> 
     '????? soit je continus la saisie, ou soit je l'arrête et je sors de la Macro
     
    End Sub
    ATTENTION c'est le but recherché.

    voici mon bout de code dans le qu'elle je cherchais a le faire.

    ( je suis un débutant en VBA )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Private function saisiValTablo()
    			Dim saisiVal As Range
    			Dim NbrColon As Integer
    			Dim dernierCell as Integer
    			NbrColon = PlagTablo.Columns.Count
    		with PlagTablo 
    		       for Each saisiVal in PlagTablo 
    			   saisiVal.value=Application.InputBox(prompt:="Une Valeur ", Type:=1)
    			      dernierCell=PlagTablo.End(xlToLeft).Column       '?????? ---> je bloque a ce niveau 
    			if NbrColon=dernierCell  And  MsgBox("Continuez la Macro En cours!....", vbOKCancel + vbInformation + vbDefaultButton1, "Macro") = vbOK then  '????--> 	
    		      Next saisiVal                                    '??? comment intégré l'évènement afin d'avoir le msg "Continuez la Macro En cours!.. avec les conditions citées plus haut
    			else
    			 with PlagTablo
    			 .ClearContents
    			 .ClearFormats
    			 Exit For
    			End IF
    		End Function
    PlagTblo est représentée par la capture d'écran en début de post; donc ma plage Range, déjà définis et dans lequel je boucle; et j'ai cette évènement comme j'ai tenté d'expliqué.

    en espérant n'avoir pas été trop confus

    cordialement

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    "l'évènement range" ne veut rien dire. effectivement, c'est un objet.
    voilà qui est fait.
    Je vais maintenant attendre que tu corriges et/ou précises cela
    je faisais allusion à " l'évènement de la feuille "
    (histoire de parler des mêmes choses)

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Je me demande par ailleurs comment tu peux écrire cela :
    je te réponds

    non, pas à chaque saisie; mais elle se déclenche, sur la saisie de la dernière cellule, à chaque fin ligne de ma plage Range.
    alors que le code montré, truffé d'erreurs en tous genres, ne modifie aucune cellule et ne risque donc pas de déclencher l'évènement worksheet_Change

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bon
    je déteste très fortement ce que je vais faire car il s'agit manifestement d'un petit exercice et que ce ne sera pas en copiant/collant que tu apprendras beaucoup
    Tu devrais commencer par te concentrer sur les notions de base (je te l'ai dit : ton code est truffé d'erreurs)

    Regarde ce que fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub CommandButton1_Click()
        Dim c As Range
       With Selection
          For Each c In .Cells
             c.Value = Application.InputBox(prompt:="Une Valeur ", Type:=1)
             If c.Column = .Column + .Columns.Count - 1 Then
                If MsgBox("Continuez la Macro En cours!....", vbYesNo + vbInformation + vbDefaultButton1, "Macro") = vbNo Then
                  .ClearContents
                  .ClearFormats 'on se demande d'ailleurs pourquoi, puisque tu n'as modifié que les valeurs
                  Exit For
                End If
             End If
           Next
      End With
    End Sub
    Sans la moindre utilisation du moindre évènement
    Sélectionne une plage de cellule et clique sur le bouton.
    analyse, comprends, adapte au besoin

  9. #9
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour amateur_will ,
    et bonjour unparia,

    will, je me permets d'insister sur le fait que : savoir poser sa question ou exposer son problème clairement, simplement et avec des précisions utiles,
    c'est plus important que le code.

    beaucoup de débutants n'arrivent pas à expliquer le mécanisme, la finalité...ce qui dénote un problème d'analyse
    et même moi le premier, il m'arrive de reprendre mon analyse et de m'expliquer à moi même ce que je cherche

    @+JP

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour mjpmjp
    Et au moins commencer à s'intéresser aux choses que l'on utilise, apprendre ce que sont les objets, les évènements, les procédures (routines simples, qui exécutent des instructions, et fonctions qui, elles, retournent des valeurs), le type, la portée et la déclaration des variables, les instructions, les méthodes, les propriétés ...
    C'est un minimum.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 282
    Points : 114
    Points
    114
    Par défaut
    bonjour à mjpmjp,
    et merci de ta réponse à se poste.

    Pour te répondre, unparia

    Dans tous se que tu as exposé, pour se "minimum"; je me retrousse les manches, pour essayer de me débrouillé , et assimiler les règles de Bases en VBA.
    j'ai quelques cours sur VBA que j'exploite; que j'ai remis sur la table.sur ça t'inquiète pas.

    Pour te répondre mjpmjp

    Je te rejoins, et c'est vrai, mal prendre le problème, pour ce que l'ont veut faire c'est aller dans le mur.
    et pourtant on m'a tellement dis de décomposer le dis problème, dans les quelque cours d'algorithmes que j'avais eu.
    certes, c'est le jour et la nuit quand on n'a un visuel en tête; et de sa mise en œuvre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     Private Sub CommandButton1_Click()
        Dim c As Range
       With Selection
          For Each c In .Cells
             c.Value = Application.InputBox(prompt:="Une Valeur ", Type:=1)
             If c.Column = .Column + .Columns.Count - 1 Then
                If MsgBox("Continuez la Macro En cours!....", vbYesNo + vbInformation + vbDefaultButton1, "Macro") = vbNo Then
                  .ClearContents
                  .ClearFormats 'on se demande d'ailleurs pourquoi, puisque tu n'as modifié que les valeurs  ' je te reponds
                  Exit For      ' tous mes excuses, a ce niveau là, Oui je la souhaite, puisque j'ai déjà un première macro en amont, qui aura tourner, et qui m'aura représenté mon Object selection 
                End If                ' avec des .borders.(colors, weight); et des Font, et Interior.Color...Ect  si je veux pas continuer la macro, j'efface le tous....
             End If
           Next
      End With
    End Sub
    Je me demande par ailleurs comment tu peux écrire cela :
    alors que le code montré, truffé d'erreurs en tous genres, ne modifie aucune cellule et ne risque donc pas de déclencher l'évènement worksheet_Change
    je te réponds; j'ai compris ta remarques; et revois ma façon d'avoir écris le code, dans sa forme la plus logique qu'il soit.

    Par contre, je vais décortiquer la ligne de code suivant que tu m'a écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     If c.Column = .Column + .Columns.Count - 1
    cette mise en œuvre, je ne l'ai pas trop bien compris avec le -1.


    quand tu me dis
    Je vais maintenant attendre que tu corriges et/ou précises cela
    (histoire de parler des mêmes choses)
    je te réponds
    je te rassure, nous parlons des mêmes choses; je faisais références à -->

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_Change(ByVal Target As Range)
       MsgBox "Worksheet_Change(ByVal Target As Range)"
     End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       MsgBox "Worksheet_SelectionChange(ByVal Target As Range)"
    End Sub
    je vais me pencher, à exploiter tes conseils dans se que je veux faire, et de bien posé le problème, comme me l'a dit mjpmjp

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/01/2014, 15h11
  2. Recherche d'une cellule dans une feuille Excel
    Par vuong1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/03/2007, 07h51
  3. nombre de cellule dans une colonne excel
    Par mahboub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/11/2006, 23h00
  4. Problème de lecture des cellules dans une feuille Excel
    Par wangjun dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2006, 09h35
  5. [Excel] choisir une cellule dans une formule
    Par arcane dans le forum Excel
    Réponses: 1
    Dernier message: 24/03/2006, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo