Bonjour,
Question bête : j ai une BDD avec des champs liés par un point. Comment fais t on pour séparer les champs lié par un point, une virgule ou autre comme dans excel ?
Celui ci peux contenir jusqu'à 5 champs à séparer.
Merci
Bonjour,
Question bête : j ai une BDD avec des champs liés par un point. Comment fais t on pour séparer les champs lié par un point, une virgule ou autre comme dans excel ?
Celui ci peux contenir jusqu'à 5 champs à séparer.
Merci
Tu sélectionne la colonne, menu Données, puis Convertir. Tu te laisse guider par l'assistant
--- Sevyc64 ---
Parce que le partage est notre force, la connaissance sera notre victoire
Dans Access ? N'es tu pas sûr de confondre avec excel ?
pardon, j'avais compris que tu parlais d'excel.
Ben dans Access, non, il affiche les données brutes. Même en résultat d'une requete je sais pas. Il faudrait faire un split sur la colonne, je sais pas si ça existe ça dans le SQL d'Access
--- Sevyc64 ---
Parce que le partage est notre force, la connaissance sera notre victoire
Bonjour,
c'est possible en plusieurs temps puisque le critere de separation est bien defini
tu identifies la position du point avec la function Instr, puis avec les fonctions left et right tu selectionnes ce que tu veux
Bonjour,
Je ne suis pas sûr d'avoir compris la question. Mais s'il s'agit d'éclater un texte en morceaux délimités par un groupe de caractères particuliers, la fonction « Split » va bien.
Un exemple d'utilisation :
donnera ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Option Compare Database Option Explicit Public Sub ExempleSplit() Dim strTexteOriginal As String Dim tableau() As String Dim i As Integer 'Garnir strTexteOriginal pour l'exemple strTexteOriginal = "CURRENCY.CURVE.TENOR" 'Utilisation de Split tableau() = Split(strTexteOriginal, ".") For i = 0 To UBound(tableau) Debug.Print tableau(i) Next i End Sub
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Bonjour Claude,
Désolé pour la question bête mais comment l'utilises t on ?
J'ai inséré ta fonction dans un module de classe mais je ne sais pas comment la lancer.
Pour répondre à ta question, j'ai ma colonne Preponderance hierarchy et je voudrais autant de colonnes que de champs séparés par un point donc
ColonneN+1 : Currency
ColonneN+2 : Curve
ColonneN+3 : Tenor
Donc ajouter autant de colonne qu il y a de champs séparés par un point et découper chaque assemblage de mot, comme la fonction d'excel.
Merci
Bonjour,
Par exemple comme ceci.
LaTable doit contenir autant de colonnes que nécessaire pour accueillir chaque morceau
Voici le code associé au bouton « Ventiler »
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Option Compare Database Option Explicit Private Sub btVentiler_Click() Dim strTableau() As String Dim rst As DAO.Recordset Dim i As Integer 'Créer un recordset de la table pour pouvoir la parcourir Set rst = CurrentDb.OpenRecordset("LaTable") rst.MoveFirst 'Boucler sur chaque enregistrement jusqu'à fin de fichier Do While Not rst.EOF rst.Edit strTableau = Split(rst("PreponderanceHierarchy"), ".") 'Reporter chaque colonne du tableau dans la colonne ad hoc For i = LBound(strTableau) To UBound(strTableau) rst("N" & i) = strTableau(i) Next i rst.Update rst.MoveNext Loop Sortie: rst.Close Set rst = Nothing End Sub
Les commentaires inclus dans le code devraient t'aider à comprendre.
Si nécessaire :
D'une manière générale, pour se documenter sur les propriétés d'un formulaire ou d'un état, ou de leurs contrôles :
- afficher l'objet en mode construction ;
- cliquer sur la propriété => elle se met en surbrillance ;
- enfoncer la touche <F1>
=> l'aide Access s'ouvre à la bonne page.
De même dans le code, placer le curseur de la souris et enfoncer F1.
On peut aussi :
• ouvrir l'aide <F1>, choisir l'onglet « Aide intuitive » et suivre les instructions ;
• ouvrir la fenêtre d'exécution (<Ctrl> + G), saisir un mot-clé, y placer le curseur de la souris et enfoncer F1.
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Hello Claude,
J'ai essayé de reproduire ton exemple from scratch, mes étapes :
1- import d'un fichier echantillon, je le nomme "sample"
2- Je clique sur Créer > Création d'un formulaire
3- Dans les commande, je choisis un bouton > Créer un code événement > Générateur de code
4- Je copie le code et prends soin de renommer LaTable par Sample et le champ "PreponderanceHierarchy" par "Risk Factor Sensitivity"
5- Je reviens au formulaire, je sors du mode création pour ouvrir, je clique dessus mais rien ne se passe.
Qu ai je loupé ?
Merci pour ton aide
Bonjour,
Que donne mon exemple de la pièce jointe lorsque tu l'exécutes sur ta machine ?
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Hello,
Oui ton exemple fonctionne correctement.
Mon fichier from scratch semble ne rien faire.
Bonjour,
Dans mon exemple, le bouton s'appelle « btVentiler ».
Dans ton exemple, il s'appelle « Commande0 ».
=> le code n'est donc pas associé au clic !
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Tout simplement !
Je viens de tester, ça marche mais j'ai un message d'erreur à la fin :
La macro n'aime pas les espaces dans le libellé du champ ?
Merci
Effectivement, il faut proscrire les espaces, lettres accentuées, caractères spéciaux, mots protégés dans les noms d'objets et de colonnes... : ça finit toujours par créer des problèmes.La macro n'aime pas les espaces dans le libellé du champ ?
Montre le message, car l'origine est peut-être autre (une colonne vide par exemple ou avec plus que un « . » séparateur (tu n'as que 2 colonnes).
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Hello,
J'ai retire les espaces, le message d erreur est passe a la ligne suivante :
rst("N" & i) = strTableau(i)
et le message est :
Run Time error '3265' : Item not found in this collection
Je precise que je suis sur access 2010 en anglais.
J'ai relu le code, il y a la fonction "Sortie" qui peux etre traduite en "Exit"mais ce qui est bizarre c'est que ton exemple fonctionne donc j ai oublie qq chose.
Question bete sur rst("N" & i) = strTableau(i)
La variable N n'a t elle pas besoin d etre declaree ?
Merci
Non : rst("N" & i) = strTableau(i) peut se traduire en :La variable N n'a t elle pas besoin d etre declaree ?
- au 1er passage de la boucle : i vaut 0, dans la colonne appelée N0 de la table, placer le contenu de la 1re colonne du tableau (les indices commencent à 0)
- au 2e passage : i vaut 1, dans N1... la 2e colonne du tableau
- au 3e passage : i vaut 2, dans N2... la la 3e colonne du tableau.
Donc, par exemple si dans un de tes textes à éclater, il y a deux points « . », il y aura trois passages.
À ce moment-là, Access ne trouvera pas la colonne qui s'appelle N2 et va protester en disant qu'il ne trouve pas N2 dans la collection de colonnes de la table.
Je suis convaincu que c'est l'origine de ton problème.
Après l'instruction
For i = LBound(strTableau) To UBound(strTableau)
ajoute
Debug.print i
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Non en fait c'est moi... Je n'avais pas compris que le libellé des colonnes avaient également leur importance. Je les avais nommés R1, R2, R3 etc...
Donc pour récapituler, il faut faire attention à :
- le nom de la base (of course)
- Le nom du champ splitté
- le nom du bouton avec evenement click
- le nom des colonnes receptrices.
A quoi sers la fonction debug.print ?
J'ai essayé sur un BDD de 700.000 lignes et il a pas l'air d'aimer : y a til un buffer trop light ou un pc pas assez puissant ?
Bonjour,
Il y aurait aussi problème si dans un enregistrement, la colonne à éclater est Null ou si le nombre de colonnes prévues pour accueillir les morceaux s'avère trop petit.Donc pour récapituler, il faut faire attention à...
Il faudrait prévoir une gestion d'erreurs avec des messages pour l'utilisateur.
Je te renvoie à la dernière partie du billet n° 8 et pour en apprendre plus, ce tutoriel : http://cafeine.developpez.com/access...el/debugprint/À quoi sert la fonction debug.print ?
Pas de souci avec 700 000 lignes !
SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !
Merci Claude pour ton aide préciseuse
Bonjour Claude, j'ai une question :
J'ai lancé la segmentation sur un BDD de 900.000 lignes.
La BDD passe de 80mo à 1.7go après la fin du processus.
Sais tu pourquoi ? Y a t il un moyen de minimiser l'utilisation du buffer ?
La limite d'une BDD est plafonnée à 2.1go, si je la dépasse, celle ci n'est plus utilisable.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager