VBA Besoin d'aide double boucle avec For and Array

sim

XLDnaute Occasionnel
Bonjour cher Forum,

Me voila coince! :confused:

Les differents parametres:
-Une sheet "print" avec un bouton ouvrant un Form donnant la possibilite de choisir France et/ou Italy et Chocolat et/ou Fraise + Un bouton print
-Une feuille "Summary" avec deux ComboxBox (ActiveX) et une RechercheV allant cherchant la valeur correspondante a l'association d'un pays et d'un parfum

Dans le code de la Form j'essaye de faire un impression de la feuille Summary avec toute les conditions qui on ete coche dans la forme. Par exemple l'utilisateur coche France et Fraise et Chocolat.

En apuyant sur le bouton Print je voudrais que la macro me fasse evoluer les deux combobox imprime et passe a la prochaine combobox.

Voila le code que j'ai fait mais j'ai l'impression que je suis encore loin d'arriver a le faire fonctionner! J'ai donc bien besoin d'un coup de main:

Code:
Private Sub CommandButton3_Click()

tablo = Array(1, 2) ' Markets

tablo1 = Array(15, 17) ' Brands

Application.ScreenUpdating = False


'On Error GoTo ErrHandler

Sheets("Summary").Select

Dim I As Byte
Dim J As Byte

For I = LBound(tablo) To UBound(tablo)
For J = LBound(tablo1) To UBound(tablo1)

If Me.Controls("CheckBox" & I).Value = True Then
 
    Me.Controls("ComboBox1").Value = Me.Controls("CheckBox" & I).Caption
    

Next

If Me.Controls("CheckBox" & J).Value = True Then
 
    Me.Controls("ComboBox2").Value = Me.Controls("CheckBox" & J).Caption

ActiveWindow.SelectedSheets.PrintOut Copies:=1

End If

Next I
Next J


Sheets("Print").Select
Unload Me

End Sub

Un grand merci d'avance pour vos conseils!

Sim
 

Pièces jointes

  • Exemple Forum.xlsm
    31.7 KB · Affichages: 56
  • Exemple Forum.xlsm
    31.7 KB · Affichages: 58
  • Exemple Forum.xlsm
    31.7 KB · Affichages: 58

Paf

XLDnaute Barbatruc
Re : VBA Besoin d'aide double boucle avec For and Array

Bonjour,

1)
Du coup je me demande si tout est claire?
pas vraiment, voire pas du tout !

Quelques explications plus précises seraient nécessaires.



2)
avec toute les conditions qui on ete coche dans la forme. Par exemple l'utilisateur coche France et Fraise et Chocolat
Que doit on imprimer ? la feuille Summary ? les combinaisons des éléments cochés? quelle mise en page ?

3)
En apuyant sur le bouton Print je voudrais que la macro me fasse evoluer les deux combobox imprime et passe a la prochaine combobox.
1-Que veut dire faire évoluer ?
2-imprime quoi?
3-passe de quelle Combobox à quelle Combobox ?

4)
Par ailleurs s'il était possible de mettre un classeur au format Excel 2003. Je ne peut pas accéder aux Commandbutton ni aux Combobox

A+
 
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : VBA Besoin d'aide double boucle avec For and Array

Bonjour,

Pour compléter ce que dit Paf :

Pourquoi ne pas mettre directement tes comboboxs dans le userform pour y faire le choix du pays et du produit et ensuite transférer via le bouton Print dans les cellules B2 et B3 de la feuille Summary le résultat de la saisie dans les deux comboboxs
tu n'aurais plus besoin de tes comboboxs de la feuille Summary

a+
 

CHALET53

XLDnaute Barbatruc
Re : VBA Besoin d'aide double boucle avec For and Array

Re,

en m'inspirant d'un travail fait par Magic Doctor et youky (BJ), j'ai bricolé quelque chose
Il me semble plus simple de traiter les comboboxs directement dans le userform.

a+

ps : j'ai nommé la liste des pays : pays et la liste des produits : produits
 

Pièces jointes

  • Sim Exemple Forum.xlsm
    35.2 KB · Affichages: 50
Dernière édition:

sim

XLDnaute Occasionnel
Re : VBA Besoin d'aide double boucle avec For and Array

Bonjour,

Merci Chalet53 et Paf.

Mes excuses il est vrai que je n'ai pas ete tres specifique dans ma demande.

Chalet53, merci beaucoup car tu m'as donne la logique neanmois quelque points ne corresponde pas a ce que j'aimerai. Normal dirait Paf! au vu des details que j'ai donne.

En fait ce que j'aimerai faire et la chose suivante:

La feuille "Summary" est en fait un petit rapport que les utilisateur vont surtout utilise sans avoir a imprimer. Donc il est necessaire que je puisse leur donner le choix de choisir le pays et le produit librement via Combobox.

Par rapport a ca je pense que la fonction
Code:
Sub ActualiserCombo
et plus particulierement la ligne
Code:
 .OLEObjects(combo).Object.Clear
rend imposible le choix manuel pour l'utilisateur.

C'est pour ca que je pensais donner la propriete Caption de mes Checkboxs (userform) a la propriete text des combobox.

Par exemple l'utilisateur tick les checkbox France Chocolat Fraise alors la macro va en arriere plan choisir france puis chocolat imprime, puis change fraise imprime etc.

Donc, la vrai demande est celle ci (toujours avec l'exemple de debut):

Une boucle sur les pays
Si Checkbox France = True alors
Boucle sur les produit
Si Checkbox produit = True alors imprimer feuille Summary (je ferai la mise en page a la fin)
Puis Next produit

Une fois la boucle des produit finit reprendre la boucle checkbox pays ect.

Enfin voila ce que mon cerveau de profanne pense! Evidemment dans l'exemple j'ai 2 checkbox pays et 2 checkbox produit (4 combinations donc) mais en vrai j'ai 15 pays et 20 produits..donc 300 combinations.. je pense pas que les boucles suggerees plus haut vont en faire une usine a gaz mais on s'approche! Je suis donc ouvert a autre chose si jamais quelqu'un a une meilleur idee!

En triturant un peu mon code et celui de Chalet53 j'arrive a ca (mais ca fonctionne pas evidemment):

Code:
Private Sub CommandButton3_Click()

mespays = Array(1, 2) ' Markets

mesproduits = Array(15, 17) ' Brands

Application.ScreenUpdating = False


'On Error GoTo ErrHandler

With Sheets("Summary")
    .Select

Dim I As Byte
Dim J As Byte


For I = LBound(mespays) To UBound(mespays)
For J = LBound(mesproduits) To UBound(mesproduits)

M = mespays(I)
N = mesproduits(J)

    If Me.Controls("CheckBox" & M).Value = True Then
 
        .OLEObjects("ComboBox1").Object.Text = Me.Controls("CheckBox" & M).Caption


                    If Me.Controls("CheckBox" & N).Value = True Then
                     
                       .OLEObjects("ComboBox2").Object.Text = Me.Controls("CheckBox" & N).Caption
                       
                    End If
                    Next J
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    End If
    Next I

End With
Sheets("Print").Select
Unload Me

End Sub

Merci d'avance :)

Sim
 

CHALET53

XLDnaute Barbatruc
Re : VBA Besoin d'aide double boucle avec For and Array

Bonjour,

Je te propose une autre approche avec combobox dans l'USF
et renvoi des infos en feuille sumbis

sans rien toucher à ce qui existe déjà
si cette piste t'intéresse : il faut actualiser l'USF et quelques bricoles
une macro événementielle sur la feuille sumbis pour mise à jour du résultat suivant choix des utilisateurs dans cette feuille
j'ai nommé dans la feuille Print les pays (ListePays) et les produits (ListeProd)

a+
 

Pièces jointes

  • Sim bis Exemple Forum.xlsm
    38.8 KB · Affichages: 52

Paf

XLDnaute Barbatruc
Re : VBA Besoin d'aide double boucle avec For and Array

re bonjour sim, CHALET53, le forum

Code:
Private Sub CommandButton4_Click()

Dim I As Byte
Dim J As Byte
Dim tablo, tablo1
tablo = Array("1", "2") ' Markets
tablo1 = Array("15", "17") ' Brands
With Sheets("Summary")


For I = LBound(tablo) To UBound(tablo)
    Worksheets("Summary").ListBox1.Clear
    Worksheets("Summary").ListBox2.Clear
    If Me.Controls("CheckBox" & tablo(I)).Value = True Then
        Worksheets("Summary").ListBox1.AddItem Me.Controls("CheckBox" & tablo(I)).Caption
    End If
    For J = LBound(tablo1) To UBound(tablo1)
        If Me.Controls("CheckBox" & tablo1(J)).Value = True Then
            Worksheets("Summary").ListBox2.AddItem Me.Controls("CheckBox" & tablo1(J)).Caption
        End If
    Next J
.PrintOut Copies:=1
Next I
End With

Sheets("Print").Activate
Unload Me

End Sub

J'ai juste remplacé les combobox par des listbox car les combobox n'affichant qu'une ligne (vierge) l'impression de la feuille présentait peu d'intérêt.

La listbox "pays" aurait tout aussi bien être remplacée par une textbox voire un label puisqu'il n'y a qu'une ligne à chaque impression

Bonne suite A+
 

sim

XLDnaute Occasionnel
Re : VBA Besoin d'aide double boucle avec For and Array

Bonjour Paf, Chalet53, le forum,

Un grand merci pour votre temps et votre aide. J'ai finalement choisi la soltion de paf comme elle repondait plus aux exigences de la structure de mon fichier de depart.

J'ai malgre tout fait quelques modifications:

-J'ai change l'ordre de la boucle qui avait le petit probleme d'imprimer meme si la valeur de la checkbox pays etait False.
-J'ai change le reset des listbox qui ne m'etait pas necessaire et de fait les ai remplacer par les combobox de depart plus user-friendly!

Code:
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False

Dim I As Byte
Dim J As Byte
Dim mespays, mesproduits

tablo = Array("1", "2") ' Markets
 tablo1 = Array("15", "17") ' Brands

With Sheets("Summary")
 

For I = LBound(mespays) To UBound(mespays)

     If Me.Controls("CheckBox" & mespays(I)).Value = True Then
         .OLEObjects("ComboBox1").Object.Text = Me.Controls("CheckBox" & mespays(I)).Caption
     For J = LBound(mesproduits) To UBound(mesproduits)
              If Me.Controls("CheckBox" & mesproduits(J)).Value = True Then
            .OLEObjects("ComboBox2").Object.Text = Me.Controls("CheckBox" & mesproduits(J)).Caption
               .PrintOut Copies:=1
            End If
            Next J
     End If
Next I
 End With
Sheets("Summary").Activate
 Unload Me
 
End Sub

Voili voilou!

Un grand merci encore une fois et a bientot j'en suis sur.

Sim
 

Discussions similaires

H
Réponses
19
Affichages
6 K

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 824
dernier inscrit
frederic.marien@proximus.