WaxistSelecta
XLDnaute Junior
Bonjour,
je bosse actuellement sur un gros fichier excel qui a pour vocation de devenir un outil de gestion des traductions de données pour un SI déployé en plusieurs langues...Et j'aurai besoin d'un peu d'aide sur certaines fonctionalités.
Pour ce faire, j'ai principalement deux composantes essentielles:
- Un onglet "Formulaire", visible par tout utilisateur, destiné à recueillir les nouvelles traductions renseignées pour un pays donné.
- Un onglet "Base de Données", caché, qui regroupe l'ensemble des données existantes dans toutes les langues traitées (10 en tout).
Mon problème principal se situe dans cet onglet "Base de Données".
De manière simplifiée, l'onglet "Base de Données" se constitue des colonnes suivantes:
- Une colonne 'English' (référence)
- Une colonne 'Language Code', qui identifie la langue (Francais, Polonais..)
- Une colonne 'Local' (qui contient la valeur traduite dans langue locale).
Cette colonne contient soit des valeurs soit rien (à vide)
Afin de consolider les données traduites par un utilisateur dans le formulaire non caché, je souhaite mettre en place - dans l'onglet "Base de Données" - une macro qui génère des VLookUp (RechercheV) pour les cellules vides mais seulement sur le pays qui aura été sélectionné dans le 1er onglet.
EX: Générer un VLOOKUP dans toutes les cellules vides dans le code langue FRA
Je suis parti sur une boucle For avec un IF pour les cellules vides mais c'est un peu lourd, notamment du fait de la taille du fichier (Env 20000 lignes, 2000 lignes par langues). La boucle semble fonctionner mais le fichier plante.... Je ne suis pas master en VBA et en macro donc j'imagine que ma boucle n'est pas optimale.
Pour info, le bout de VBA concerné:
Sheets("Consolidated").Select
Dim x As Long
Dim DerniereLigneN As Long
DerniereLigneN = Range("N:N").CurrentRegion.End(xlDown).Row
For x = 2 To DerniereLigneN
If Cells(x, 14).Value = "" Then Cells(x, 14).Value = "=VLOOKUP(RC[-13],Maquette!R36C7:R2000C12,5,FALSE)"
Next x
Je pense que ce n'est pas optimal puisque la formule se génère dans TOUS les codes langues, du coup, c'est trop lourd et ça plante. J'ai essayé de faire un filtre avancé avant la boucle mais là encore, la formule se génère dans TOUS les codes langues....
Si quelqu'un pourrait m'éclairer sur le sujet, je suis preneur!!!
Merci d'avance à tous ceux qui m'apporteront un peu d'aide!
je bosse actuellement sur un gros fichier excel qui a pour vocation de devenir un outil de gestion des traductions de données pour un SI déployé en plusieurs langues...Et j'aurai besoin d'un peu d'aide sur certaines fonctionalités.
Pour ce faire, j'ai principalement deux composantes essentielles:
- Un onglet "Formulaire", visible par tout utilisateur, destiné à recueillir les nouvelles traductions renseignées pour un pays donné.
- Un onglet "Base de Données", caché, qui regroupe l'ensemble des données existantes dans toutes les langues traitées (10 en tout).
Mon problème principal se situe dans cet onglet "Base de Données".
De manière simplifiée, l'onglet "Base de Données" se constitue des colonnes suivantes:
- Une colonne 'English' (référence)
- Une colonne 'Language Code', qui identifie la langue (Francais, Polonais..)
- Une colonne 'Local' (qui contient la valeur traduite dans langue locale).
Cette colonne contient soit des valeurs soit rien (à vide)
Afin de consolider les données traduites par un utilisateur dans le formulaire non caché, je souhaite mettre en place - dans l'onglet "Base de Données" - une macro qui génère des VLookUp (RechercheV) pour les cellules vides mais seulement sur le pays qui aura été sélectionné dans le 1er onglet.
EX: Générer un VLOOKUP dans toutes les cellules vides dans le code langue FRA
Je suis parti sur une boucle For avec un IF pour les cellules vides mais c'est un peu lourd, notamment du fait de la taille du fichier (Env 20000 lignes, 2000 lignes par langues). La boucle semble fonctionner mais le fichier plante.... Je ne suis pas master en VBA et en macro donc j'imagine que ma boucle n'est pas optimale.
Pour info, le bout de VBA concerné:
Sheets("Consolidated").Select
Dim x As Long
Dim DerniereLigneN As Long
DerniereLigneN = Range("N:N").CurrentRegion.End(xlDown).Row
For x = 2 To DerniereLigneN
If Cells(x, 14).Value = "" Then Cells(x, 14).Value = "=VLOOKUP(RC[-13],Maquette!R36C7:R2000C12,5,FALSE)"
Next x
Je pense que ce n'est pas optimal puisque la formule se génère dans TOUS les codes langues, du coup, c'est trop lourd et ça plante. J'ai essayé de faire un filtre avancé avant la boucle mais là encore, la formule se génère dans TOUS les codes langues....
Si quelqu'un pourrait m'éclairer sur le sujet, je suis preneur!!!
Merci d'avance à tous ceux qui m'apporteront un peu d'aide!