A voir également:
- Séparation Split(colonne, vbLf)
- Split cam - Télécharger - Messagerie
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
11 réponses
Désolée, j'ai oublié de dire que je travaillais sur une formulaire Access 2007.
Et que le code ci-joint provient d'une fonction vba développée dans un module.
Et que le code ci-joint provient d'une fonction vba développée dans un module.
Utilisateur anonyme
25 mai 2012 à 16:49
25 mai 2012 à 16:49
Bonjour,
As-tu essayé :
tableau1 = Split(rst(6), vbCrLf)
Cdt
Lupin
As-tu essayé :
tableau1 = Split(rst(6), vbCrLf)
Cdt
Lupin
Utilisateur anonyme
Modifié par Lupin.PC4 le 25/05/2012 à 18:46
Modifié par Lupin.PC4 le 25/05/2012 à 18:46
re:
Il sera sans doute nécessaire de décortiquer le rst manuellement !
Je n'ai pas d'environnement Access sous la main, mais quelque chose comme
Dim Indice As Integer
Dim Boucle As Integer
Indice = rst(6).Fields.Count - 1
For Boucle = 0 To Indice
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
Next Boucle
n.b. Il se pourrait que tu ais a concatener certains champs !
rst(6).Fields(Boucle).Value & rst(6).Fields(Boucle +1).Value &
Cdt
Lupin
Il sera sans doute nécessaire de décortiquer le rst manuellement !
Je n'ai pas d'environnement Access sous la main, mais quelque chose comme
Dim Indice As Integer
Dim Boucle As Integer
Indice = rst(6).Fields.Count - 1
For Boucle = 0 To Indice
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
Next Boucle
n.b. Il se pourrait que tu ais a concatener certains champs !
rst(6).Fields(Boucle).Value & rst(6).Fields(Boucle +1).Value &
Cdt
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Super, ça marche bien ! Merci beaucoup.
Par contre, je viens de réaliser que j'ai mal pensé mon code.
Je voudrais que si un champs "Immeuble A (retour chariot) 18 rue *** (retour chariot) BP 56 que pour cette même ligne Immeuble A se trouve dans ma colonne ADRESSE1, 18 rue *** dans ma colonne ADRESSE2 et BP56 dans ADRESSE3.
Initialement, je n'y arrivais pas dans j'ai d'abord essayer de la faire pour une colonne. Si jamais tu vois comment je pourrais m'y prendre ?
C'est pour cela que j'utilisais au départ un tableau
Il était créer à chaque ligne et du coup je voulais que tableau(0) recueille mon Immeuble 1 et ensuite l'ajouter à ma colonne ADRESSE1 et de même pour tableau(1) = 18 rue *** ajouté à ADRESSE2 etc. Et cela répéter pour chaque ligne.
J'espère être assez clair. Je vais essayer de poursuivre de mon côté.
Merci pour ta réponse, ça me donne une piste de résolution.
Par contre, je viens de réaliser que j'ai mal pensé mon code.
Je voudrais que si un champs "Immeuble A (retour chariot) 18 rue *** (retour chariot) BP 56 que pour cette même ligne Immeuble A se trouve dans ma colonne ADRESSE1, 18 rue *** dans ma colonne ADRESSE2 et BP56 dans ADRESSE3.
Initialement, je n'y arrivais pas dans j'ai d'abord essayer de la faire pour une colonne. Si jamais tu vois comment je pourrais m'y prendre ?
C'est pour cela que j'utilisais au départ un tableau
Il était créer à chaque ligne et du coup je voulais que tableau(0) recueille mon Immeuble 1 et ensuite l'ajouter à ma colonne ADRESSE1 et de même pour tableau(1) = 18 rue *** ajouté à ADRESSE2 etc. Et cela répéter pour chaque ligne.
J'espère être assez clair. Je vais essayer de poursuivre de mon côté.
Merci pour ta réponse, ça me donne une piste de résolution.
Utilisateur anonyme
25 mai 2012 à 20:29
25 mai 2012 à 20:29
re:
Il reste aussi la possibilité de :
For Boucle = 0 To Indice Step 3
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & rst(6).Fields(Boucle + 1).Value & ")"
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & rst(6).Fields(Boucle + 2).Value & ")"
Next Boucle
Cdt
Lupin
Il reste aussi la possibilité de :
For Boucle = 0 To Indice Step 3
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & rst(6).Fields(Boucle + 1).Value & ")"
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & rst(6).Fields(Boucle + 2).Value & ")"
Next Boucle
Cdt
Lupin
Cette fois, j'ai une erreur d'exécution :
"Membre de méthode ou données introuvable" et "Fields" est mis en surbrillance.
Je suis novice en VBa et je me demandais si j'avais bien placé ton code? La première fois, ça a bien marché et la seconde peu importe mes changements, j'avais toujours cette erreur d'exécution.
En tous, les cas, je te remercie pour le temps tu consacres à m'aider !
"Membre de méthode ou données introuvable" et "Fields" est mis en surbrillance.
Je suis novice en VBa et je me demandais si j'avais bien placé ton code? La première fois, ça a bien marché et la seconde peu importe mes changements, j'avais toujours cette erreur d'exécution.
En tous, les cas, je te remercie pour le temps tu consacres à m'aider !
Sub Separation() Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("Adresse") While Not rst.EOF 'rst.Edit Dim Indice As Integer Dim Boucle As Integer Indice = rst(6).Fields.Count - 1 For Boucle = 0 To Indice Step 3 DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")" DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & rst(6).Fields(Boucle + 1).Value & ")" DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & rst(6).Fields(Boucle + 2).Value & ")" Next Boucle 'rst.MoveNext Wend 'rst.Close 'Set rst = Nothing End Sub
Utilisateur anonyme
Modifié par Lupin.PC4 le 26/05/2012 à 14:41
Modifié par Lupin.PC4 le 26/05/2012 à 14:41
re:
Tout d'abord, lorsque :
Sub Separation()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
While Not rst.EOF
Avant toute opération sur le rst, effectue un balayage,
ça initialise le recordset
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Je crois que l'erreur vient d'une erreur de Type.
l'instruction :
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
insère une donnée de type A dans une table ayant un champ de Type B
toujours découpé dans le doute, et la string (chaine de caractères)
est le passe-partout. Encore faut-il que les champs de la table Access
soit de type Texte, il te faut bien identifier les types de champs de la BD
et utiliser les fonctions de conversions pour les entrées,
CStr, CDate, CLng, CDbl, ... et tu en trouveras plein d'autres dans l'aide.
Dim Chaine as String
Chaine = rst(6).Fields(Boucle).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')"
Chaine = rst(6).Fields(Boucle + 1).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')"
Chaine = rst(6).Fields(Boucle + 2).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')"
il se pourrait qu'il soit nécessaire de faire une conversion de type
Dim Chaine as String
Chaine = CStr(rst(6).Fields(Boucle).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')"
Chaine = CStr(rst(6).Fields(Boucle + 1).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')"
Chaine = CStr(rst(6).Fields(Boucle + 2).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')"
Cdt
Lupin
Tout d'abord, lorsque :
Sub Separation()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
While Not rst.EOF
Avant toute opération sur le rst, effectue un balayage,
ça initialise le recordset
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Je crois que l'erreur vient d'une erreur de Type.
l'instruction :
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & rst(6).Fields(Boucle).Value & ")"
insère une donnée de type A dans une table ayant un champ de Type B
toujours découpé dans le doute, et la string (chaine de caractères)
est le passe-partout. Encore faut-il que les champs de la table Access
soit de type Texte, il te faut bien identifier les types de champs de la BD
et utiliser les fonctions de conversions pour les entrées,
CStr, CDate, CLng, CDbl, ... et tu en trouveras plein d'autres dans l'aide.
Dim Chaine as String
Chaine = rst(6).Fields(Boucle).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')"
Chaine = rst(6).Fields(Boucle + 1).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')"
Chaine = rst(6).Fields(Boucle + 2).Value
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')"
il se pourrait qu'il soit nécessaire de faire une conversion de type
Dim Chaine as String
Chaine = CStr(rst(6).Fields(Boucle).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')"
Chaine = CStr(rst(6).Fields(Boucle + 1).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')"
Chaine = CStr(rst(6).Fields(Boucle + 2).Value)
DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')"
Cdt
Lupin
Merci pour le temps consacrer à m'aider !
Désolée, mon fichier est sur mon lieu de stage. Je ne pouvais donc pas y avoir accès ce week-end.
Pour la boucle permetant un balayage, initilialisant le recordset, j'ai message d'erreur du type : "Déclaration en cours dans la portée en cours".
Autrement, j'ai toujours le même message d'erreur :
""Membre de méthode ou données introuvable" et cette ligne est mise en surbrillance : "
Voici le code intégré : (tous mes champs sont de type texte)
Désolée, mon fichier est sur mon lieu de stage. Je ne pouvais donc pas y avoir accès ce week-end.
Pour la boucle permetant un balayage, initilialisant le recordset, j'ai message d'erreur du type : "Déclaration en cours dans la portée en cours".
Autrement, j'ai toujours le même message d'erreur :
""Membre de méthode ou données introuvable" et cette ligne est mise en surbrillance : "
Indice = rst(6).Fields.count - 1
Voici le code intégré : (tous mes champs sont de type texte)
Sub Separe() 'Charger la référence Microsoft DAO 3.6 Object Library Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("test") Dim Boucle As Integer Dim Indice As Integer Indice = rst(6).Fields.count - 1 While Not rst.EOF For Boucle = 0 To Indice Step 3 Dim Chaine As String Chaine = CStr(rst(6).Fields(Boucle).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')" Chaine = CStr(rst(6).Fields(Boucle + 1).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')" Chaine = CStr(rst(6).Fields(Boucle + 2).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')" Next Boucle rst.MoveNext Wend Set rst = Nothing End Sub
Utilisateur anonyme
29 mai 2012 à 12:57
29 mai 2012 à 12:57
re:
Comme souligné dans un précédent message, pour
obtenir la propriété Count du recorset il te faut l'initialiser.
Dim Boucle As Integer
Dim Indice As Integer
'Pour initialiser, ajoute ces 2 instructions.
rst.MoveLast
rst.MoveFirst
Indice = rst(6).Fields.count - 1
alors la propriété .Count n'enverra plus ce message !
Cdt
Lupin
Comme souligné dans un précédent message, pour
obtenir la propriété Count du recorset il te faut l'initialiser.
Dim Boucle As Integer
Dim Indice As Integer
'Pour initialiser, ajoute ces 2 instructions.
rst.MoveLast
rst.MoveFirst
Indice = rst(6).Fields.count - 1
alors la propriété .Count n'enverra plus ce message !
Cdt
Lupin
Vraiment merci pour le temps que tu consacres à m'aider.
J'avais bien pris en compte l'étape d'initialisation dès ton avant dernier-post mais ça ne fonctionnait pas.
Cette fois, je l'ai intégré comme tu l'as mis dans ton dernier post. J'ai toujours la même erreur qui est lancée. Je ne la comprends pas.
Voici mon code, j'ai repris l'étape d'initialisation
Cordialement,
J'avais bien pris en compte l'étape d'initialisation dès ton avant dernier-post mais ça ne fonctionnait pas.
Cette fois, je l'ai intégré comme tu l'as mis dans ton dernier post. J'ai toujours la même erreur qui est lancée. Je ne la comprends pas.
Voici mon code, j'ai repris l'étape d'initialisation
Sub Separe() 'Charger la référence Microsoft DAO 3.6 Object Library Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("test") Dim Boucle As Integer Dim Indice As Integer rst.MoveLast rst.MoveFirst Indice = rst(6).Fields.Count - 1 While Not rst.EOF For Boucle = 0 To Indice Step 3 Dim Chaine As String Chaine = CStr(rst(6).Fields(Boucle).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE1) Values( ' " & Chaine & "')" Chaine = CStr(rst(6).Fields(Boucle + 1).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE2) Values( ' " & Chaine & "')" Chaine = CStr(rst(6).Fields(Boucle + 2).Value) DoCmd.RunSQL "INSERT INTO test(ADRESSE3) Values( ' " & Chaine & "')" Next Boucle rst.MoveNext Wend Set rst = Nothing End Sub
Cordialement,
re:
Je vais devoir tester dans mon environnement !
Mais pour ce faire, je vais avoir besoin de précision"
si
Dim Texte as String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("test")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Texte = Texte & rst.Fields(0)
Wend
MsgBox Texte
Que vaut Texte ?
Dim Texte as String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Texte = Texte & rst.Fields(0)
Wend
MsgBox Texte
Que vaut Texte ?
où si tes données ne sont pas confidentiel, ou si tu peux
obtenir une copie de tes tables avec seulement quelques records
dépose la sur [ Ci-Joint ].
Ce que j'ai du mal à comprendre :
While Not rst.EOF
tableau1 = Split(rst(6), vbLf)
Wend
Pourquoi balayer le recordset et pointer spécifiquement le 6ième ?
Cdt
Lupin
Je vais devoir tester dans mon environnement !
Mais pour ce faire, je vais avoir besoin de précision"
si
Dim Texte as String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("test")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Texte = Texte & rst.Fields(0)
Wend
MsgBox Texte
Que vaut Texte ?
Dim Texte as String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Adresse")
rst.MoveLast
rst.MoveFirst
While Not rst.EOF
Texte = Texte & rst.Fields(0)
Wend
MsgBox Texte
Que vaut Texte ?
où si tes données ne sont pas confidentiel, ou si tu peux
obtenir une copie de tes tables avec seulement quelques records
dépose la sur [ Ci-Joint ].
Ce que j'ai du mal à comprendre :
While Not rst.EOF
tableau1 = Split(rst(6), vbLf)
Wend
Pourquoi balayer le recordset et pointer spécifiquement le 6ième ?
Cdt
Lupin