VBA - CREE CLASSEUR d'après un USF

Celeda

XLDnaute Barbatruc
Bonjour,

Je viens vers vous pour la suite de mon projet concernant la consultation d'une base de données
par USF (codes faits exclusivement par xld lol!! merci encore).

J'aurai souhaité une fois la consultation faite que l'on puisse choisir un ou deux items ou plus (actuellement
on peut choisir qu'un item) qui s'afficheraient à la suite et pouvoir créer un nouveau classeur avec les intitulés de l'USF.

Par exemple, dans l'usf choisir AAA et CCC ==> affichage et création si besoin par bouton associé .
(le souci que j'ai pour le nouveau classeur : va-t-il s'afficher dans le repertoire dans lequel je travaille ???)

Je vous remercie à l'avance pour votre aide et j'espère que mon explication de texte est bien claire.
Sinon, comme d'habitude, n'hésitez pas à m'interpeller.
Merci.
 

Pièces jointes

  • STATUS-Classeur.zip
    51 KB · Affichages: 54
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour.
Voyez si cet extrait de l'aide vous suffit (bien qu'entachée de quelques erreurs):
MultiSelect, propriété


Indique si l'objet permet plusieurs sélections.

Syntaxe

object.MultiSelect [= fmMultiSelect]

La syntaxe de la propriété MultiSelect comprend les éléments suivants :

Élément Description
object Objet valide.
fmMultiSelect Facultatif. Mode de sélection que le contrôle utilise.


Valeurs

Les valeurs de fmMultiSelect sont les suivantes :

Constante Valeur Description
fmMultiSelectSingle 0 Un seul élément peut être sélectionné (par défaut).
fmMultiSelectMulti 1 Une pression sur ESPACE ou un clic sélection ou libère un élément de la liste.
fmMultiSelectExtended 2 Une pression sur MAJ et un clic sur la souris, ou une pression sur MAJ et sur l'une des touches de direction étend la sélection depuis l'élément précédemment sélectionné jusqu'à l'élément courant. Une pression sur CTRL et un clic sur la souris sélectionne ou libère l'élément.


Remarques

Lorsque la propriété MultiSelect est définie pour des valeurs de type Extended ou Simple, vous devez utiliser la propriété Selected de la zone de liste pour déterminer les éléments sélectionnés. La propriété Value du contrôle est toujours Null.

La propriété ListIndex renvoie l'index de la ligne ayant le focus.
 

Celeda

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour,

Merci Danreb de vouloir m'orienter sur le multiselect pour avoir la possibilité de plusieurs items selectionnés dans la combo box : je n'ai pas trouvé dans les propriétés où placer cette valeur :
fmMultiSelectExtended 2
???
Concernant, la création du classeur, as-tu une idée ??

merci pour le temps et les explications écrites.
 

Dranreb

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

J'avais mal compris: je croyais que c'était dans la ListBox qu'il fallait ensuite pouvoir choisir plusieurs lignes.
Si c'est dans le ComboBox je ne vois pas d'autre moyen que d'empiler des choix uniques successifs dans une ListBox intermédiaire
J'ai toujours mon module MSansDoublon et ma classe TableIndex qui pourraient jouer un rôle intéressant (il gère les N° lignes source)
Workbooks.Add crée un nouveau classeur sans chemin. C'est au Save que celui ci est défini.
À +
 

Celeda

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour,

Merci encore pour les explications mais je crains que cela ne soit pas suffisant
vu mon niveau vba.

Concrétement cela donne quoi en termes de codes à placer pour que le bouton
puisse générer un nouveau classeur ?

Merci.
 

Dranreb

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour.
Pour ouvrir un nouveau classeur vierge et actif:
VB:
Workbooks.Add
Pour le sauvegarder:
VB:
ActiveWorkbook.SaveAs CheminFichier
CheminFichier Pouvant être une expression du style ThisWorkbook.Path & "\Copie.xls"
À +
 

Celeda

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour,

