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 :

Parmi 3 cellules, une seule peut avoir une valeur différente de 0.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut Parmi 3 cellules, une seule peut avoir une valeur différente de 0.
    Bonjour !

    Considérons 3 cellules appelées A, B et C qui contiennent initialement le chiffre 0.
    L’utilisateur place une valeur dans A différente de 0.
    Puis, il place une autre valeur différente de 0 dans B, celle qu’il avait placée dans A passe alors automatiquement à 0.
    Si ensuite, il place une autre valeur dans C différente de 0, celle dans B passe à 0…etc

    Donc ne jamais avoir plus d’une cellule avec une valeur différente de 0.

    Qui veux bien m'aider à traduire en lignes informatiques cette idée ?

  2. #2
    Membre éclairé Avatar de tomy7
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 540
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    If Sheet1.Range("A1").Value > "0" Then
    Sheet1.Range("B1").Value = 0
    Sheet1.Range("C1").Value = 0
    End If
    End Sub
    tu fais pareil pour chaque cellule et c est bon je pense!

    est ce que ca te convient?

  3. #3
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    voici une fonction générique qui s'applique à une plage de cellules nommée "toto", ça peut évidemment être adapté.

    à mettre sur le code de la feuille concernée
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim c As Range
    On Error GoTo smartExit
     
    Application.EnableEvents = False
    If Intersect(Target, Range("toto")) Then
        If Target.Value <> 0 Then
            For Each c In Range("toto").Cells
                If c.Address <> Target.Address Then
                    c.Value = 0
                End If
            Next c
        End If
    End If
     
    smartExit:
    Application.EnableEvents = True
     
    Set c = Nothing
    End Sub

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Merci cela marche impec !!!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    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)
    Dim A As Double
     
    If Target > 0 Then
        A = Target.Value
        Cells(1, 1) = 0
        Cells(1, 2) = 0
        Cells(1, 3) = 0
        Target = A
    End If
     
    End Sub

  6. #6
    Membre éclairé Avatar de tomy7
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 540
    Par défaut re
    tu active sa avec un raccourci ou avec un bouton et c fini :
    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 test()
    If Sheet1.Range("A1").Value > 0 Then
    Sheet1.Range("B1").Value = 0
    Sheet1.Range("C1").Value = 0
    End If
     
    If Sheet1.Range("B1").Value > 0 Then
    Sheet1.Range("A1").Value = 0
    Sheet1.Range("C1").Value = 0
    End If
     
    If Sheet1.Range("C1").Value > 0 Then
    Sheet1.Range("B1").Value = 0
    Sheet1.Range("A1").Value = 0
    End If
    End Sub
    mais le code de cafeine est peut meilleur ....ca depend de ton besoin!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Merci pour les réponses rapides mais j'ai encore un petit problème.

    En court : Y’a moyen de mettre un toto 2 ?

    En long : Avec Range("A1:C1", "A2:C2") par exemple, il me remet à zero les valeurs sur les deux lignes alors qu’il faudrait qu’il le fasse ligne par ligne.

    Any help, please.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Str As String
     
    If Target <> 0 Then
        str = Target.Value
        Cells(target.row, 1) = 0
        Cells(target.row, 2) = 0
        Cells(target.row, 3) = 0
        Target = str
    End If
     
     
    End Sub

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

Discussions similaires

  1. avoir une seule instance d'une application sur un reseau
    Par pirbd dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 28/01/2010, 19h05
  2. Réponses: 11
    Dernier message: 06/12/2005, 08h23
  3. [JUnit] Avoir une seule instance
    Par hocinema dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 25/10/2005, 15h48
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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