Dans Revit, j’ai besoin de copier automatiquement des valeurs d’un paramètre vers un autre via Dynamo. Comment puis-je réaliser cette opération pour différents types de paramètres (texte, numérique, booléen) et entre paramètres de type et d’instance, sans sélection manuelle ?
La copie automatique de valeurs entre paramètres Revit via Dynamo nécessite une sélection intelligente des éléments et une gestion adaptée selon le type de paramètre (type/instance) et le format de données (texte, numérique, booléen).
Solution proposée par jacquesrigal3467 :
1. Remplacer la sélection manuelle par une sélection automatique
- Au lieu du nœud Select Model Element (sélection manuelle élément par élément)
- Utiliser All Elements of Category pour récupérer automatiquement tous les éléments d’une catégorie
- Ou All Elements of Type pour cibler un type spécifique
2. Structure du script Dynamo de base (Type → Instance) :
- All Elements of Category (ex: Tableaux électriques) → récupération automatique
- Element.GetParameterValueByName → extraction de la valeur du paramètre source (ex: « Nom du panneau »)
- Element.SetParameterByName → injection dans le paramètre cible (ex: « Identifiant »)
- Aucune transaction manuelle requise
3. Gestion des différents types de paramètres :
Paramètres texte :
- Type → Instance :
Fonctionne directement - Instance → Instance :
Fonctionne directement - Type → Type :
Peut nécessiter Element.ElementTypepour accéder au type avant lecture/écriture - Instance → Type :
Non recommandé (logiquement incohérent)
Paramètres numériques :
- Fonctionnement identique aux paramètres texte
- Si conversion nécessaire vers texte : utiliser String from Object ou un Code Block avec
"" + valeur - Type → Instance :
Fonctionne - Type → Type :
Fonctionne
Paramètres booléens (0/1, Oui/Non) :
- Les valeurs sont souvent retournées comme true/false ou 0/1
- Utiliser un nœud If (structure :
TEST ? action_si_vrai : action_si_faux) - Exemple : convertir true/false en « Intérieur »/« Extérieur »
- Pour conversion en texte : String from Object
4. Script avancé pour copie Type → Instance (solution complète) :
1. All Elements of Category (catégorie cible)
2. Element.ElementType (récupérer le type de chaque instance)
3. Element.GetParameterValueByName (lire paramètre du type)
4. Element.SetParameterByName (écrire dans paramètre d'instance des éléments originaux)
5. Conversion de types de données :
- Numérique → Texte : Code Block
"" + valeurou String from Object - Booléen → Texte : Nœud If avec conditions personnalisées
- Code d’assemblage (type) → Paramètre partagé (instance) : Nécessite
Element.ElementTypepuis lecture/écriture
6. Cas particuliers identifiés (retour d’expérience vincenzpz) :
- Si « Aucun paramètre de ce nom » apparaît alors que le paramètre existe : vérifier que le paramètre est bien accessible au niveau ciblé (Type vs Instance)
- Certains paramètres système (comme « Code d’assemblage ») sont au niveau Type uniquement
- Utiliser
Element.Parameterspour lister tous les paramètres disponibles et identifier leur niveau
7. Recommandations finales :
- Toujours tester la présence des valeurs avec un nœud Watch avant injection
- Vérifier la compatibilité des types de données (texte/nombre/booléen)
- Pour les paramètres système Revit, confirmer leur niveau (Type/Instance) dans les propriétés Revit
- Privilégier les paramètres partagés pour plus de flexibilité
Script disponible : jacquesrigal3467 a proposé de partager le script Dynamo complet sur demande.