[Catégorie modifiée .Net -> VBA] Bug avec "CopyAfter" et combobox
cs_thebossof24
Messages postés12Date d'inscriptionlundi 18 avril 2011StatutMembreDernière intervention 9 octobre 2013
-
9 juin 2011 à 15:33
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
13 juin 2011 à 13:18
Bonjour,
Voilà mon fichier excel comporte 2 feuilles : la première avec une foultitude de combobox (une soixantaine environ) et l'autre est un modèle de commande. J'ai besoin de récupérer les données dans les combobox pour pouvoir remplir mon modèle de commande. Jusque là pas de problème, mais lorsque je veux faire une copie de ce modèle de commande, tous mes combobox de la première page ont été "changé". Et comme j'ai codé lors du changement de ces combobox, ca bug.
Voici ce que j'ai codé :
For j = 1 To nbfournisseur
compteur2 = 0
For i = 1 To 21
If (Sheets("Mise en bouteilles").OLEObjects("ComboBox" & t(i, 2)).Object.Value) = a(j) Then
Worksheets("Commande").Cells(compteur2 + 5, 2).Value = (Sheets("Mise en bouteilles").OLEObjects("ComboBox" & t(i, 3)).Object.Value)
Worksheets("Commande").Cells(compteur2 + 5, 1).Value = Worksheets("Mise en bouteilles").Cells(i + 5, 1).Value
Worksheets("Commande").Cells(compteur2 + 5, 5).Value = Worksheets("Mise en bouteilles").Cells(i + 5, 5).Value
Worksheets("Commande").Cells(compteur2 + 5, 6).Value = Worksheets("Mise en bouteilles").Cells(i + 5, 6).Value
Worksheets("Commande").Cells(compteur2 + 5, 7).Value = Worksheets("Mise en bouteilles").Cells(i + 5, 7).Value
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2011 à 17:40
Encore une fois, je te demande de poster tes questions dans la bonne catégorie.
Excel, c'est du VBA.
Quand tu colles du code ici, utilise la coloration syntaxique (3eme icone à droite) conserve les indentations de ligne plus facile à relire/comprendre.
Détail : Si tu utilises un modèle pour ta commande, perso, j'aurai copié le modèle avant de le remplir, afin d'être sûr de ne pas le modifier par erreur.
Regarde aussi l'utilisation de With/End With : ça allège la syntaxe.
" lorsque je veux faire une copie de ce modèle de commande, tous mes combobox de la première page ont été "changé" "
C'est quoi la première page ? laquelle ? "Mise en bouteilles" ?
"jusqu'à ce que j'arrive sur la ligne de copie de ma feuille "commande"."
Oui, et que se passe t-il à ce moment là ?
Quelle erreur ?
Perso, quand je copie la feuille 2 avec la même méthode que la tienne, le ComboBox de la feuille 1 n'est pas altéré.
Donc, ce doit être ton code qui provoque cette remise à zéro. Seul le débogage en instruction par instruction peut te dire ce qui se passe.
Vala
Jack, =fr MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_thebossof24
Messages postés12Date d'inscriptionlundi 18 avril 2011StatutMembreDernière intervention 9 octobre 2013 10 juin 2011 à 12:14
Désolé pour ces problèmes de sujet et de mise en forme.
J'ai encore besoin d'un peu de ton aide. J'ai évolué mon code et maintenant il a l'air de fonctionner comme il faut.
Cependant j'ai un nouveau problème que je vais essayer de t'exposer le plus clairement possible.
J'ai deux feuilles dans mon fichier : la première "Mise en bouteilles" qui contient donc les nombreux combobox (3 colonnes de 21 combobox) et la seconde "commande" qui est un modèle de commande. Comme tu me l'avais suggéré, j'ai copié les commandes avant d'insérer les données dont j'ai besoin. Cependant, lorsque je copie cette commande (le nombre de copie de cette feuille commande est fonction du nombre de fournisseurs différents apparaissant dans la deuxieme colonne de 21 combobox), un userform s'ouvre (j'ai codé auparavant pour que cet userform s'ouvre lorsque le combobox21 prend la valeur "oui" ; ce combobox est présent dans la première colonne de combobox).
Plus clairement lorsque j'arrive sur la ligne de copie de la feuille "Commande", ce userform s'ouvre alors que la combobox21 est présent sur la feuille "Mise en bouteilles".
Voici le morceau de code où ca bug :
For i = 1 To nbfournisseur
Sheets("Commande").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
ActiveSheet.Name = a(i)
Next i
En faisant le pas à pas, je vois que le userform s'ouvre sur la ligne de copie de la feuille "commande". Comme tu peux le voir, cette ligne est dans une boucle, ce qui fait que mon userform s'ouvre x fois (x étant le nombre de fournisseurs différents présent dans la deuxieme colonne de userform).
Penses-tu avoir une solution à ce problème? J'ai eu beau chercher toute la matinée, le userform continue de s'ouvrir sans que je le veuille...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 juin 2011 à 13:18
"pas à pas, je vois que le userform s'ouvre sur la ligne de copie de la feuille"
Une UserForm ne s'ouvre pas comme ça, par magie. Il y a surement un endroit dans ton code où tu lui demandes de s'ouvrir, mais je vois mal le rapport avec l'instruction Copy de feuille.
Dans ton code, où (dans quel Sub) se trouve l'ordre d'ouverture de ta Userform ?
J'ai tenté de suivre tes explications, mais je ne me représente pas bien ton problème.
Cependant, il faut savoir que si tu modifies le contenu d'une ComboBox (par un ajout, par exemple), l'évènement _Change se produit.
Y a t-il du code dans les évènements _Change de ta (tes) combo(s) ?
Est-ce que c'est ce code qui t'embète ?
Si oui, la solution consiste à :
- déclarer une variable booléenne commune à toute la page de code (dans Déclarations où se trouvent ces combos) :
Private bModifEnCours As Boolean
- avant chaque modif de combo, passer cette variable à True (et la remettre à False à la fin)
- dans chaque évènement _Change, ajouter :