XL 2016 RechercheV plusieurs résultats

anthonyexcel

XLDnaute Nouveau
Bonjour,
Je suis nouveau ici dans se forum !
Je souhaite faire une rechercheV en VBA concernant des traductions.
En pièce jointe un début de prog en VBA cela fonctionne mais il faudrait afficher dans la colonne à coté la deuxième traduction. 1er traduction en B2 et deuxième traduction en C2..
Comment faire ?
Vous avez une solutions ?

Merci,
Cordialement,
Anthony
 

Pièces jointes

  • !-Support- -Traduction Automatique De Langue-!.xlsm
    386.2 KB · Affichages: 18
  • Traduction en Slovaque.xlsx
    591.1 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je ne sais trop ce que vous cherchez exactement à faire car je n'ai rien trouvé en deuxième traduction à mettre en C2, mais votre macro corrigée pourrait donner ceci , bien que ce ne soit pas la façon la plus performante de faire les choses sur environ 40000 lignes.
VB:
Sub TraductionBEA()
 With ThisWorkbook.Sheets("Feuil1")
        .Range("B2:B40000").Formula = "=If($A2<>"""",VLOOKUP($A2,'[fichier.xlsx]User Texts'!$A$2:$B$40000,2,FALSE),"""")"
        ' Si vous voulez ne conserver que les valeurs (traduction sans formule)
        ' décommenter la ligne ci-dessous
        ' .Value =.Value
End With
    MsgBox "Traduction effectuée"

End Sub

La colonne A ayant de nombreuses cellules vides, j'ai rajouté une condition à votre formule.
Pour la colonne C se pourrait être un truc du genre :

.Range("C2:C40000").Formula = "=If($A2<>"""",VLOOKUP($A2,'[fichier.xlsx]User Texts'!$A$2:$C$40000,3,FALSE),"""")"


Personnellement je regarderai du côté de power query (inclus dans "Données/Obtenir des données/A partir d'un fichier/A parti d'un classeur")
Cordialement
 

anthonyexcel

XLDnaute Nouveau
Merci pour votre réponse dans un premier temps.
La formule donnée est pas trop mal mais en colonne C j'aurais souhaité avoir les doublons de la rechercheV exemple dans le fichier source en A4= test en A5=test en B1=Essai1 et B2=Essai2 donc actuellement dans le fichier traduction automatique il va récupérer que la cellule B1.J’aurais souhaité dans le fichier traduction automatique avoir en B1 Essai1 et en C1 Essai2.
Voir pièce jointe
Je ne sais pas si je suis assez clair.

Merci beaucoup pour votre réponse
Cordialement.
 

Pièces jointes

  • Copie de !-Support- -Traduction Automatique De Langue-!-1.xlsm
    389.2 KB · Affichages: 4
  • Traduction en Slovaque.xlsx
    600.1 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Sauf à compliquer des formules Decaler, une simple RechercheV ne le fera pas. Il vous faut une fonction matricielle (Petite.Valeur) ci-dessous appelée par la fonction AGREGAT, qui optimise les temps de calcul et de recherche. Mais Bon courage pour les temps d'attente !

Si j'en ai le temps cet après midi, j' essaierais un exemple par PowerQuery.

Sur la base les deux fichiers du post #3 :
VB:
 With ThisWorkbook.Sheets("Feuil1")
        '
        ' Ne pas engendrer de calculs lors de la copie des formules
        Application.Calculation = xlCalculationManual
        .Range("B4:D40000").Formula = "=IF($A4<>"""",INDEX('[Traduction en Slovaque.xlsx]User Texts'!$B$4:$B$40000," & _
                "AGGREGATE(15,6,ROW('[Traduction en Slovaque.xlsx]User Texts'!$A4:$A40000)/('[Traduction en Slovaque.xlsx]User Texts'!$A4:$A40000 =$A4),COLUMN(A$4))-3),"""")"
        Application.Calculation = xlCalculationAutomatic
        '
        ' Calculer la feuille (bon courage)
        .Calculate
   End With

Bon courage
 

anthonyexcel

