Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion spi
  • Date de début Date de début

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 !

spi

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de créer une interface utilisateur (cf pj).
Sur l'onglet "step 1", l'utilisateur clique sur les devises qui le concerne.
La macro associée permet de créer des tableaux de saisie pour chaque devise selectionnée, sur l'onglet "step 2".
Il y a un hic avec la macro: si je clique sur EUR et USD, puis dé-clique EUR, et enfin re-selectionne EUR, les tableaux en "step 2"ne sont pas corrects car je ne vois pas les 2 tableaux attendus (cad EUR et USD) mais il semble qu'ils se sont superposés.
Est-ce que qlq'un peut m'aider à corriger la macro?
Merci,
 

Pièces jointes

Bonjour spi 🙂, le Forum 🙂

Avec tous les modules qu'il y a dans ton fichier, personnellement je m'y perd un peu. Si tu n'a besoin que du module 1, supprime les autres. Si tu as besoin de certaines macros des modules 2 et 3, copie-les dans le module 1. Quand tu fait appel à une macro pas besoin d'écrire Module1.Macro2, Call Macro2 suffit.

Pour revenir à ta demande, dans macro1 il y a DEST.Resize(19, 1).Replace "EUR", D.

Vu que D est déclaré comme String et non comme un Objet ou Range, il faut ajouter D = Range(Me.CheckBox11.LinkedCell).Offset(0, 1).Value. Sinon Public D as Range

Set D = Range(Me.CheckBox11.LinkedCell).Offset(0, 1)
DEST.Resize(19, 1).Replace "EUR", D.Value
 

Bonjour,

Merci pour les infos. Oui, module 2 et 3 pourrait être supprimés.
Pour mon pb, j'ai modifié la macro1 comme suggéré (cf ci-dessous). Mais, je dois aussi modifier chaque Private Sub CheckBox_Click() aussi, non? Si oui, comment?

Public D As Range 'déclare la variable D (Devise)
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Worksheets("Model") 'définit l'onglet source OS (masqué)
Set OD = Worksheets("Step 2 - DSO&DPO S&P ") 'définit l'onglet destination OD
'définit la cellule de destination DEST (A1 si A3 est vide, sinon la troisième cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A3").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(3, 0))
Set D = Range(Me.CheckBox11.LinkedCell).Offset(0, 1)
OS.Range("A1:AF19").Copy DEST 'copie le tableau de l'onglet OS (le modèle) et le colle dans DEST
DEST.Resize(19, 1).Replace "EUR", D.Value 'remplace "EUR" par la devise D
Application.ScreenUpdating = False 'affiche les rafraîchissements d'écran
End Sub
 
Re

Non, tu peux faire un boucle
Public ctrl as controls

For i = 1 to 24
Set ctrl = Me.CheckBox & i
Next i
Set D = Range(ctrl.LinkedCell).Offset(0, 1)
DEST.Resize(19, 1).Replace "EUR", D.Value
 

Suis débutante en VBA... d'où mes questions...
Je copie la boucle en Sheet1, sans modifier les Private Sub CheckBox_Click?
Il faut définir i, non?
Merci...
 
Bonjour,

Evite de multiplier les codes identiques.
Comme toutes tes checkboxes déclenchent la même action, un module de classe permet de ne coder les actions q'une fois.

Le principe :
Un module de classe avec qui décrit ce qu doit faire une checkbox quand on la coche / décoche
A l'ouverture du fichier, on regarde toutes les checkboxes de la feuille "Currencies", on les assoicie à la classe ci-dessus et on les enregistre dans une collection

Enfin, un module standard contient le code de création / suppression des zones.

NB: dans l'exemple ci-dessous, la devise est détermniée en fonction de du "Caption" de la checkbox.
(Je l'ai ai mises à jours pour les 2 premières colonnes de devises, pas le courage de terminer la 3ème colonne).
 

Pièces jointes

Merci, mais là, suis perdue... lost in translation...
Dans le fichier demo.xlsm, je fais comment pour voir le module de classe que vous avez créé? Et quand je vérifie le résultat dans l'onglet Step 2, ce n'est pas du tout le résultat attendu...
Pas sûre d'avoir tout compris...
 

Désolée, le résultat en onglet Step 2 est bien correct.
Mais je n'ai jamais utilisé de Module de Classe avant. Dans quel menu, je peux lire/modifier le code svp?
Merci encore
 
Bonjour Iznogood1 🙂

J'ai bien pensé au module de classe, mais n'ayant pas la maîtrise, j'ai essaié avec une boucle for each., mais bizarrement, elle ne tiens pas compte si les case sont cochées ou non.
 
Re spi

Ne modifie rien du tout au risque de tout faire foiré. Le classeur exemple d'Iznogood1 fontionne très bien.
Si tu veux lire, bein c'est simple comme bonjour, tu as le module standard et en dessous le module de classe.
J'ai ajouté la mise en forme des colonne.

VB:
Public Function CreateForm(devise As String)
  If Not DeviseExiste(devise) Is Nothing Then Exit Function
  'Application.ScreenUpdating = False
  Dim r As Range
  frmModel.Range("A1:AF19").Copy
  With frmOutput
    Set r = .Range("A" & 1 + 20 * (DevisesActives - 1))
    .Activate
    r.Select
    .Paste
    r.Range("A1:A19").Replace What:="EUR", Replacement:=devise
    r.Select
    .Range("A:A").ColumnWidth = 10
    .Range("C:D").ColumnWidth = 60
    .Range("E:AF").Columns.AutoFit
  End With
  Application.CutCopyMode = False
  frmCurrency.Activate
  'Application.ScreenUpdating = True
End Function
 

Merci, mais je ne vois tjs pas comment lire le code. Je dois aller ds quel menu Excel?
Habituellement, pour lire les macros, je vais dans Developer/Macros.
Mais dans le fichier d'Iznogoud, je ne vois pas de macro, ni de module...
Pouvez-vous m'expliquer comment accéder au code?
Merci, merci....
 

J'ai trouvé, je crois !
ALT + F11 , c'est bien ainsi que l'on peut lire le module de classe?
 

Encore une question, je rame pour comprendre... comment je dois faire pour ajouter la dernière colonne de devise en "caption"?
Merci,
 
- 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

Discussions similaires

  • Question Question
Microsoft 365 modifier macro
Réponses
2
Affichages
588
Réponses
3
Affichages
979
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…