Référence circulaire

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Y
Yoyo01000
Membre fidèle
Membre fidèle
Messages : 201
Appréciations reçues : 5
Inscrit le : 19 décembre 2018
Version d'Excel : 2016

Message par Yoyo01000 » 24 janvier 2019, 08:08

Bonjour le forum,
je suis confronté à une formule, dont je n'ai pas trouvée mieux, qui me renvoie une référence circulaire et vous allez vite comprendre pourquoi : =SI(A2="";"";SI(F2<>"";F2;MAINTENANT()))

En fait, ce que je cherche à faire, c'est d'inscrire la date du jour en colonne F quand il y a une saisie dans la colonne A, et faire en sorte que la date dans F reste figée.
AF.PNG
Autre demande : je voudrais que quand la colonne K est renseignée, figer le ''X'' dans les colonnes H ou I ou J :

HIJK.PNG
Par avance, merci de vous être penché sur ma requête :)
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'745
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 24 janvier 2019, 08:19

Bonjour,
Il faut procéder avec une macro événementielle (VBA) pour le résultat.
Merci de joindre un fichier.
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Y
Yoyo01000
Membre fidèle
Membre fidèle
Messages : 201
Appréciations reçues : 5
Inscrit le : 19 décembre 2018
Version d'Excel : 2016

Message par Yoyo01000 » 24 janvier 2019, 08:26

Fichier en PJ.

Pour la macro, possibilité de la dissocier en la mettant dans la réponse du forum ?

La mettre dans un fichier xlsm ne m'arrange pas car mon entreprise bloque toutes les macros de fichiers téléchargés depuis le web.
Remontée de problèmes 2019.xlsm
(109.26 Kio) Téléchargé 9 fois
Merci
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'476
Appréciations reçues : 428
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 24 janvier 2019, 10:58

Bonjour,

une proposition,

mettre le code dans le module de la feuille RDP TL1
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:K")) Is Nothing Then
        If Target.Row > 1 And Target.Column <> 6 And Cells(Target.Row, "F") = "" Then
            Application.EnableEvents = False
            Cells(Target.Row, "F") = Now()
            Application.EnableEvents = True
        End If
    End If
End Sub
Y
Yoyo01000
Membre fidèle
Membre fidèle
Messages : 201
Appréciations reçues : 5
Inscrit le : 19 décembre 2018
Version d'Excel : 2016

Message par Yoyo01000 » 24 janvier 2019, 11:49

Merci pour le code mais je n'arrive pas à le faire fonctionner, il me demande un nom de macro !
Macro.PNG
Et si j'en rentre un et le crée, bien évidemment il se crée dans "Modules" avec
Sub macro()

End Sub
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'941
Appréciations reçues : 403
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 24 janvier 2019, 11:51

Yoyo01000 a écrit :
24 janvier 2019, 11:49
Merci pour le code mais je n'arrive pas à le faire fonctionner, il me demande un nom de macro !
Bonjour !

La macro s'exécute automatiquement à chaque changement de sélection dans la feuille (voir cours : https://www.excel-pratique.com/fr/vba/e ... asseur.php), si ce changement à lieu dans les colonnes A à K. Donc pas de bouton, pas d’exécution manuelle...
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'745
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 24 janvier 2019, 11:52

Re,
Bonjour h2so4
Je te fais la totale.
Ces procédures sont à copier dans ThisWorkbook de ton classeur.
Les données sont sous forme de tableaux. J'ai supprimé la colonne Date (aujourdhui()).
Pour finaliser la chose, on peut protéger les feuilles pour empêcher toute modification incongrue !...
Les procédures sont à copier dans le module ThisWorkbook du classeur.
A tester dans son ensemble.
A te relire.
Cdlt.
Remontée de problèmes 2019.xlsm
(30.81 Kio) Téléchargé 7 fois
Remontée de problèmes 2019.xlsx
(16.93 Kio) Téléchargé 6 fois
Option Explicit

Dim lo As ListObject, lr As ListRow
Dim lCol As Long, lRow As Long
Dim dt As Date

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Select Case Sh.Name
        Case "RdP TL1", "RdP TL2":
            On Error GoTo err_Handler
            Application.EnableEvents = False
            Set lo = Sh.ListObjects(1)
            With lo
                For Each lr In .ListRows
                    If Not IsEmpty(lr.Range.Cells(1, 1)) And IsEmpty(lr.Range.Cells(1, 10)) Then
                        lr.Range.Cells(1, 7).Resize(, 3).ClearContents
                        dt = Date
                        Select Case dt - lr.Range.Cells(1, 6)
                            Case Is <= 7: lr.Range.Cells(1, 7).Value = "X"
                            Case Is < 31: lr.Range.Cells(1, 8).Value = "X"
                            Case Else: lr.Range.Cells(1, 9).Value = "X"
                        End Select
                    End If
                Next lr
            End With
        Case Else:
    End Select