XLDnaute Nouveau
Merci beaucoup en effet le temps de calcul est trop long pour l'application.
Le seul moyen est de passer par PowerQuery donc ?
Est ce possible d’insérer une variable pour le nombre de ligne (dans mon projet 40000 mais elle peut varier).
Il faudrait que l’opérateur la rentre manuellement suite à un inputbox par exemple. .
((Range("B4:D40000"))-->((Range("B4:colonne")) par exemple.
Est-ce possible également d’insérer une liste déroulante avec les différents fichier excel exemple dans mon cas d'avoir : -->Traduction en Slovaque.xlsx
Traduction en Espagnol.xlsx
Traduction en chinois.xlsx
Cela permet d'éviter a l'opérateur de chercher le dossier et le fichier.

Merci encore de votre aide,
Cordialement,
Anthony
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Hola ! Hola ! conformément à la charte du forum on va se contenter d'une question par discussion :

Le choix du mode de traduction

Je viens de tenter PowerQuery, mais les temps sont également trop longs.
D'ailleurs cela m'a permis de voir qu'il ne s'agissait pas simplement de trouver des correspondances de mots mais de textes entiers. Pas étonnant que ça prenne autant de temps.
Quel intérêt de faire la 'traduction' d'un tiret, d'un 0 d'une valeur comme 100%, d'un texte comme :
Information on the link :
ID link in Hexa : 16#<field ref="1" />
TSAP local : <field ref="0" />
TSAP Distant : <field ref="2" />
More details on the link state available on the webserver."
qui devient en slovak :
<field ref="1" /><field ref="0" /><field ref="2" />

Dans votre colonne d'anglais gb-GB vous avez des textes en français ! ?

Ne demandez pas à excel de faire ce pour quoi il n'est pas prévu.

Cordialement
 

anthonyexcel

XLDnaute Nouveau
Re,
Ce sont pour des projets spécifiques ensuite la colonne sera réimporter dans un projet Auto. C'est vraiment spécifique.
Dernier point et je vous laisse tranquille !
Ci-dessous pourquoi cela ne fonctionne pas. La variable "choix" ne prends pas en compte le fichier pour la formule..
1611840805257.png

Merci beaucoup,
Cordialement
Anthony
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Il faut essayer de comprendre ce que vous faîtes.
Voyez les différences entre le chemin du fichier retourné par Choix et le besoin d'excel en matière de liens vers un fichier externe dans une formule !

VB:
Sub TraductionBEA2()
    Dim Formule As String
    Dim i As Integer
   
    MsgBox ("Selectionner le fichier référent pour votre traduction ")
    '
    ' Rajouter un titre à la fenêtre de choix du fichier
    choix = Application.GetOpenFilename("Fichiers Excel (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm", _
                Title:="Selectionnez le fichier référent pour votre traduction")


    If choix = False Then
        MsgBox "Programme arrêté: vous n'avez pas selectionné de fichier"
    Else
        '
        ' Affichage dans la fenêtre exécution (CTRL+G pour l'ouvrir) du choix utilisateur
        Debug.Print choix
        '
        ' Inclure le Crochet ouvrant au bon endroit pour la formule
        '
        ' Position du dernier séparateur de dossier
        i = InStrRev(choix, Application.PathSeparator)
        '
        ' Reconstruction du chemin pour formule excel
        choix = Left(choix, i) & "[" & Right(choix, Len(choix) - i)
        '
        ' Construction de la formule
        Formule = "=If($A2<>"""",VLOOKUP($A2,'" & choix & "]User Texts'!$A$2:$B$40000,2,FALSE),"""")"
        '
        ' affichage de la formule dans la fenêtre d'exécutionpour vérification
        ' supprimer ou commenter la ligne lorsque tout est ok
        Debug.Print Formule
       
        With ThisWorkbook.Sheets("Feuil1").Range("B2:B40000")
            .Formula = Formule
            .Value = .Value
        End With

        MsgBox "Traduction effectuée"
    End If
End Sub

Bonne recherche et apprentissage
 

Discussions similaires

Statistiques des forums

Discussions
314 636
Messages
2 111 456
Membres
111 144
dernier inscrit
shura_77