• 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 à 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,

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
 
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

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

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).
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...
 
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
 
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
 
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....
upload_2017-3-28_14-21-45.png
 
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....
Regarde la pièce jointe 986559

J'ai trouvé, je crois !
ALT + F11 , c'est bien ainsi que l'on peut lire le module de classe?
 
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

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
978
Retour