Problème "réinitialisation" de SmallScroll avec macro en VBA

Résolu/Fermé
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 - 6 août 2015 à 00:26
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 - 7 août 2015 à 22:00
Bonjour,

J'ai tenté de créer une macro avec l'enregistreur de macro intégré dans Excel, dans le but de remettre à zero les paramètres d'une grille de calculs automatiques que j'ai conçu.

Les 4 cellules ayants des valeurs en nombre sont bien remises à "0"
Mais les cellule avec listes de choix ne reviennent pas sur le choix que je veux définir par défaut.

J'ai donc essayé de bidouiller la macro en VBA en m'inspirant d'exemples sur internet, mais ça ne fonctionne pas.

Pour information, c'est la première fois que je tente le VBA, ça doit pas être très joli...

Voici mon code :

Sub Réinitialisation_de_la_clôture_Alulam()
'
' Réinitialisation_de_la_clôture_Alulam Macro
'

' Mise à zero des 4 variables chiffrées :
Range("B84").Select
ActiveCell.FormulaR1C1 = "0"
Range("G84").Select
ActiveCell.FormulaR1C1 = "0"
Range("H86").Select
ActiveCell.FormulaR1C1 = "0"
Range("H89").Select
ActiveCell.FormulaR1C1 = "0"

' Mise en position "off" des menus à choix multiples :

' Encastré dans muret :
Range("H87").Select
ActiveWindow.SmallScroll
If objet.Value = "Oui" Then
ListCombo.Value = "Non"
End If

' Sur platine :
Range("H88").Select
ActiveWindow.SmallScroll
If objet.Value = "Oui" Then
ListCombo.Value = "Non"
End If

' Saisons :
Range("H88").Select
ActiveWindow.SmallScroll
If objet.Value = "Été" Or objet.Value = "Hivers" Then
ListCombo.Value = "Saison ?"
End If

' Coefficient de coût de revient :
Range("H88").Select
ActiveWindow.SmallScroll
If objet.Value = "1,2880" Or objet.Value = "0,0000" Then
ListCombo.Value = "1,288"
End If

' Coefficient de bénéfices :
Range("H88").Select
ActiveWindow.SmallScroll
If objet.Value = "1,1111" Or objet.Value = "1,0096" Or objet.Value = "1,2500" Or objet.Value = "0,000" Then
ListCombo.Value = "1,1111"
End If

' Coefficient de TVA :
Range("H88").Select
ActiveWindow.SmallScroll
If objet.Value = "0,055" Or objet.Value = "0,100" Or objet.Value = "0,200" Or objet.Value = "0,000" Then
ListCombo.Value = "0,100"
End If

Range("B84").Select

End Sub


Je remercie d'avance la bonne âme qui m'aidera à avancer dans mon projet,

Cordialement,
SE.



A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
6 août 2015 à 01:19
Bonsoir SE, bonsoir le forum,

L'enregistreur de macro est génial pour débuter dans les macros et je l'utilise toujours. Mais il a un gros défaut c'est de rajouter les lignes inutiles.
D'abord il faut absolument éviter tous les Select inutiles. Il ne font que ralentir l'exécution du code et peuvent provoquer des plantages.

premier exemple :
Range("B84").Select
ActiveCell.FormulaR1C1 = "0" 
fonctionne aussi bien avec :
Range("B84").Value = "0"


Deuxième exemple :
tu veux écrire "Test" dans A1 de l'onglet Feuil2 et tu te trouves dans dans l'onglet Feuil1 à l'exécution du code.
Sheets("Feuil2").Range("A1").Value = "Test"
passe très bien alors que pour sélectionner A1 de l'onglet Feuil2
Sheets("Feuil2").Range("A1").Select
va planter.
Dans ce cas le Select est obligatoire. Mais il faut d'abord 'sélectionner l'onglet puis la cellule :
Sheets("Feuil2").Select
Range("A1").Select
Donc évitons les Select si on peu s'en passer...

