Erreur d'execution 2448

Signaler
Messages postés
5
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
11 mai 2010
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour tout le monde
Je voudrais vous exposer mon probleme
J'ai une BD access qui exploite les résultats des étudiants d'une école.
Pou cela j'ai créée une requete croisé qui affiche les résulats des etudiants dans tout les modules (ayant les modules dans l'entete de colonne)

Je souhaiterais arriver a ecrire un code vba access qui modifie les differents composants de l'etat en focntion du contenu de ma requete

J'ai trouvé un code vba fait ce travaille(Etat requete croisé), mais en l'appliquant il me fait sortir un message d'erreur
Erreur d'exécution 2448
Impossible d'attribuer une valeur a cet objet

Voici une partie du code :
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)

Dim entX As Integer

If Not rstEnregistrement.EOF Then
If Me.FormatCount = 1 Then
For entX = 1 To NbColonnes
Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)
Next entX

For entX = NbColonnes + 2 To Nombre_colonnes
Me("Detail" + Format(entX)).Visible = False
Next entX

rstEnregistrement.MoveNext
End If
End If

End Sub

NB: en poursuivant le débogage il sélectionne la ligne:
Me("Detail" + Format(entX)) = Nz(rstEnregistrement(entX - 1), 0)

Toutes les lignes de ce genre dans les autres procedures sont aussi signalées, comme :
Me("Total" + Format(entX)) = Total_colonnes(entX)

Merci de m?avoir lu, et j'espère avoir une réponse !

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Ceci permet d'énumérer les composant d'une UserForm.
Je pense que cela doit aussi fonctionner sous Access en choisissant le bon type.
    Dim xxx As Control
    For Each xxx In Me.Controls
        If TypeOf xxx Is TextBox Then
            Debug.Print xxx.Name, xxx.Text
        End If
    Next

Dans ton cas, un simple test de ce type suffit (à aménager) :
    Dim xxx As Control
    For Each xxx In Me.Controls
        If xxx.Name = "Detail" & CStr(entX) Then
            xxx.Visible = False
            Exit For
        End If
    Next

Vala
Jack, 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)
Messages postés
5
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
11 mai 2010

salut encore!
merci d'avance pour votre intéret,

Votre code manque de concatenation de l'entier entx : xxx.visible=false ne marche pas, ile faut lui concaténer le (entx)

ne vous préocuper pas pour cette partie j'ai testé ,il ya que ça qui marche !!!!!
Me("Detail" + Format(entX)).Visible = False



Mais pour les affectaions des valeurs genre :

Me("Detail" + Format(entX)) = Nz(RS_Requete(entX - 1), 0)

Me("Detail" + Format(NbColonnes + 1)) = Nblignes

Nblignes = Nblignes + Me("Detail" + Format(entX))

Tout ça ne marche pas

Que dois je faire ?
Enfin merci pour votre aide
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Ah, Ok, je n'avais pas compris ta vraie question.

Le problème est : de quel type sont les objets éDetail1234 ?
TextBox ? Label ?

Car la vraie syntaxe devrait être :
Me("Detail" + Format(entX)).Caption = CStr( Nz(RS_Requete(entX - 1), 0)) ' Label
Me("Detail" + Format(NbColonnes + 1)).Text = CStr(Nblignes) ' TextBox
Nblignes = Nblignes + Val(Me("Detail" + Format(entX)).Caption)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Mais pas sûr que tout ce brique-à-braque soit une très bonne idée.
Messages postés
5
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
11 mai 2010

salut mes amis!
salut Jack!

Je vous remercie Jack pour votre aide trés précieuse, enfait j'ai trouvé la moitié de la solution (grace a votre dernieère réponse)
les "Entete" etait des etiquettes où,effectivement- je devait les affecter avec le Caption
comme suite:

Me("Entete" & CStr(entX)).Caption = RS_Requete(entX - 1).Name




par contre les "Detail" c'etait des zone de texte où devais utiliser le ControlSource

Le probleme qui se pose maintenent : c'est où mettre l'affectation. ??

Qd on l'utilise le ControlSource dans la procedure Detail_Format ,il décelnche l'erreur d'execution 2191 :
impossible de définir la propriete ControlSource en mode aperçu avant impression, ?..


j'ai essayé de mettre le code dans la procedure Report_Open mais il n'affiche rien !!!
je suis navré mais, !!!que dois je faire ???????
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Ce n'est que mon avis car pas habitué au VBA particulier de Access :
ControlSource est le lien entre ta zone de texte (TextBox) et un des champs de ton RecordSet.
Je pense que cela s'utilise comme ça :
    maZoneTexte.ControlSource = "[monTable]![monChamp]"
ou
    maZoneTexte.ControlSource = "=[monTable]![monChamp]"

Vois si c'est ransposable aux RecordSet

Vala
Jack, 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)