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 code vba modification cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut Problème code vba modification cellules
    Bonjour,

    je rencontre un souci, avec un code Vba "pour les modifications cellules"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then 
    MsgBox "attention modification sup" 
    End If 
    End Sub
    Ce code est très bien, le seul soucie ces que je voudrais que le msg s'affiche qu'a la deuxième modifications, ou quand on veut supprimé la cellule !

    Cela est t'il possible ?


    Merci par avance

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    supprimer veut-il dire que tu effaces le contenu de la cellule ? Si c'est bien le cas, tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Application.Intersect(Target, Range("A1")) Is Nothing And Target.Value = "" Then MsgBox "effacé"
    je voudrais que le msg s'affiche qu'a la deuxième modifications
    Ca devient un peu plus compliqué ... Je te propose quelque chose, mais je ne sais pas du tout si c'est efficace. Tu peux utiliser une autre feuille (nommons la "comptes"). Grace à l'évènement Change, si tu changes la cellule A2 par ex., tu ajoutes 1 à la cellule A2 de la feuille compte. Ensuite, si la valeur de la cellule A2 est supérieure strictement à 1 alors tu affiches la msgbox.
    Mais ça risque d'être très lourd comme processus ....

  3. #3
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    merci pour ta réponse !

    Excuse moi je suis débutant en VBA

    Donc le code VBA, copier / coller sur ma feuille "worksheet"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing And Target.Value = "" Then MsgBox "effacé"
    End If
    End Sub
    Cela me fais une erreur

    Oui ma question c'était bien pour quand tu veut effacé la cellule, qu'il y a un Msgbox qui préviens que le contenue va être effacé !

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Attention 2 syntaxes possibles de la condition If :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ma_condition Then l_action
    '-------- OU --------
    If ma_condition Then
        l_action
    End If

  5. #5
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    D'accord je ne sais pas merci pour l'info !

    Mes je ne sais pas ou le placé dans le code


    peut tu m'aidé à rédigé le code ?

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    En fait dans mon post #4 je t'explique ce qui est faux dans le post #3.
    Ce N'est PAS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing And Target.Value = "" Then MsgBox "effacé"
    End If
    End Sub

    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing And Target.Value = "" Then MsgBox "effacé"
    End Sub
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing And Target.Value = "" Then 
        MsgBox "effacé"
    End If
    End Sub
    Essaie déjà ceci pour voir si cela correspond à ce que tu veux.

    Pour la suite, si on essaie de faire ce que j'ai proposé plus tôt :
    Je te propose quelque chose, mais je ne sais pas du tout si c'est efficace. Tu peux utiliser une autre feuille (nommons la "comptes"). Grace à l'évènement Change, si tu changes la cellule A2 par ex., tu ajoutes 1 à la cellule A2 de la feuille compte. Ensuite, si la valeur de la cellule A2 est supérieure strictement à 1 alors tu affiches la msgbox.
    Je sais pas trop pourquoi je t'ai parlé de A2, mais en fait c'est avec A1 qu'on travaille ...
    On continue à utiliser l'évènement change. Cette fois-ci, on effectue les operations suivantes : si target change, alors
    1. On ajoute 1 à la même cellule que target mais dans la feuille "compte"
    2. On lance la msgbox si la cellule correspondante à target dans la feuille "compte" > 1.

    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)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then 
        With Sheets("compte").Range("A1")
            .Value = .Value + 1                     '<--- on ajoute 1 au compte de modifications.
            If .Value > 1 Or Target.Value="" Then MsgBox "attention modification sup"                '<--- on lance la msgbox si le compte > 1 ou si on a fait une suppression dans A1
        End With
    End If
    End Sub

  7. #7
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    bonjour

    Je te remercie pour ces codes Vba, cela ma bien aidé : P
    Par contre le code Vba que j'ai choisi ne prend pas en compte les cellules fusionnées !
    Aurais-tu une astuce ?
    Car il me donne ce code "erreur d'exécution '13' incompatibilité de type"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A19:yc51")) Is Nothing And Target.Value = "" Then
        MsgBox "effacé"
    End If
    End Sub
    En gros pas pourvoir supprimé les données de toute la feuille sans qu'il y a un msg

    merci a toi par avance

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub Worksheet_Change(ByVal Target As Range)
    Static NbCel as long,modif as boolent
    If NbCel>Application.WorksheetFunction.CountA(Target.parent.usedrange) then
    Mesgbox "sup"
    modif=false
    Else
    If modif= true then Msgbox "modifier"
    modif= not modif
    End if
    NbCel=Application.WorksheetFunction.CountA(Target.parent.usedrange)
     
    End Sub

  9. #9
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub Worksheet_Change(ByVal Target As Range)
    Static NbCel as long,modif as boolent
    If NbCel>Application.WorksheetFunction.CountA(Target.parent.usedrange) then
    Mesgbox "sup"
    modif=false
    Else
    If modif= true then Msgbox "modifier"
    modif= not modif
    End if
    NbCel=Application.WorksheetFunction.CountA(Target.parent.usedrange)
     
    End Sub
    je te rermerci e pour ta réponse

    Ca me donne un code erreur

    Cela ne marche pas!!
    tu le copie dans "thisworbook" rien ne ce passe !!
    Mes quand je copie dans la feuille code erreur "erreur de compilation type défini par l'utilisateur non défini

  10. #10
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Attention, erreur de frappe :
    Mesgbox "sup" ---> MsgBox "sup"

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merci riaolle.
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
     NbCel = Application.WorksheetFunction.CountA(Sheets("Feuil1").UsedRange)
    End Sub
    Code ThisWorkbook.Feuil1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Cells_Change Target
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public NbCel As Long
    Public Sub Cells_Change(ByVal Target As Range)
    Static modif As Boolean
    If NbCel > Application.WorksheetFunction.CountA(Target.Parent.UsedRange) Then
        MsgBox "sup"
    modif = False
    Else
        If modif = True Then MsgBox "modifier":
        modif = Not modif
    End If
    NbCel = Application.WorksheetFunction.CountA(Target.Parent.UsedRange)
    End Sub
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 20/07/2017 à 11h51.

  12. #12
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Désoler pour le retard J'etait over bouquet..
    Je tiens à vous remercie de votre aide !!
    Heureusement qu'il y a des personnes comme vous sur les forums pour aidé les novices sans contrepartie.

    Merci et encore :-)

    Je vous tiens au jus

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par adrien1987 Voir le message
    over bouquet..

    Je vous tiens au jus
    Faire passer Overbooked (surchargé de travail) à au-dessus d'un bouquet, faut le faire.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  14. #14
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Faire passer Overbooked (surchargé de travail) à au-dessus d'un bouquet, faut le faire.
    Désoler Siri "iphone" a mal compris !!

  15. #15
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Merci riaolle.
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
     NbCel = Application.WorksheetFunction.CountA(Sheets("Feuil1").UsedRange)
    End Sub
    Code ThisWorkbook.Feuil1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Cells_Change Target
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public NbCel As Long
    Public Sub Cells_Change(ByVal Target As Range)
    Static modif As Boolean
    If NbCel > Application.WorksheetFunction.CountA(Target.Parent.UsedRange) Then
        MsgBox "sup"
    modif = False
    Else
        If modif = True Then MsgBox "modifier":
        modif = Not modif
    End If
    NbCel = Application.WorksheetFunction.CountA(Target.Parent.UsedRange)
    End Sub
    Bonjour a toi

    peut-on rajouter une icône attention, quand le texte box apparaît
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public NbCel As Long
    Public Sub Cells_Change(ByVal Target As Range)
    Static modif As Boolean
    If NbCel > Application.WorksheetFunction.CountA(Target.Parent.UsedRange) Then
        MsgBox "Vous allez supprimé les données, pour revenir en arriére CTRL+Z"
    modif = False
    Else
        If modif = True Then MsgBox "Attention cette cellule a déja des données":
        modif = Not modif
    End If
    NbCel = Application.WorksheetFunction.CountA(Target.Parent.UsedRange)
    End Sub
    Merci

  16. #16
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    C'est bon j'ai trouvé !!

    Par contre j'aimerais sauter une ligne dans le msg !

    C'est possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rep = MsgBox("Vous allez supprimer les données, pour récupérer les données appuyées simultanément sur  CTRL+Z", vbOKOnly + vbExclamation, "ATTENTION")

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rep = MsgBox("Vous allez supprimer les données, " & VbCrlf & "pour récupérer les données appuyées simultanément sur  CTRL+Z", vbOKOnly + vbExclamation, "ATTENTION")

  18. #18
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,
    Oui avec quelque chose qui ressemblerait à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim texte as string
    dim enhaut as string
    dim enbas as string
    enhaut = "Vous allez supprimer les données. Pour récupérer les données, "
    enbas = "appuyez simultanément sur  CTRL+Z."
    texte = enhaut & vbnewline & enbas
    Rep = MsgBox(texte, vbOKOnly + vbExclamation, "ATTENTION")
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  19. #19
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Merci à vous
    Je test cela lundi matin à la première heure
    Cdlt

  20. #20
    Membre du Club
    Homme Profil pro
    aéronautique
    Inscrit en
    Juillet 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : aéronautique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    Merci riaolle.
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
     NbCel = Application.WorksheetFunction.CountA(Sheets("Feuil1").UsedRange)
    End Sub
    Code ThisWorkbook.Feuil1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Cells_Change Target
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public NbCel As Long
    Public Sub Cells_Change(ByVal Target As Range)
    Static modif As Boolean
    If NbCel > Application.WorksheetFunction.CountA(Target.Parent.UsedRange) Then
        MsgBox "sup"
    modif = False
    Else
        If modif = True Then MsgBox "modifier":
        modif = Not modif
    End If
    NbCel = Application.WorksheetFunction.CountA(Target.Parent.UsedRange)
    End Sub
    Bonjour a vous

    Le code VBA marche nickel, le seul souci ces qu'il ne prend pas en compte les cellules fusionnées.
    Une ligne sur deux le msg textbox apparaît "modif", mais il n'y a rien comme les cellules sont vides

    Voir fichier joint:

    test.xls

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème Code VBA, ajout non désiré sur bouton
    Par vivicente dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/06/2008, 17h33
  2. Problème code VBA
    Par nanot dans le forum VBA Access
    Réponses: 21
    Dernier message: 04/06/2008, 15h24
  3. Problème code vba
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2008, 12h03
  4. Problème code VBA :)
    Par Freygolow dans le forum Access
    Réponses: 4
    Dernier message: 17/05/2007, 15h43

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