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 :

Modification d'une cellule sous deux conditions [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut Modification d'une cellule sous deux conditions
    Bonjour le forum,

    je test les valeurs des cellules d'une colonne N-1 pour renseigner la valeur de la cellule de la colonne N. La position de la colonne N est variable.
    Pour cela j'utilise le code suivant qui fonctionne ;

    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
    Public Sub taches_faites()
    'remplissage des taches terminées
    Dim Real As Range, CellReal As Range
    Application.ScreenUpdating = False
    'On Error Resume Next
     
    If ActiveCell.Value = "Réalisé" Then
        Set Real = Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(100, 0))
         For Each CellReal In Real
            If CellReal.Offset(0, -1) <> "" Then
               CellReal.Value = "Fait"
            End If
          Next CellReal
        Set Real = Nothing
     
    Else: MsgBox ("veuillez sélectionner une case : Réalisé ")
          ActiveCell.Offset(0, 1).Select
    End If
     
    End Sub
    maintenant j' aimerais ajouter une deuxiéme condition qui est la valeur correspondante de la même ligne mais dans la colonne fixe D
    en traduction :
    If CellReal.Offset(0, -1) <> "" and range ( colonne (D),row de CellReal).value ="blabla" Then execution du code

    Comme la position de ma colonne contenant CellReal est variable, je ne peux pas utiliser la propriété Offset.
    après plusieurs essais infructueux, je m'en suis tirer avec une formule dans le code suivant :

    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
    Public Sub taches_faites()
    'remplissage des taches terminées
    Dim Real As Range, CellReal As Range
    Application.ScreenUpdating = False
    'On Error Resume Next
     
    If ActiveCell.Value = "Réalisé" Then
        Set Real = Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(100, 0))
         For Each CellReal In Real
            If CellReal.Offset(0, -1) <> "" Then
                If CellReal = "" Then
                    With CellReal
                        .FormulaR1C1 = "=IF(AND(RC[-1]>0.5,RC4=R2C5),""Fait"","""")"
                        .Value = .Value
                    End With
                End If
            End If
          Next CellReal
        Set Real = Nothing
     
    Else: MsgBox ("veuillez sélectionner une case : Réalisé ")
          ActiveCell.Offset(0, 1).Select
    End If
     
    End Sub
    mais je pense que je peux mettre directement les deux conditions dans le code sans pour cela utiliser de formule. Toute l'astuce se trouvant dans la référence absolue de la colonne D et la référence relative de CellReal

    Si quelqu'un pouvait m'indiquer une piste...
    merci beaucoup.

    Cordialement
    Dom

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    hello,
    tu peux essayer un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If CellReal.Offset(0, -1) <> "" And Range("D" & CellReal.Row).Value = "blabla" Then
    Ami calmant, J.P

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Bonsoir

    Merci bien Jurassic pork, ton code fonctionne parfaitement, en fait j'avais essayé un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CellReal.Offset(0, -1) <> "" And Range("D", (CellReal.Row)).Value = Range("E2").Value Then
    avec une virgule et des parenthèses mais cela buggait.
    Je connaissais le séparateur "," mais pas le "&" , on l'utilise quand l'abscisse ou l'ordonnée sont définis par un nom c'est ça ?

    Merci encore je mets un résolu.

    Dom

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Re bonsoir,

    Pour ceux que cela interresses, on peut encore simplifier le code, voici donc le code final :

    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
    Public Sub taches_faites()
    'remplissage des taches terminées
    Dim Real As Range, CellReal As Range
    Application.ScreenUpdating = False
    On Error Resume Next
     
    If ActiveCell.Value = "Réalisé" Then
        Set Real = Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(100, 0))
         For Each CellReal In Real
            If CellReal.Value = "" And CellReal.Offset(0, -1) <> "" And Range("D" & CellReal.Row).Value = Range("E2").Value Then
                CellReal.Value = "Fait"
            End If
          Next CellReal
        Set Real = Nothing
     
    Else: MsgBox ("veuillez sélectionner une case : Réalisé ")
          ActiveCell.Offset(0, 1).Select
    End If
     
    End Sub
    Bon forum à tous !

    Dom

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

Discussions similaires

  1. Copier une ligne sous deux conditions
    Par Yullll dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/04/2016, 11h24
  2. Réponses: 7
    Dernier message: 29/01/2016, 13h58
  3. [Toutes versions] compter nombre de cellules sous deux conditions
    Par javiste dans le forum Excel
    Réponses: 2
    Dernier message: 14/10/2014, 18h17
  4. [XL-2003] faire Clignoter une cellule sous condition
    Par LaPanic dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/06/2009, 18h49
  5. Interdire la modification d'une cellule si condition respectée.
    Par Devmddi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2009, 11h23

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