Aide pour simplifier une macro qui rempli des cellules précises

yannoch

XLDnaute Junior
Bonjour à tous,

en cette milieu de nuit (03:20 du mat), je ne trouve rien de mieux que d'essayer de simplifier le code d'une de mes macros sans succès, donc je vais vous expliquer mon problème et donner mon code de base.

J'ai actuellement un Userform avec une 12zaine de textbox qui cible des cellules précises en fonction d'une combobox avec les mois de l'année.
seulement quand je vois le code que j'ai fait pour 1 textbox, c'est un peu lourd de devoir le répéter pour toutes.
Je précise que les colonnes et les lignes seront toujours les mêmes (normalement), seul le feuillet peut changer grâce à une autre combobox.

Comment je remplis ma combobox avec les mois :
Code:
Me.mois_choix.AddItem "Janvier"
Me.mois_choix.AddItem "Février"
Me.mois_choix.AddItem "Mars"
Me.mois_choix.AddItem "Avril"
Me.mois_choix.AddItem "Mai"
Me.mois_choix.AddItem "Juin"
Me.mois_choix.AddItem "Juillet"
Me.mois_choix.AddItem "Août"
Me.mois_choix.AddItem "Septembre"
Me.mois_choix.AddItem "Octobre"
Me.mois_choix.AddItem "Novembre"
Me.mois_choix.AddItem "Décembre"

Comment je rempli mes cellules avec les textbox :
Code:
Private Sub save_Click()

'code pour Textbox app1, encore 11 à faire
If mois_choix.Value = "Janvier" Then
Range("D22") = app1_valeur.Value
Else
If mois_choix.Value = "Février" Then
Range("E22") = app1_valeur.Value
Else
If mois_choix.Value = "Mars" Then
Range("F22") = app1_valeur.Value
Else
If mois_choix.Value = "Avril" Then
Range("G22") = app1_valeur.Value
Else
If mois_choix.Value = "Mai" Then
Range("H22") = app1_valeur.Value
Else
If mois_choix.Value = "Juin" Then
Range("I22") = app1_valeur.Value
Else
If mois_choix.Value = "Juillet" Then
Range("J22") = app1_valeur.Value
Else
If mois_choix.Value = "Août" Then
Range("K22") = app1_valeur.Value
Else
If mois_choix.Value = "Septembre" Then
Range("L22") = app1_valeur.Value
Else
If mois_choix.Value = "Octobre" Then
Range("M22") = app1_valeur.Value
Else
If mois_choix.Value = "Novembre" Then
Range("N22") = app1_valeur.Value
Else
If mois_choix.Value = "Décembre" Then
Range("O22") = app1_valeur.Value
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

End Sub

Bref, je peux me contenter de refaire cette partie de code 12 fois mais je dois changer une ligne ou une colonne, j'aimerais m'éviter de faire potentiellement 144 modifications dans le code (12 mois x 12 textbox).

Donc si vous avez des pistes pour simplifier ça, je suis preneur et vous en remercie d'avance.
 

Grand Chaman Excel

XLDnaute Impliqué
Re : Aide pour simplifier une macro qui rempli des cellules précises

Bonsoir ou plutôt bonne nuit Yannoch,

Voici une façon de faire, en utilisant une cellule de référence que l'on décale ensuite en fonction du choix de la combobox. J'ai aussi mis un bout de code pour créer ton combobox avec une boucle...

VB:
Private Sub UserForm_Initialize()
Dim i As Integer
Dim sMois

'Remplir le combobox
sMois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
For i = 0 To 11
    Me.ComboBox1.AddItem sMois(i)
Next i

End Sub

Private Sub CommandButton1_Click()
Dim rg As Range, i As Integer, k As Integer

Set rg = [A1]       'cellule de référence
rg.Offset(0, Me.ComboBox1.ListIndex) = 9999 'on décale en fonction de la valeur choisie

End Sub

Tu peux aussi regarder le fichier joint pour essayer.

