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
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
A voir également:
- Problème "réinitialisation" de SmallScroll avec macro en VBA
- Reinitialisation pc - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Macro logiciel - Télécharger - Organisation
- Vba range avec variable ✓ - Forum VB / VBA
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
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 :
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.
Dans ce cas le Select est obligatoire. Mais il faut d'abord 'sélectionner l'onglet puis la cellule :
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.
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...
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").Selectva 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").SelectDonc é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...
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
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.
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.
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
7 août 2015 à 13:14
Bonjour,
cette ligne de code à placer au tout début de ta macro :
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
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
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
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