De la même manière les SmallScroll sont enregistrés mais ne servent à rien. Pour modifier une cellule il suffit de donner son adresse.
Range(B100").Value = 
est suffisant. Que tu aies fait défiler les cellules avec la molette de la souris n'a aucune raison d'être mentionner dans le code.
Ce n'est dons pas ces SmallScroll qui sont la cause de ton problème mais les contrôles (visiblement des Comboboxes) que tu as rajoutés dans l'onglet. Tu ne peux pas sélectionner un contrôle en sélectionnant la cellule qui le contient. Comme la manière d'aborder ces contrôles diffère selon qu'ils sont issues de la boîte à outils Contrôle de Formulaire ou de la boîte à outils Contrôles ActiveX, il nous sera difficile de t'aider davantage sans le fichier qui va bien...
Sinon, met-toi en mode Création, lance l'enregistreur de macro, sélectionne le contrôle et déplace-le légèrement. Arrête l'enregistreur de macro et regarde le code. Tu auras déjà le moyen de sélectionner le contrôle. Après avec Object (et pas objet) tu devrais pouvoir modifier sa valeur mais c'est assez galère.

Pourquoi n'utilise-tu pas des Listes de Validation de Données (Ruban Données) directement dans les cellules ? Ça te simplifierait considérablement les choses...



1
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
6 août 2015 à 23:16
Merci beaucoup à toi Thautheme,

Tes conseils m'ont bien aidé à corriger ma macro, elle fonctionne et voila à quoi elle ressemble maintenant :

Sub Réinitialisation_de_la_clôture_Alulam()
'
' Réinitialisation_de_la_clôture_Alulam Macro
'

' Mise à zero des 4 variables chiffrées :
Range("B84").Value = "0"
Range("G84").Value = "0"
Range("H86").Value = "0"
Range("H89").Value = "0"

' Mise en position "off" des menus à choix multiples :

' Encastré dans muret :
Sheets("Clôtures Alu").Select
If Range("H87").Value = "Oui" Then
Range("H87").Value = "Non"
End If

' Sur platine :
Sheets("Clôtures Alu").Select
If Range("H88").Value = "Oui" Then
Range("H88").Value = "Non"
End If

' Saisons :
Sheets("Clôtures Alu").Select
If Range("K84").Value = "Été" Then
Range("K84").Value = "Saison ?"
Else

If Range("K84").Value = "Hivers" Then
Range("K84").Value = "Saison ?"
End If
End If

' Coefficient de coût de revient :
Sheets("Clôtures Alu").Select
If Range("F102").Value = "0" Then
Range("F102").Value = Sheets("Données").Range("H7")
End If

' Coefficient de bénéfices :
If Range("F103").Value = "1,0096" Then
Range("F103").Value = Sheets("Données").Range("L7")
Else

If Range("F103").Value = "1,25" Then
Range("F103").Value = Sheets("Données").Range("L7")
Else

If Range("F103").Value = "0" Then
Range("F103").Value = Sheets("Données").Range("L7")
End If
End If
End If

' Coefficient de TVA :
Sheets("Clôtures Alu").Select
If Range("F117").Value = "0,055" Then
Range("F117").Value = Sheets("Données").Range("D8")
Else

If Range("F117").Value = "0,2" Then
Range("F117").Value = Sheets("Données").Range("D8")
Else

If Range("F117").Value = "0" Then
Range("F117").Value = Sheets("Données").Range("D8")
End If
End If
End If

Range("B84").Select
MsgBox "Calculateur de clôture Alulam Réinitialisé !"

End Sub




Cela dit, comme c'est une commande de réinitialisation d'un calculateur, j'aimerai voir apparaitre une message box au moment du clic sur le bouton avant l'exécution du code, demandant si "Oui" ou "Non" on désire bien faire la réinitialisation.

Je sais faire une message box (pas trop compliqué...) mais comment insèrerais tu la commande "Oui" ou "Non" dedans ?

Cordialement,

SE.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
7 août 2015 à 13:14
Bonjour,

cette ligne de code à placer au tout début de ta macro :

If MsgBox("Voulez-vous tout remettre à zéro ?", vbYesNo, "ATTENTION") = vbNo Then Exit Sub


0
SE44fr Messages postés 29 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 29 novembre 2015 2
7 août 2015 à 22:00
Rebonjour Thautheme,

J'ai bien essayé de placer ton code au début de ma macro, mais le "oui" et le "non" avait le même effet : interrompre la macro...

Donc j'ai fait pas mal de modifs jusqu'à temps que la macro fonctionne, et à force de persévérance sa donne ça :



Sub Réinitialisation_de_la_clôture_Alulam()
'
' Réinitialisation_de_la_clôture_Alulam Macro
'
If MsgBox("Voulez-vous tout remettre à zéro ?", vbYesNo, "ATTENTION") = vbYes Then

' Mise à zero des 4 variables chiffrées :
Range("B84").Value = "0"
Range("G84").Value = "0"
Range("H86").Value = "0"
Range("H89").Value = "0"

' Mise en position "off" des menus à choix multiples :

' Encastré dans muret :
Sheets("Clôtures Alu").Select
If Range("H87").Value = "Oui" Then
Range("H87").Value = "Non"
End If

' Sur platine :
Sheets("Clôtures Alu").Select
If Range("H88").Value = "Oui" Then
Range("H88").Value = "Non"
End If

' Saisons :
Sheets("Clôtures Alu").Select
If Range("K84").Value = "Été" Then
Range("K84").Value = "Saison ?"
Else

If Range("K84").Value = "Hivers" Then
Range("K84").Value = "Saison ?"
End If
End If

' Coefficient de coût de revient :
Sheets("Clôtures Alu").Select
If Range("F103").Value = "0" Then
Range("F103").Value = Sheets("Données").Range("H7")
End If

' Coefficient de bénéfices :
If Range("F104").Value = "1,0096" Then
Range("F104").Value = Sheets("Données").Range("L7")
Else

If Range("F104").Value = "1,25" Then
Range("F104").Value = Sheets("Données").Range("L7")
Else

If Range("F104").Value = "0" Then
Range("F104").Value = Sheets("Données").Range("L7")
End If
End If
End If

' Coefficient de TVA :
Sheets("Clôtures Alu").Select
If Range("F119").Value = "0,055" Then
Range("F119").Value = Sheets("Données").Range("D8")
Else

If Range("F119").Value = "0,2" Then
Range("F119").Value = Sheets("Données").Range("D8")
Else

If Range("F119").Value = "0" Then
Range("F119").Value = Sheets("Données").Range("D8")
End If
End If
End If

Range("B84").Select
MsgBox "Calculateur de clôture Alulam Réinitialisé !"

Else
Exit Sub

End If
End Sub



Tu aura surement remarqué que j'ai intégré ma macro dans le "si oui" de la message box et placer le "si non" à la suite avec un "End if"

Quant pense tu ?

Cordialement,
SE
0