Tu n'as pas spécifier quelle était la différence entre les textbox. Il y a peut-être moyen de faire une boucle sur les textbox aussi ?

A+
 

Pièces jointes

  • yannoch.xls
    33 KB · Affichages: 46

yannoch

XLDnaute Junior
Re : Aide pour simplifier une macro qui rempli des cellules précises

Je te remercie Grand Chaman,

j'ai essayé d'adapter pour mon besoin mais ça fonctionne pas terrible.
La différence entre les textbox est que j'ai vais cibler plusieurs lignes à intervalle non régulier, sur le fichier que tu m'a créé, j'ai rajouté 2 texbox pour exemple.
Donc le Set d'origine est très pratique mais je n'arrive pas à le fixer en fonction du choix de la combobox.
Je veux dire par là que je n'arrive pas à choisir correctement la colonne en fonction du mois.
Dans le fichier, j'ai fait des If (à nouveau), si c'est janvier, ta référence c'est A1 (ça fonctionne), si c'est février > B1 (ça fonctionne pas, bizarre), autre > C1. Malheureusement, si je choisis Février, il arrive pas à comparer la valeur et me le met en C1 directement.

et est-ce qu'on pourrai mettre un Set pour la colonne, comme tu as fait pour la ligne ?
 

Pièces jointes

  • Copie de yannoch-1.xls
    38 KB · Affichages: 58
C

Compte Supprimé 979

Guest
Re : Aide pour simplifier une macro qui rempli des cellules précises

Salut Yannoch,

Tu peux essayer avec un tableau de tes cellules
VB:
Option Explicit
Dim TabCel() As String
Private Sub UserForm_Initialize()
  Dim i As Integer
  Dim sMois
  'Remplir le combobox
  sMois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
  For i = 0 To 11
    Me.ComboBox1.AddItem sMois(i)
  Next i
  ' Créer le tableau des cellules à partir d'une liste séparée par des virgules
  ' B1 pou Janvier, C1 pour Février, etc ...
  TabCel = Split("B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1,M1", ",")
End Sub
Private Sub CommandButton1_Click()
  Dim rg As Range, i As Integer, k As Integer
  'Si la comobobox est vide
  If Me.ComboBox1.Value = "" Then Exit Sub
  ' Remplir la bonne cellule d'après le tableau
  Set rg = Range(TabCel(Me.ComboBox1.ListIndex))       'cellule de référence
  rg.Offset(1, 0) = TextBox1.Value  ' On décale sur la ligne souhaitée
  rg.Offset(7, 0) = TextBox2.Value  ' On décale sur la ligne souhaitée
End Sub

A+
 

Pièces jointes

  • yannoch_test1.xls
    46.5 KB · Affichages: 44
Dernière modification par un modérateur:

yannoch

XLDnaute Junior
Re : Aide pour simplifier une macro qui rempli des cellules précises

Merci Bruno, c'est presque ça.
Je sais pas si tu as remarqué, si tu sélectionnes Janvier, il te met bien les résultats en B1, mais si tu sélectionnes Février, il te le met en D1 et non en C1, en bref, il saute une colonne à chaque fois, est-ce qu'il un argument supplémentaire à mettre sur Split pour éviter ça ?

Après j'ai un autre problème en essayant d'intégrer le code dans mon fichier mais je suis en train de chercher pourquoi (au lieu de commencer en B, il commence en R sur mon fichier...)
 
C

Compte Supprimé 979

Guest
Re : Aide pour simplifier une macro qui rempli des cellules précises

Salut,

Autant pour moi ... j'suis bête parfois :eek:

Pas besoin de décaler ta colonne via Offset puisqu'elle est définit dans "Rg"
Code:
rg.Offset(1, 0) = TextBox1.Value 'on décale en fonction de la valeur choisie
  rg.Offset(7, 0) = TextBox2.Value 'on décale en fonction de la valeur choisie

A+
 

Discussions similaires

Réponses
13
Affichages
238

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin