J'ai une table contenant 8 champs texte.
Cette table a été exclusivement créée pour générer des arbres (TreeView).
T1,T2,T3,T4,T5,T6,T7,T8
Celui qui a rempli cette table (pensant bien faire) a rempli des champs en
position 7 et 8 en laissant des trous dans les contenus des champs.
Exemple : T1,T2,T3,T4 sont remplis T5 et T6 sont vides T7 et T8 sont
remplis.
Ce qui ne m'arrange pas du tout pour la création de mes arbres.
Qui aurait un exemple de requête qui ferait ceci :
- Champ 1 vide ?
- Champ 2 suivant vide ?
- Si champ 2 suivant non vide et champ 1 vide déplace le contenu de champ
2 vers champ 1 et vide champ2
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier HUE
Bonjour jmd,
Par requête, je pense que cela risque d'être lourd. En effet, il faudrait gérer les colonnes une à une, les trous de 1 à n colonnes, et réitérer la/les requêtes de mise à jour.
Essaie cette petite procédure:
Sub Aligner() Dim dB As DAO.Database Dim Frd As DAO.Recordset Dim bytChp1 As Byte Dim bytChp2 As Byte
Set dB = CurrentDb Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF Frd.Edit bytChp1 = 1 While bytChp1 <= 7 If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ Vide => Cherché non vide à droite bytChp2 = bytChp1 + 1 While bytChp2 <= 8 If Not (IsNull(Frd.Fields("T" & bytChp2))) Then Frd.Fields("T" & bytChp1) = Frd.Fields("T" & bytChp2) Frd.Fields("T" & bytChp2) = Null bytChp1 = bytChp1 + 1 End If bytChp2 = bytChp2 + 1 Wend End If bytChp1 = bytChp1 + 1 Wend Frd.Update Frd.MoveNext Wend End Sub
Cordialement.
Bonjour jmd,
Par requête, je pense que cela risque d'être lourd.
En effet, il faudrait gérer les colonnes une à une, les
trous de 1 à n colonnes, et réitérer la/les requêtes de
mise à jour.
Essaie cette petite procédure:
Sub Aligner()
Dim dB As DAO.Database
Dim Frd As DAO.Recordset
Dim bytChp1 As Byte
Dim bytChp2 As Byte
Set dB = CurrentDb
Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF
Frd.Edit
bytChp1 = 1
While bytChp1 <= 7
If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ
Vide => Cherché non vide à droite
bytChp2 = bytChp1 + 1
While bytChp2 <= 8
If Not (IsNull(Frd.Fields("T" & bytChp2))) Then
Frd.Fields("T" & bytChp1) = Frd.Fields("T" &
bytChp2)
Frd.Fields("T" & bytChp2) = Null
bytChp1 = bytChp1 + 1
End If
bytChp2 = bytChp2 + 1
Wend
End If
bytChp1 = bytChp1 + 1
Wend
Frd.Update
Frd.MoveNext
Wend
End Sub
Par requête, je pense que cela risque d'être lourd. En effet, il faudrait gérer les colonnes une à une, les trous de 1 à n colonnes, et réitérer la/les requêtes de mise à jour.
Essaie cette petite procédure:
Sub Aligner() Dim dB As DAO.Database Dim Frd As DAO.Recordset Dim bytChp1 As Byte Dim bytChp2 As Byte
Set dB = CurrentDb Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF Frd.Edit bytChp1 = 1 While bytChp1 <= 7 If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ Vide => Cherché non vide à droite bytChp2 = bytChp1 + 1 While bytChp2 <= 8 If Not (IsNull(Frd.Fields("T" & bytChp2))) Then Frd.Fields("T" & bytChp1) = Frd.Fields("T" & bytChp2) Frd.Fields("T" & bytChp2) = Null bytChp1 = bytChp1 + 1 End If bytChp2 = bytChp2 + 1 Wend End If bytChp1 = bytChp1 + 1 Wend Frd.Update Frd.MoveNext Wend End Sub
Cordialement.
Jmd
Merci, j'intègre cette procédure et je reposte pour conclusions. Jmd
"Xavier HUE" a écrit dans le message de news:043e01c3cba2$e03b77c0$ Bonjour jmd,
Par requête, je pense que cela risque d'être lourd. En effet, il faudrait gérer les colonnes une à une, les trous de 1 à n colonnes, et réitérer la/les requêtes de mise à jour.
Essaie cette petite procédure:
Sub Aligner() Dim dB As DAO.Database Dim Frd As DAO.Recordset Dim bytChp1 As Byte Dim bytChp2 As Byte
Set dB = CurrentDb Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF Frd.Edit bytChp1 = 1 While bytChp1 <= 7 If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ Vide => Cherché non vide à droite bytChp2 = bytChp1 + 1 While bytChp2 <= 8 If Not (IsNull(Frd.Fields("T" & bytChp2))) Then Frd.Fields("T" & bytChp1) = Frd.Fields("T" & bytChp2) Frd.Fields("T" & bytChp2) = Null bytChp1 = bytChp1 + 1 End If bytChp2 = bytChp2 + 1 Wend End If bytChp1 = bytChp1 + 1 Wend Frd.Update Frd.MoveNext Wend End Sub
Cordialement.
Merci, j'intègre cette procédure et je reposte pour conclusions.
Jmd
"Xavier HUE" <elxavpub@bupfree.fr> a écrit dans le message de
news:043e01c3cba2$e03b77c0$a101280a@phx.gbl...
Bonjour jmd,
Par requête, je pense que cela risque d'être lourd.
En effet, il faudrait gérer les colonnes une à une, les
trous de 1 à n colonnes, et réitérer la/les requêtes de
mise à jour.
Essaie cette petite procédure:
Sub Aligner()
Dim dB As DAO.Database
Dim Frd As DAO.Recordset
Dim bytChp1 As Byte
Dim bytChp2 As Byte
Set dB = CurrentDb
Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF
Frd.Edit
bytChp1 = 1
While bytChp1 <= 7
If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ
Vide => Cherché non vide à droite
bytChp2 = bytChp1 + 1
While bytChp2 <= 8
If Not (IsNull(Frd.Fields("T" & bytChp2))) Then
Frd.Fields("T" & bytChp1) = Frd.Fields("T" &
bytChp2)
Frd.Fields("T" & bytChp2) = Null
bytChp1 = bytChp1 + 1
End If
bytChp2 = bytChp2 + 1
Wend
End If
bytChp1 = bytChp1 + 1
Wend
Frd.Update
Frd.MoveNext
Wend
End Sub
Merci, j'intègre cette procédure et je reposte pour conclusions. Jmd
"Xavier HUE" a écrit dans le message de news:043e01c3cba2$e03b77c0$ Bonjour jmd,
Par requête, je pense que cela risque d'être lourd. En effet, il faudrait gérer les colonnes une à une, les trous de 1 à n colonnes, et réitérer la/les requêtes de mise à jour.
Essaie cette petite procédure:
Sub Aligner() Dim dB As DAO.Database Dim Frd As DAO.Recordset Dim bytChp1 As Byte Dim bytChp2 As Byte
Set dB = CurrentDb Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")
While Not Frd.BOF And Not Frd.EOF Frd.Edit bytChp1 = 1 While bytChp1 <= 7 If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ Vide => Cherché non vide à droite bytChp2 = bytChp1 + 1 While bytChp2 <= 8 If Not (IsNull(Frd.Fields("T" & bytChp2))) Then Frd.Fields("T" & bytChp1) = Frd.Fields("T" & bytChp2) Frd.Fields("T" & bytChp2) = Null bytChp1 = bytChp1 + 1 End If bytChp2 = bytChp2 + 1 Wend End If bytChp1 = bytChp1 + 1 Wend Frd.Update Frd.MoveNext Wend End Sub
Cordialement.
Jmd
Avec tous mes remerciements Cette procédure a bien fonctionné. Je suis plus spécialiste de Delphi et connais très peu VB. L'aide me fut donc précieuse.
Cordialement Jmd
Avec tous mes remerciements
Cette procédure a bien fonctionné.
Je suis plus spécialiste de Delphi et connais très peu VB. L'aide me fut
donc précieuse.
Avec tous mes remerciements Cette procédure a bien fonctionné. Je suis plus spécialiste de Delphi et connais très peu VB. L'aide me fut donc précieuse.