Demande d'aide sur Boucle For If Next avec "critères"

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....:confused:

Si quelqu'un pourrait m'éclairer sur le sujet, je suis preneur!!!:cool:


Merci d'avance à tous ceux qui m'apporteront un peu d'aide!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Demande d'aide sur Boucle For If Next avec "critères"

Bonsoir WaxistSelecta, bonsoir le forum,

Un fichier exemple, très épuré avec justes quelques valeurs pour qu'on puisse se faire une meilleure idée, serait le bienvenu pour obtenir de l'aide plus rapidement car pour moi ce n'est pas très clair...
Par exemple, pourquoi ton code fait-il référence à la colonne 14 ?
 

WaxistSelecta

XLDnaute Junior
Re : Demande d'aide sur Boucle For If Next avec "critères"

Salut,

Merci pour cette réponse rapide!

effectivement, je comprend que ça ne soit pas très clair même si j'ai taché d'être le plus précis possible...

Pour répondre à ta question, la colonne 14 est la colonne qui doit "receuillir" les formules, sur les cellules vides ET sur le code langue voulu.

Je joins un fichier très simplifié, avec les données propres à mon problème.

Je souhaite utiliser la boucle cité avant, qui créerait les VLOOKUP dans les cellules vides ET dans le code langue FRA ou THA uniquement (mais potentiellement dans un autre, car il peut changer en fonction du choix de l'utilisateur...voir fichier joint).

A ta dispo si besoin de plus de précision!

Merci beaucoup pour ton aide...
 

Pièces jointes

  • Book1.xls
    26 KB · Affichages: 70
  • Book1.xls
    26 KB · Affichages: 67
  • Book1.xls
    26 KB · Affichages: 68
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Demande d'aide sur Boucle For If Next avec "critères"

Bonjour le fil, bonjour le forum,

Cette macro commentée à adapter peut-être... :
Code:
Sub Macro1()
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
 
Set pl = Range("C2:C" & Range("C65536").End(xlUp).Row) 'définit la variable pl
Set r = pl.Find(Range("E2").Value, , , xlWhole) 'dénifit la variable r
If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de r dans la plage pl
    pa = r.Address 'définit la variable pa
    Do 'exécute
        'si la cellule à coté est vide place la formule de recherche (à adapter)
        If r.Offset(0, 1) = "" Then r.Offset(0, 1) = "=VLOOKUP(RC[-13],Maquette!R36C7:R2000C12,5,FALSE)"
        Set r = pl.FindNext(r) 'redéfinit la variable r
    Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences de r ailleurs qu'en pa
End If 'fin de la condition
End Sub
 

WaxistSelecta

XLDnaute Junior
Re : Demande d'aide sur Boucle For If Next avec "critères"

Bonsoir Robert,

merci beaucoup pour ta contribution, très efficace somme toute!! Comme pressenti, les performances et la pertinence de ma macro s'en trouve fortement améliorées!

Sans vouloir abuser de ta gentillesse et de tes compétences en la matière, je bute sur un autre problème. Si tu peux y apporter un peu d'éclairage, j'en serais très reconnaissant!

Voilà de quoi il s'agit:

Comme expliqué dans mon message initial, j'ai deux onglet principaux:
1. Un onglet "Formulaire" qui receuille les mises à jour faites par un utilisateur
2. Un onglet "Base de Données", qui consolide chacune de ses mises à jour...

Dans l'idée, si une mise à jour est renseignée dans l'onglet 1, un flag (type "X") devrait s'activer pour la ligne correspondante dans l'onglet 2 dans une colonne précise.

Je sais que ça tape dans une Private subroutine, genre SheetChange mais je n'arrive pas à déclarer la macro correctement....:(... Je ne pense pas que cela soit bien compliqué mais je n'y arrive pas encore...

Je joins un fichier illustratif de mon problème, si jamais cela t'inspire (ou tout autre généreux contributeur...).

Merci d'avance et merci encore pour ton aide!!!

WaxistSelecta
 

Pièces jointes

  • MAJ Données.xls
    27 KB · Affichages: 43
  • MAJ Données.xls
    27 KB · Affichages: 46
  • MAJ Données.xls
    27 KB · Affichages: 47

julberto

XLDnaute Occasionnel
Re : Demande d'aide sur Boucle For If Next avec "critères"

Bonjour WaxistSelecta,

A tout hasard :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D:D")) Is Nothing Then Cells(Target.Row, "F") = "X"
End Sub

Bonne journée.
 

WaxistSelecta

XLDnaute Junior
Re : Demande d'aide sur Boucle For If Next avec "critères"

Bonjour et merci pour cette précision,

cela confirme ce que je pensais et effectivement cela fonctionne.

Cependant, ce n'est pas tout à fait ce que je cherche à faire...

En fait l'idéal serait que le Worksheet_Change se joue sur 2 feuilles:

==> Quand je modifie une cellule dans l'onglet 'Formulaire', le flag "X" se crée pour la ligne correspondante dans l'onglet 'Consolidé'...(voir fichier joint plus tôt sur le fil).

J'ai fait quelques tests mais cela ne semble pas fonctionner, je pense que j'écris mal la macro...

Si tu as quelques billes sur le sujet, elles sont les bienvenues!

Merci par avance
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 185
dernier inscrit
salhit