Le code fonctionne bien mais il ne me recopie pas les données qui ont été selectionnées dans la combox box dans le nouveau classeur crée:
si on choisit AAA, les données s'affichent , on peut les consulter mais on peut choisir aussi de les avoir dans un nouveau classeur.
Je n'ai pas dû être assez claire dans mon premier message et je m'en excuse.:(

C'est la recopie des données issues du choix avec les intitulés qui doivent être dans le nouveau classeur.

Je n'ai toujours pas réussi à selectionner deux items :(.


Est-ce plus clair, maintenant ?

Merci encore pour ton aide et le code.
 

Dranreb

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour.
Plutôt que Sheets("Status"), Worksheet("Status") serait mieux, mais pas idéal.
L'idéal serait Feuil1. C'est le CodeName de la feuille Status et ça garantit de prendre celle du classeur portant la macro même si c'est un classeur nouvellement créé qui est actif. Vous pourriez ainsi écrire une boucle analogue à celle du remplissage de la ListView qui fait
VB:
C.EntireRow.Copy Destination:=ActiveSheet.Rows(L)
, L étant préalablement incrémenté de 1.
Pour la sélection de plusieurs items. Elle pourrait se faire dans une ListBox mais pas dans une ComboBox.
À +
 

Celeda

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour,

oulhalhal ala là je suis larguée..........

j'ai bien noté pour la Feuil1, c'est exact que ce sera plus efficace.

Quant à
C.EntireRow.Copy Destination:=ActiveSheet.Rows(L)

Je ne sais pas où le placer ????Mes différents essais restant infructueux et je ne vois
pas le rapport avec le bouton de la création du classeur et je suis désoléé de t'embêter
avec tout cela.

Merci
 

Dranreb

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

VB:
Private Sub CommandButton2_Click()
Dim C As Range, L As Long
Workbooks.Add
L = 15
For Each C In Feuil1.Range("E16:E" & Feuil1.[E65536].End(xlUp).Row)
   If C = Me.ComboBox1 Then L = L + 1: C.EntireRow.Copy Destination:=ActiveSheet.Rows(L)
   Next C
End Sub
À +
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour Marie, Bernard, bonjour le forum,

En pièce jointe ton fichier avec le code ci-dessous :
Code:
Private Sub CommandButton2_Click() 'bouton New file
Dim cls As Workbook 'déclare la variable cls (CLasseur Source)
Dim cld As Workbook 'déclare la variable cld (CLasseur Destination)
Dim ca As String 'déclare la variable ca (Chemin d'Accès)
Dim x As Integer 'déclare la variable x (incrément)
Dim y As Byte 'déclare la variable y (incrément)
Dim nc As String 'déclare la variable nc (Nom du Classeur)

If Me.ListBox1.ListCount = 0 Then Exit Sub 'si la ListBox est vide, sort de la procédure
Set cls = ThisWorkbook 'définit le classeur source
ca = ThisWorkbook.Path & "\" 'définit le chemin d'accès
Workbooks.Add 'ajoute un classeur
Set cld = ActiveWorkbook 'définit le classeur destination
With cld.Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" du classeur destination
    For x = 0 To Me.ListBox1.ListCount - 1 'boucle 1 : sur les x lignes de la ListBox1
        For y = 0 To 7 'boucle 2 sur les 8 colonnes de la Listbox1 (peut-êter la dernière colonne (qui contient le numéro de ligne) n'est pas nécessaire...)
            .Cells(x + 1, y + 1).Value = Me.ListBox1.List(x, y) 'récupère les données de ls ListBox1
        Next y 'prochaine colonne de la boucle 2
    Next x 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil1" du classeur destination
'boîte d'entrée pour le nom du fichier
nc = Application.InputBox("Tapez le nom que vous voulez-donner au classeur sans l'extension.", "Nom du Classeur", Type:=2)
If nc = "" Then Exit Sub 'si la boîte d'entrée n'est pas renseignée, sort de la procédure
cld.SaveAs (ca & nc & ".xls")
Unload UserForm7
End Sub
Les données sont répercutées dans un nouveau classeur puis une boîte d'entrée te demande le nom. Si tu renseignes cette boîte d'entrée, le classeur sera enregistré dans le même dossier que ton classeur source avec le nom que tu auras défini.
Le fichier :
 

Pièces jointes

  • STATUS-Classeur.xls
    815.5 KB · Affichages: 85

Celeda

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour,

Bernard, Robert, un grand merci à tous les deux !!!!!!:D:)
Je suis comblée!!

très bonne suggestion de demander quel nom à sauvegarder,
je n'y ai pas pensé. Comme quoi!!!

Juste le complément de pouvoir selectionner un ou deux items ??

Encore une fois, merci pour ta patience Bernard.Mais le vba et moi
c'est une histoire d'amour, soit, mais comme l'amour il n'est pas parfait.;)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour Marie, Bernard, bonjour le forum,

Une version 2 avec une Listbox à la place de la ComboBox.... Seul inconvénient, si on se trompe il faut passer par le bouton Clear.
 

Pièces jointes

  • STATUS-Classeur_v02.xls
    813 KB · Affichages: 56

Modeste

XLDnaute Barbatruc
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour Marie, Bernard, Robert ... et puis tous les autres!

Si je dis une ânerie dans les secondes qui suivent, ce sera juste un hommage à DoubleZéro, mais si on supprimait le ListBox1.Clear au début de la procédure "ComboBox1_Click()", ça n'aurait pas donné le résultat attendu? Of course, il fallait aussi prévoir dans ce cas une remise à blanc, telle que proposée par Robert!
Donc j'y insiste: ma question est seulement de savoir si c'eût été équivalent ou s'il vaut mieux éviter!?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - CREE CLASSEUR d'après un USF

Bonjour le fil, bonjour le forum,

Tu as raison Modeste ! Mais si on veut du MultiSelect, autant le faire en MultiSelect plutôt qu'en multiples sélections... Mais on pourrait en effet garder la ComboBox1 en supprimant le Listbox1.Clear.
 

Statistiques des forums

Discussions
312 211
Messages
2 086 294
Membres
103 171
dernier inscrit
clemm