exit_Handler:
    Application.EnableEvents = True
    Set lo = Nothing
    Exit Sub

err_Handler:
    MsgBox "Erreur : " & Err.Number & Chr(10) & Err.Description
    Resume exit_Handler

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Select Case Sh.Name
        Case "RdP TL1", "RdP TL2"
            On Error GoTo err_Handler
            Application.EnableEvents = False
            If Target.ListObject Is Nothing Then Exit Sub
            If Target.Count > 1 Then Exit Sub
            Set lo = Sh.ListObjects(1)
            lCol = Target.Column - lo.HeaderRowRange.Column + 1
            lRow = Target.Row - lo.HeaderRowRange.Row
            Set lr = lo.ListRows(lRow)
            Select Case lCol
                Case 1: If Not IsEmpty(Target) Then Target.Offset(, 5).Value = Date
            End Select
            dt = Date
            Select Case dt - lr.Range.Cells(1, 6)
                Case Is <= 7: lr.Range.Cells(1, 7).Value = "X"
                Case Is < 31: lr.Range.Cells(1, 8).Value = "X"
                Case Else: lr.Range.Cells(1, 9).Value = "X"
            End Select
        Case Else:
    End Select

exit_Handler:
    Application.EnableEvents = True
    Set lr = Nothing
    Set lo = Nothing
    Exit Sub

err_Handler:
    MsgBox "Erreur : " & Err.Number & Chr(10) & Err.Description
    Resume exit_Handler

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Select Case Sh.Name
        Case "RdP TL1", "RdP TL2"
            On Error GoTo err_Handler
            Application.EnableEvents = False
            If Target.ListObject Is Nothing Then Exit Sub
            If Target.Count > 1 Then Exit Sub
            Set lo = Sh.ListObjects(1)
            lCol = Target.Column - lo.HeaderRowRange.Column + 1
            Select Case lCol
                Case 10: If Not IsEmpty(Target) Then lo.HeaderRowRange.Cells(1).Select
            End Select
        Case Else:
    End Select

exit_Handler:
    Application.EnableEvents = True
    Set lo = Nothing
    Exit Sub

err_Handler:
    MsgBox "Erreur : " & Err.Number & Chr(10) & Err.Description
    Resume exit_Handler

End Sub
Modifié en dernier par Jean-Eric le 24 janvier 2019, 12:09, modifié 1 fois.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'476
Appréciations reçues : 428
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 24 janvier 2019, 12:07

bonjour
Merci pour le code mais je n'arrive pas à le faire fonctionner, il me demande un nom de macro !
le nom de la macro est
Private Sub Worksheet_Change(ByVal Target As Range)
et non
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
il s'agit d'une macro qui s'exécute lorsqu'un changement est détecté sur la feuille en question.
Y
Yoyo01000
Membre fidèle
Membre fidèle
Messages : 201
Appréciations reçues : 5
Inscrit le : 19 décembre 2018
Version d'Excel : 2016

Message par Yoyo01000 » 24 janvier 2019, 12:55

Merci Jean-Eric, c'est très complet et ce qu'il me faut :)

Cependant, mon tableau va comporter plusieurs lignes que j'ai créé mais avec lesquelles ton code ne fonctionne plus :bof:

Il y a peut-être une modification de code à faire mais vu mon niveau, impossible de la faire moi-même :lol:
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'745
Appréciations reçues : 703
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 24 janvier 2019, 13:11

Re,
Merci de ce retour.
J'ai mis les données sous forme de tableaux (structurés). Ils sont dynamiques.
Lors du redimensionnement, les formules, les mises en formes et les validations sont reproduits à l'insertion de nouvelles lignes.
Précise ta question.
Cdlt;
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • Référence circulaire
    par sisi310 » 26 juillet 2019, 13:55 » dans Excel - VBA
    1 Réponses
    38 Vues
    Dernier message par Pedro22
    26 juillet 2019, 13:55
  • Référence circulaire
    par Alias19 » 9 novembre 2015, 19:25 » dans Excel - VBA
    2 Réponses
    220 Vues
    Dernier message par Alias19
    9 novembre 2015, 21:43
  • référence circulaire
    par blobli » 16 février 2018, 15:49 » dans Excel - VBA
    4 Réponses
    177 Vues
    Dernier message par blobli
    19 février 2018, 11:45
  • Référence circulaire
    par Fat » 11 septembre 2017, 14:39 » dans Excel - VBA
    8 Réponses
    178 Vues
    Dernier message par Fat
    11 septembre 2017, 21:04
  • Référence circulaire
    par Starr » 30 mai 2015, 04:09 » dans Calc
    1 Réponses
    500 Vues
    Dernier message par James007
    30 mai 2015, 09:03
  • référence circulaire
    par Starr » 30 mai 2015, 04:13 » dans Excel - VBA
    3 Réponses
    261 Vues
    Dernier message par frangy
    30 mai 2015, 09:39