Faire référence à un nom de champ dans ma fonction vba
Résolu/Ferméyg_be Messages postés 23535 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2025 - 31 janv. 2024 à 21:14
- Faire référence à un nom de champ dans ma fonction vba
- Fonction si et - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Annuaire portable gratuit a partir d'un nom - Forum Réseaux sociaux
- Le nom du champ de tableau croisé dynamique n'est pas valide - Forum Excel
- Virginie organise un rallye avec 30 équipes. elle veut créer un code pour désigner chaque équipe. elle a commencé à la main, mais elle voudrait le faire calculer à l'aide d'une formule. proposez une formule comportant une seule fonction et à recopier vers le bas dans la colonne a du fichier à télécharger. quelle formule sera en a9 ? ✓ - Forum Excel
2 réponses
31 janv. 2024 à 09:47
bonjour,
Il me semble qu'il y a plusieurs anomalies dans ton code.
Pour commencer:
- Ma_table me semble parcourir la mauvaise table
- Au lieu de faire appel à une requête update, il est préférable d'utiliser les fonctions edit et update de VBA.
- Pourquoi ne pas utiliser NomChampC comme second paramètre de la fonction CharEspacesD?
31 janv. 2024 à 20:29
Bonjour à vous,
Grâce à votre réponse, j'ai modifié mes codes pour faire référence directement à la bonne table, ce qui simplifie beaucoup mes codes. Merci beaucoup!
Ce que je n'avais pas pensé, c'est que je tentais de faire un DLookup dans ma fonction alors que je pouvais la faire à l'extérieure et ajouter le résultat comme deuxième paramètre à ma fonction. C'est ce que j'ai fait et ça fonctionne très bien.
J'ai aussi pris le temps de regarder ce que vous me proposiez avec les fonctions edit et Update que je trouve très intéressant d'ailleurs, mais mon manque d'expérience me ramenait à mon problème de nom de champ.
Merci beaucoup d'avoir pris le temps de m'aider, c'est très apprécié! :)
Voici donc ce qui fonction pour moi :
Bouton:
Dim base As Database: Dim table As TableDef
Dim champ As Field
Set base = CurrentDb()
Set table = base.TableDefs("Donnees")
Dim MChamp As String, nbCaracReq As Variant
For Each champ In table.Fields
If champ.Name <> "No" Then
MChamp = champ.Name
nbCaracReq = DLookup("[NbCaracteres]", "Caracteres", "[NomChampC] = '" & MChamp & "'")
Call CurrentDb.Execute("UPDATE Donnees SET " & MChamp & " = CharEspacesD ([" & MChamp & "], " & nbCaracReq & ")")
End If
Next champ
base.Close
Set table = Nothing
Set base = Nothing
Fonction associée :
Public Function CharEspacesD(ByVal s As String, c As Variant) As String
Dim nbEsp As Variant, strWEspaces As String
If Len(s) <= c Then
nbEsp = c - Len(s)
strWEspaces = s & Space(nbEsp)
s = strWEspaces
End If
If Len(s) > c Then
strWEspaces = Left(s, c)
s = strWEspaces
End If
CharEspacesD = s
End Function
Encore une fois, merci énormément!! :)
31 janv. 2024 à 21:14
Je dois avouer que je n'avais pas completement compris ton approche.
Content que j'ai pu t'assister à aboutir à une bonne solution!