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

Excel Discussion :

Faire une suite simple et cohérente [XL-2019]


Sujet :

Excel

  1. #21
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Merci Arturo, encore une fois la réponse qui va bien et qui est rapide

    Si t'as deux secondes pour me dire pourquoi le fait d'ajouter If Reinit = True Then Exit Sub et Target.Interior.Color = RGB(83, 142, 213) résout mon problème

    Je t'avoue que tes lignes de code ressemblent a de la sorcellerie tellement elles sont épurées et efficace.

  2. #22
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    la ligne If Reinit = True Then Exit Sub avait été ajouté pour faire des tests, elle n'a plus d'utilité, j'ai simplement oublié de la retirer.

    Concernant la ligne Target.Interior.Color = RGB(83, 142, 213) passage de la cellule sur fond bleu. Le principe de fonctionnement: le programme efface toutes les cellules sur fond bleu sauf celles sur fond orange pour interdire les modifications des cellules déjà modifiées auparavant. Or les cellules effacées volontairement par l'utilisateur passent elles aussi sur fond orange, à partir de là, elles ne sont plus modifiables.
    Pour modifier le contenu d'une cellule orange vide ou pas, Il suffit donc de passer la cellule sélectionnée sur fond bleu pour effacer toutes les valeurs sur fond bleu, puis de recopier la valeur dans cette même cellule en lui affectant la couleur orange et de relancer le calcul dans la foulée.
    En espérant avoir pu vous éclairer.

    Cdlt

  3. #23
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Bonjour Arturo !

    Bon c'est peut-être le moment ou j'en demande trop

    Ton code fonctionne à merveille rien à redire dessus !

    Je vois juste une toute petite améliroation qui pourrait être sympa dans certains cas.
    Mais alors vraiment c'est du détail, ne le fait que si ça t'interesse et que t'en as le temps

    Donc : Ce serait bien que si je fais une modif de nombre ou que supprime un nombre, si à l'endroit de la modif, donc en orange, je mets la valeur qu'il sensé y avoir sans modif.
    Alors ça me met la valeur en bleu et pas en orange.
    Ca servirait en fait à annuler une modif.

    Ex: je veux insérer une ligne entre 3 et 4, donc je supprime le 4 qui se remet une ligne en dessous. Si j'écris 4 dans la cellule supprimée en orange, faudrait que ça revienne en bleu comme si finalement yavait pas eu de modif.

    Ca permet d'annuler une modif sans avoir à tout réinitialiser.

    Le code actuel :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Reinit = True Then Exit Sub
     If Target.Column = 1 Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Calculation = xlCalculationManual
            If Target.Count = 1 Then
                Valeur = Target
                Target.Interior.Color = RGB(83, 142, 213)
                Eff_MemeNum_DejaOrange
                Target.Interior.Color = RGB(255, 192, 0)
                Recalcul
             End If
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
     End If
    End Sub
     
    Sub Recalcul()
        n = 1
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        'on efface toutes les valeurs qui ne sont pas sur fond orange
        For j = 1 To DerLig
            If Cells(j + 3, "A").Interior.Color <> RGB(255, 192, 0) Then Cells(j + 3, "A") = ""
        Next j
        For i = 4 To DerLig
            Set c = Range("A4:A" & DerLig).Find(n, lookat:=xlWhole)
            If c Is Nothing Then
                If Cells(i, "A").Interior.Color <> RGB(255, 192, 0) Then
                    Cells(i, "A") = n
                Else
                    n = n - 1
                End If
            Else
                i = i - 1
            End If
            n = n + 1
        Next i
    End Sub
     
    Sub Eff_MemeNum_DejaOrange()
        If Valeur <> 0 Then
            For j = 1 To DerLig
                If Cells(j + 3, "A").Interior.Color = RGB(255, 192, 0) And Cells(j + 3, "A") = Valeur Then
                    Cells(j + 3, "A") = ""
                    Cells(j + 3, "A").Interior.Color = RGB(83, 142, 213)
                End If
            Next j
        End If
    End Sub

  4. #24
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Si j'ai bien compris:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Dim Lig As Long, DerLig As Long, n As Long, i As Long, Valeur As Long
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Reinit = True Then Exit Sub
        If Target.Column = 1 Then
            Application.ScreenUpdating = False
            'Application.EnableCancelKey = xlDisabled 'pour que l'utilisateur ne puisse pas interrompre la macro
            Application.Calculation = xlCalculationManual
            Application.EnableEvents = False
                If Target.Count = 1 Then
                    Valeur = Target
                    Target.Interior.Color = RGB(83, 142, 213)
                    Eff_MemeNum_DejaOrange
                    Target.Interior.Color = RGB(255, 192, 0)
                    Recalcul
                    Orange_vers_bleu
                End If
            Application.Calculation = xlCalculationAutomatic
            Application.EnableEvents = True
        End If
    End Sub
     
    Sub Recalcul()
        n = 1
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        'on efface toutes les valeurs qui ne sont pas sur fond orange
        For j = 1 To DerLig
            If Cells(j + 3, "A").Interior.Color <> RGB(255, 192, 0) Then Cells(j + 3, "A") = ""
        Next j
        For i = 4 To DerLig
            Set c = Range("A4:A" & DerLig).Find(n, lookat:=xlWhole)
            If c Is Nothing Then
                If Cells(i, "A").Interior.Color <> RGB(255, 192, 0) Then
                    Cells(i, "A") = n
                Else
                    n = n - 1
                End If
            Else
                i = i - 1
            End If
            n = n + 1
        Next i
    End Sub
     
    Sub Eff_MemeNum_DejaOrange()
        If Valeur <> 0 Then
            For j = 1 To DerLig
                n = 1
                If Cells(j + 3, "A").Interior.Color = RGB(255, 192, 0) And Cells(j + 3, "A") = Valeur Then
                    Cells(j + 3, "A") = ""
                    Cells(j + 3, "A").Interior.Color = RGB(83, 142, 213)
                End If
            Next j
        End If
    End Sub
     
    Sub Orange_vers_bleu() 'si la valeur modifiée revient à sa position d'origine
        For i = 4 To DerLig
            If Cells(i, "A").Value + 3 = i Then Cells(i, "A").Interior.Color = RGB(83, 142, 213)
        Next i
    End Sub
    Cdlt

  5. #25
    Membre régulier
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Points : 71
    Points
    71
    Par défaut
    Ca parait si simple

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Faire une requête simple sur 2 tables
    Par Casio dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/12/2017, 09h20
  2. [Conception] Comment faire une bannière simple facilement ?
    Par momoG dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 05/10/2007, 16h56
  3. Faire une requete simple sur du texte
    Par karine75 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/10/2007, 15h21
  4. Comment faire une combo simple de choix de couleur ?
    Par zarbiman dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 25/03/2007, 16h20

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