XL 2010 "si" référence circulaire

Océane-33

XLDnaute Nouveau
Bonjour ,

Je n 'arrive pas à trouver la bonne formule, si vous pouviez m 'aider..
Lorsque que je remplie une cellule, si celle du dessus n 'a pas été saisie ( valeur inconnue ou oubli )
qu'elle prenne par défaut la cellule au dessus d'elle ( la dernière valeur connue )( ex je saisie en A5, la cellule A4 n 'est pas remplie donc A4=A3
1 ) je tombe sur une référence circulaire .
2 ) la formule appliquée à toutes les cellules ,dont celles à venir ( ou pas si il y a un oubli ) me marque faux..
Merci pour votre aide.
 

Pièces jointes

  • CONDITION PB REF CIRCULAIRE.xlsx
    13.5 KB · Affichages: 12
Solution
Re-Bonjour
En attendant, un exemple valable sur un ensemble de colonnes déterminées (avec la date en colonne A)
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la modif ne porte que sur une cellule :
    If Target.Count = 1 Then
        With Target
            Select Case .Column
                'si la modification porte sur une des colonnes données par les N° ci-dessous
                Case 2, 3, 5, 10 To 13, 15 To 21
                    'Si la cellule de la colonne A est une date (sur la même ligne)
                    If VarType(.Offset(, -(.Column - 1))) = vbDate Then
                        Application.EnableEvents = False...

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @Océane-33
Difficile de traiter ton cas avec une formule dans la colonne B et sans référence circulaire ...
Mais tu peux essayer avec l'événement "Change" de ta feuille (Target étant la cellule objet de changement)
Dans le code de la feuille :
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la modif ne porte que sur une cellule en colonne B (2) :
    If Target.Count = 1 And Target.Column = 2 Then
        'Si la cellule voisine dans la colonne A est une date :
        If VarType(Target.Offset(0, -1)) = vbDate Then
            Application.EnableEvents = False
            'Si la celule du dessus est vide, la remplir avec la valeur de la cellule 2 lignes au-dessus :
            If Target.Offset(-1) = "" Then Target.Offset(-1) = Target.Offset(-2)
            Application.EnableEvents = True
        End If
    End If
End Sub
Faire Alt F11 pour voir le code VBA:
1649667417253.png


Voir le fichier joint
Amicalement
Alain
 

Pièces jointes

  • si référence circulaire.xlsm
    13.9 KB · Affichages: 2

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re-Bonjour
En attendant, un exemple valable sur un ensemble de colonnes déterminées (avec la date en colonne A)
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la modif ne porte que sur une cellule :
    If Target.Count = 1 Then
        With Target
            Select Case .Column
                'si la modification porte sur une des colonnes données par les N° ci-dessous
                Case 2, 3, 5, 10 To 13, 15 To 21
                    'Si la cellule de la colonne A est une date (sur la même ligne)
                    If VarType(.Offset(, -(.Column - 1))) = vbDate Then
                        Application.EnableEvents = False
                        'si la cellule du dessus est vide, la remplir avec la valeur de la cellule 2 lignes au-dessus
                        If .Offset(-1) = "" Then .Offset(-1) = .Offset(-2)
                        Application.EnableEvents = True
                    End If
                Case Else
                     Exit Sub
            End Select
        End With
    End If
End Sub

Amicalement
Alain
 

Pièces jointes

  • si référence circulaire 2.xlsm
    15.6 KB · Affichages: 4

Océane-33

XLDnaute Nouveau
Re-Bonjour
En attendant, un exemple valable sur un ensemble de colonnes déterminées (avec la date en colonne A)
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la modif ne porte que sur une cellule :
    If Target.Count = 1 Then
        With Target
            Select Case .Column
                'si la modification porte sur une des colonnes données par les N° ci-dessous
                Case 2, 3, 5, 10 To 13, 15 To 21
                    'Si la cellule de la colonne A est une date (sur la même ligne)
                    If VarType(.Offset(, -(.Column - 1))) = vbDate Then
                        Application.EnableEvents = False
                        'si la cellule du dessus est vide, la remplir avec la valeur de la cellule 2 lignes au-dessus
                        If .Offset(-1) = "" Then .Offset(-1) = .Offset(-2)
                        Application.EnableEvents = True
                    End If
                Case Else
                     Exit Sub
            End Select
        End With
    End If
End Sub

Amicalement
Alain
 

Discussions similaires

Réponses
2
Affichages
258

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390