Mise a jour en masse avec une condition de couleur

undo74

XLDnaute Nouveau
Bonjour a tous;

Je souhaite automatiser une mise à jour de cellules en masse avec une condition si cellule jaune je stop puis je repars avec une nouvelle valeur.

J’ai un formulaire de saisi avec comme champ le choix de la semaine et le choix de ligne d’usine.
L’objectif de ce formulaire est de mettre à jour la valeur d’une seule cellule pour l’instant.

Évolution que souhaite est de remettre à jour automatique le reste des cellules qui se trouve après la cellule sur la même ligne et en condition si la cellule est jaune je stop la mise jour avant la cellule en jaune puis je repars avec une nouvelle valeur en rappellent le formulaire.

En exemple le fichier avec le formulaire.

Merci d'avance pour votre aide
 

Pièces jointes

  • Exemple_suivi des ano.zip
    26.9 KB · Affichages: 13

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise a jour en masse avec une condition de couleur

Bonsoir Undo, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code ci-dessous :
Code:
Private DCOL As Byte 'déclare la variable DCOL (Dernière COLonne)
Private O As Object 'déclare la variable O (Onglet)


Private Sub Userform_initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("Entree") 'définit l'onglet O
DCOL = O.Cells(1, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DCOL de la ligne 1 de l'onglet O
Me.ComboBox1.List = WorksheetFunction.Transpose(O.Range(O.Cells(1, 2), O.Cells(1, DCOL))) 'alimente la ComboBox1
Me.ComboBox2.List = O.Range("A2:A" & O.Cells(Application.Rows.Count, 1).End(xlUp).Row).Value 'alimente la ComboBox2
End Sub


Private Sub CommandButton1_Click() 'bouton "Ajouter"
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Byte 'déclare la variable I (Incrément)
Dim BE As String 'déclare la variable BE (Boîte d'Entrée)

BE = Application.InputBox("Entrez la valeur à rajouter") 'définit la boîte d'entrée BE
If BE = "" Then Exit Sub 'si bouton "Annuler", sort de la procédure
COL = Me.ComboBox1.ListIndex + 2 'définit la colonne COL
LI = Me.ComboBox2.ListIndex + 2 'définit la ligne LI
For I = COL To DCOL 'boucle de la colonne COL à la dernière colonne DCOL
    If O.Cells(LI, I).Interior.ColorIndex = 6 Then 'condition : si la cellule a le fond jaune
        Exit Sub 'sort de la procédure
    Else 'sinon
        O.Cells(LI, I).Value = CInt(BE) 'place la valeur de la boîte d'entrée BE (convertie en entier [à adapter]) dans la cellule LI, I
    End If 'fin de la condition
Next I 'prochaine cellule de la boucle
Unload Me 'vide et ferm el'UserForm1
UserForm1.Show 'affiche l'UserForm1
End Sub
Le fichier :
 

Pièces jointes

  • Undo_v01.xlsm
    32 KB · Affichages: 21

undo74

XLDnaute Nouveau
Re : Mise a jour en masse avec une condition de couleur

Bonjour Robert,
Merci beaucoup pour ton aide ;)
le seul problème si je souhaite modifié une valeur en couleur jaune ça ne passe pas serait-il possible de faire en sort que si je modifie une des ses valeurs que ça fasse une recopie des cellules qui suive après.
sinon pour le reste c'est très bien.
Merci encore pour ton support.
undo
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise a jour en masse avec une condition de couleur

Bonjour Undo, bonjour le forum,

Si j'ai mieux compris, la version devrait convenir...
Le code :
Code:
Private DCOL As Byte 'déclare la variable DCOL (Dernière COLonne)
Private O As Object 'déclare la variable O (Onglet)


Private Sub Userform_initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("Entree") 'définit l'onglet O
DCOL = O.Cells(1, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DCOL de la ligne 1 de l'onglet O
Me.ComboBox1.List = WorksheetFunction.Transpose(O.Range(O.Cells(1, 2), O.Cells(1, DCOL))) 'alimente la ComboBox1
Me.ComboBox2.List = O.Range("A2:A" & O.Cells(Application.Rows.Count, 1).End(xlUp).Row).Value 'alimente la ComboBox2
End Sub


Private Sub CommandButton1_Click() 'bouton "Ajouter"
Dim BE As String 'déclare la variable BE (Boîte d'Entrée)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim I As Byte 'déclare la variable I (Incrément)
Dim COLJ As Byte 'déclare la variable COLJ (COLonne Jaune)

BE = Application.InputBox("Entrez la valeur à rajouter") 'définit la boîte d'entrée BE
If BE = "" Then Exit Sub 'si bouton "Annuler", sort de la procédure
COL = Me.ComboBox1.ListIndex + 2 'définit la colonne COL
LI = Me.ComboBox2.ListIndex + 2 'définit la ligne LI
For I = COL + 1 To DCOL 'boucle de la colonne (COL+1) à la dernière colonne DCOL
    'condition : si la cellule a le fond jaune, définit la colonne COLJ et sort de la boucle
    If O.Cells(LI, I).Interior.ColorIndex = 6 Then COLJ = I - 1: Exit For
Next I 'prochaine colonne de la boucle
If COLJ = 0 Then COLJ = DCOL 'si aucune cellule jaune dans la ligne, redéfinit COLJ
For I = COL To COLJ 'boucle de la colonne COL à la colonne COLJ
    O.Cells(LI, I).Value = CInt(BE) 'place la valeur de la boîte d'entrée BE (convertie en entier [à adapter]) dans la cellule LI, I
Next I 'prochaine cellule de la boucle
Unload Me 'vide et ferm el'UserForm1
UserForm1.Show 'affiche l'UserForm1
End Sub
Le fichier :
 

Pièces jointes

  • Undo_v02.xlsm
    35.3 KB · Affichages: 21

Discussions similaires

Réponses
2
Affichages
131

Statistiques des forums

Discussions
312 304
Messages
2 087 069
Membres
103 453
dernier inscrit
Choupi