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 :

Problème suppression de valeurs de cellules [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Problème suppression de valeurs de cellules
    Bonjour à tous,

    Alors voilà, je galère depuis quelques jours après de nombreuses recherches sur le net.
    Voici mon problème. Lors de l'exécution de ma procédure j'ai écrit une instruction pour effacer le contenu de certaines cellules (ligne 36). Le souci c'est qu'à l'arrivée de cette instruction, le code retourne à la procédure précédente en boucle (ligne 11) hors je souhaiterais que la procédure continue...why ?

    merci d'avance !

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim choix As String, nom As String, prénom As String, entreprise As String, heure As String, jour As String, sup As String
    choix = ActiveCell.Value
    nom = ActiveCell.Offset(0, -2).Value
    prénom = ActiveCell.Offset(0, -1).Value
    entreprise = ActiveCell.Offset(0, -5).Value
    heure = ActiveCell.Offset(0, -6)
    jour = ActiveCell.Offset(0, -7)
     
            Select Case choix
                Case Is = "Remplacé (absent)"
                        confirm_rempl = MsgBox("Voulez-vous remplacer ce RDV ?", vbYesNo, "Confirmation")
                        If confirm_rempl = vbNo Then ActiveCell.ClearContents
                        If confirm_rempl = vbYes Then
                            With Sheets("Absent")
                                .Rows("3").Insert
                                .Range("j3") = prénom
                                .Range("i3") = nom
                                .Range("h3") = heure
                                .Range("g3") = jour
                            End With
     
                            With ActiveCell.Offset(0, -3)
                                .ClearComments
                                .AddComment
                                .Comment.Visible = True
                                .Comment.Text Text:=nom & " " & prénom & " " & " " & entreprise & " " & "absent au RDV !"
                            End With
     
                        End If
     
                MsgBox ("Maintenant, veuillez renseigner les champs du nouveau RDV")
     
                Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -5)).ClearContents
     
                Case Is = "Absent !"
                    confirm_absent = MsgBox("La personne ne s'est pas présenté au RDV ?", vbYesNo, "Confirmation")
                        If confirm_absent = vbNo Then ActiveCell.ClearContents
                        If confirm_absent = vbYes Then
                            With Sheets("Absent")
                                .Rows("3").Insert
                                .Range("j3") = prénom
                                .Range("i3") = nom
                                .Range("h3") = heure
                                .Range("g3") = jour
                            End With
                        End If
     
                Case Is = ""
                    ActiveCell.Offset(0, -3).ClearComments
     
                Case Else: Exit Sub
     
     
            End Select
     
    End Sub

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Mikangel, bonjour le forum,

    Chaque fois, dans une événementielle Change, que tu modifies une ou plusieurs cellules, la boucle est relancée. Pour éviter cela EnableEvents = False au début du code et ne surtout pas oublier de remetrte EnableEvents = True en fin de code. Cela donne :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim choix As String, nom As String, prénom As String, entreprise As String, heure As String, jour As String, sup As String
     
    choix = ActiveCell.Value
    nom = ActiveCell.Offset(0, -2).Value
    prénom = ActiveCell.Offset(0, -1).Value
    entreprise = ActiveCell.Offset(0, -5).Value
    heure = ActiveCell.Offset(0, -6)
    jour = ActiveCell.Offset(0, -7)
     
    EnableEvents = False
    Select Case choix
        Case Is = "Remplacé (absent)"
            confirm_rempl = MsgBox("Voulez-vous remplacer ce RDV ?", vbYesNo, "Confirmation")
            If confirm_rempl = vbNo Then ActiveCell.ClearContents
                If confirm_rempl = vbYes Then
                    With Sheets("Absent")
                    .Rows("3").Insert
                    .Range("j3") = prénom
                    .Range("i3") = nom
                    .Range("h3") = heure
                    .Range("g3") = jour
                End With
                With ActiveCell.Offset(0, -3)
                    .ClearComments
                    .AddComment
                    .Comment.Visible = True
                    .Comment.Text Text:=nom & " " & prénom & " " & " " & entreprise & " " & "absent au RDV !"
                End With
            End If
            MsgBox ("Maintenant, veuillez renseigner les champs du nouveau RDV")
            Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -5)).ClearContents
        Case Is = "Absent !"
            confirm_absent = MsgBox("La personne ne s'est pas présenté au RDV ?", vbYesNo, "Confirmation")
            If confirm_absent = vbNo Then ActiveCell.ClearContents
            If confirm_absent = vbYes Then
                With Sheets("Absent")
                    .Rows("3").Insert
                    .Range("j3") = prénom
                    .Range("i3") = nom
                    .Range("h3") = heure
                    .Range("g3") = jour
                End With
            End If
        Case Is = ""
            ActiveCell.Offset(0, -3).ClearComments
        Case Else
            EnableEvents = True
            Exit Sub
    End Select
    EnableEvents = True
    End Sub
    Par contre, je ne comprends pas l'utilisation de Activecell. La logique voudrait que tu utilises Target qui correspond à la cellule modifiée.

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci Thautheme !!!
    Là j'ai pas encore essayé. Je te dis ça dès que j'aurais modifié mon code.
    J'avoue je débute totalement en programmation. J'ai encore beaucoup à apprendre.
    Pour en revenir à mon code, j'ai une liste déroulante commune sur plusieur cellules. Je veux que selon le choix de la liste telle ou telle action se lance automatiquement.

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    bon bah j'ai essayé avec cette modification mais j'ai toujours le même souci ...
    Quand l'exécution du code arrive à la ligne 32 Range(ActiveCell.Offset(0, -1), ActiveCell.Offset(0, -5)).ClearContents on retourne à la ligne 14 confirm_rempl = MsgBox("Voulez-vous remplacer ce RDV ?", vbYesNo, "Confirmation"...en boucle.
    Pour arrêter la boucle je suis obligé de cliquer sur "non" à la msgbox.

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai remplacé tous mes "activecell" par des "target" et maintenant ça fonctionne
    Encore merci pour l'aide !!!
    je vais essayer de comprendre la différence entre "target" et "activecell" parce que j'avoue que ce n'est pas très clair pour moi

  6. #6
    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 943
    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 943
    Points : 28 942
    Points
    28 942
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour bien comprendre les procédures événementielles de l'objet feuille https://silkyroad.developpez.com/VBA/EvenementsFeuille/
    je vais essayer de comprendre la différence entre "target" et "activecell" parce que j'avoue que ce n'est pas très clair pour moi
    Target et ActiveCell sont deux objets Range

    Dans les procédures événementielles l'objet Target est la cellule ou la plage de cellules qui est concerné par l'événement (sélectionné, modifié, etc.) alors que ActiveCell comme son nom l'indique est la cellule active.
    Ainsi lorsque tu sélectionnes une plage de cellules, il y a une cellule qui est active (Dans A2:C30, si la sélection a commencé de A2, c'est celle-ci qui est la cellule active

    Rien de tel qu'un bon test exemple
    Code à placer dans le module d'une feuille et ensuite sélectionner une plage de cellules de cette feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      MsgBox "Target " & Target.Address & vbCrLf & "Active " & ActiveCell.Address
    End Sub

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Désolé, je reviens un peu tardivement.
    Merci pour toutes ces explications. J'ai bien réussi à comprendre avec ces explications ;-)
    Mon code fonctionne bien mieux du coup.

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

Discussions similaires

  1. [XL-2003] Problème pour récuperer la valeur de cellules
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2010, 10h01
  2. [MySQL] Problème suppression valeur avec condition
    Par stefsas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/02/2010, 03h40
  3. [Toutes versions] problème pour regrouper des valeurs de cellules tout en respectant l'ordre
    Par songs_of_liberty dans le forum Excel
    Réponses: 5
    Dernier message: 16/04/2009, 18h43
  4. Problème de valeur de cellule diabolique !
    Par thibaut.poullain dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/02/2008, 15h52
  5. Problème sur un test de valeur de cellule
    Par nolive915 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/04/2007, 13h40

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