Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour,
Je suis un utilisateur modeste d'excel de longue date mais je bute devant ce problème que je schématise :
J'ai tableau dans lequel on peut choisir les produits et noter les quantités demandées
Produit / prix unitaire / quantité commandée / valeur calculée de la ligne
Trois gestionnaires de commandes vont noter leur liste chacun leur tour alimentant une cellule contenant le "montant total de la commande"
Je souhaite récupérer et mémoriser le prix total de la commande passée par chacun d'eux
J'utilise une cellule "Gestionnaire" dans laquelle chacun introduit son initiale
J'alimente un tableau
Pierre P =valeur de la cellule "montant total" SI cellule "gestionnaire" ="p"
Robert R valeur de la cellule "montant total" si cellule "gestionnaire" ="r"
Michel M valeur de la cellule "montant total" si cellule "gestionnaire" ="m"
Le problème : Après le passage de Pierre, le tableau des produits va devoir être réinitialisé pour le passage de Robert et la valeur de Pierre va passer à "0" puisque la condition =P n'est plus remplie. On perd donc la mémoire du montant de sa commande
Après ce préambule peut être un peu long, j'en viens donc à la question :
Comment serait il possible de bloquer la valeur de la cellule du montant de Pierre
Une fonction SI qui réaliserait =SI(Gestionnaire=P;total commande;conservation de l'ancienne valeur)
Cette ancienne valeur ne serait à 0 que si Pierre n'a pas encore introduit sa commande
RE,
Edit Si sujet résolu c'est bien.
Nous allons commencer par supprimer le code de wDog66 (Qui fonctionne bien...)
La procédure de wDog66 est dans le module : Module1 pour y accéder :
ALT + F11 (pour passer dans l’environnement VBE).
Dans le menu Affichage cliquer sur Explorateur de projet.
Là vous pouvez voir le module Module. Faites un double clic ou bien sélectionnez-le puis cliquez sur l’icône de code (Celui de gauche en haut de la fenêtre)
Vous aurez accès au code. Vous sélectionnez tout [CTRL + A] puis vous faites [Suppr]
Vous pouvez aussi supprimer directement le module celui-ci ne servira plus
Ensuite retournez sur le code de la feuille (Sous Excel clic droit sur l'onglet de la feuille, puis, Visualiser le code.) Remplacer le code existant par celui ci-dessous :
VB:
Option Explicit
'@Description "Code pour le bouton effacer données de la feuille."
Private Sub CommandButton1_Click()
Dim rangeToClear As Excel.Range
On Error Resume Next
Set rangeToClear = Me.Range("vr_Répartitions")
On Error GoTo 0
If Not rangeToClear Is Nothing Then
rangeToClear.ClearContents
Else
MsgBox "Oupss... Impossible de trouver le champ nommé : ""vr_Répartitions"""
End If
End Sub
'@Description "
Private Sub SauvDonnées(ByVal LigSel As Long)
Dim PlgD As Range
With Me
' On sauvegarde les valeurs
.Range("D" & LigSel).Value = .Range("E13")
.Range("F" & LigSel).Value = .Range("F14")
.Range("G" & LigSel).Value = .Range("F23")
.Range("H" & LigSel).Value = .Range("F30")
End With
' Petit message
MsgBox "Valeurs sauvegardées !"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Vérifier si on change la sélection dans les cellules A4 à A7
If Not Intersect(Me.Range("A4:A7"), Target) Is Nothing Then
' Tu as sélectionné une cellule verte = on lance l'inscrition des résultats
SauvDonnées (Target.Row)
End If
End Sub
Concernant la remise à zéro du formulaire nous allons créer un champ Nommé.
Pour créer le champ nommé sélectionnez les cellules qui devront être effacées; Puis donnez leurs un nom comme sur l'image (vr_Répartitions)
Il ne vous reste plus qu'a ajouter un bouton Onglet Développeur/Groupe Contrôles/Insérer/Contrôle activeX/Bouton.
Je n'ai pas renommer le bouton celui-ci se nomme 'CommandButton1 par défaut.
RE,
Edit Si sujet résolu c'est bien.
Nous allons commencer par supprimer le code de wDog66 (Qui fonctionne bien...)
La procédure de wDog66 est dans le module : Module1 pour y accéder :
ALT + F11 (pour passer dans l’environnement VBE).
Dans le menu Affichage cliquer sur Explorateur de projet. Regarde la pièce jointe 1222680
Là vous pouvez voir le module Module. Faites un double clic ou bien sélectionnez-le puis cliquez sur l’icône de code (Celui de gauche en haut de la fenêtre)
Vous aurez accès au code. Vous sélectionnez tout [CTRL + A] puis vous faites [Suppr]
Vous pouvez aussi supprimer directement le module celui-ci ne servira plus
Ensuite retournez sur le code de la feuille (Sous Excel clic droit sur l'onglet de la feuille, puis, Visualiser le code.) Remplacer le code existant par celui ci-dessous :
VB:
Option Explicit
'@Description "Code pour le bouton effacer données de la feuille."
Private Sub CommandButton1_Click()
Dim rangeToClear As Excel.Range
On Error Resume Next
Set rangeToClear = Me.Range("vr_Répartitions")
On Error GoTo 0
If Not rangeToClear Is Nothing Then
rangeToClear.ClearContents
Else
MsgBox "Oupss... Impossible de trouver le champ nommé : ""vr_Répartitions"""
End If
End Sub
'@Description "
Private Sub SauvDonnées(ByVal LigSel As Long)
Dim PlgD As Range
With Me
' On sauvegarde les valeurs
.Range("D" & LigSel).Value = .Range("E13")
.Range("F" & LigSel).Value = .Range("F14")
.Range("G" & LigSel).Value = .Range("F23")
.Range("H" & LigSel).Value = .Range("F30")
End With
' Petit message
MsgBox "Valeurs sauvegardées !"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Vérifier si on change la sélection dans les cellules A4 à A7
If Not Intersect(Me.Range("A4:A7"), Target) Is Nothing Then
' Tu as sélectionné une cellule verte = on lance l'inscrition des résultats
SauvDonnées (Target.Row)
End If
End Sub
Concernant la remise à zéro du formulaire nous allons créer un champ Nommé.
Pour créer le champ nommé sélectionnez les cellules qui devront être effacées; Puis donnez leurs un nom comme sur l'image (vr_Répartitions) Regarde la pièce jointe 1222681
Il ne vous reste plus qu'a ajouter un bouton Onglet Développeur/Groupe Contrôles/Insérer/Contrôle activeX/Bouton.
Je n'ai pas renommer le bouton celui-ci se nomme 'CommandButton1 par défaut.
Merci Valtrase
Je venais juste de signaler que j'étais parvenu à contourner le problème en repartant d'une nouvelle feuille vierge de macros. Tout fonctionne désormais.
Néanmoins, je vais suivre la première partie de vos conseils pour comprendre comment gérer ces macros qui apparaissent pour les unes (la mienne) et pas les autres
Encore merci à tous pour votre aide
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD