Ne pas écraser les données

Hello le forum,

Le but de mon fichier est de mettre à jour mon TABLEAU A par rapport à mon TABLEAU B, en l’occurrence le salaire.

La recherchev pas de soucis.

Le problème est que j'ai des noms (TABLEAU A) qui ne sont pas dans dans mon TABLEAU B, si j'applique la recherchev, excel va m’écraser mes données que j'ai saisi à la main.

Pour résumer, je veux que si excel trouve le nom du TABLEAU A dans le TABLEAU B, il MAJ et s' il ne trouve pas, il laisse la valeur indiquée.

Avez-vous une petite solution à ce problème ?

Peut-être une petit macro ?

Merci à vous

Bonsoir,

Petite procédure classique pour faire ça :

Sub MajTableauA()
    Dim d As Object, ba, i%, Nm$
    Set d = CreateObject("Scripting.Dictionary")
    ba = Worksheets("Feuil2").Range("A1").CurrentRegion.Value
    For i = 3 To UBound(ba)
        d(ba(i, 1)) = ba(i, 2)
    Next i
    With Worksheets("Feuil1").Range("A1").CurrentRegion
        ba = .Value
        For i = 3 To UBound(ba)
            Nm = Left(ba(i, 1), InStr(1, ba(i, 1), ",") - 1)
            If d.exists(Nm) Then ba(i, 2) = CDbl(d(Nm))
        Next i
        .Value = ba
    End With
End Sub

Cordialement.

Hello MFerrand,

Est ce possible d'avoir des commentaires stp pour pouvoir mieux l'adapter a mon tableau réel ?

Merci pour la soluce.

Bonsoir,

1) Création d'un dictionnaire.

2) Récupération sous forme de tableau VBA du TableauB (les valeurs).

(VBA travaille plus vite avec des tableaux.)

3) Parcours des lignes de données du tableau et consttution des éléments du dictionnaire :

clé de l'élément = Nom, valeur de l'élément = Salaire (les clés sont uniques dans un dico).

4) Récupérattion sous forme tableau VBA du TableauA (on utilise la même variable, devenue disponible).

5) On parcourt les lignes de données de ce tableau, et à chaque ligne on en extrait le Nom.

6) On teste si un élément du dico existe avec un clé correspondant à ce Nom : si c'est le cas, on modifie le salaire porté dans le tableau par celui recueilli dans le dico (en le convertissant en nombre, le passage par le dico l'ayant converti en donnée de type String).

7) Le tableau entièrement parcouru, les salaires devant être mis à jour l'on été, on réaffecte donc ce tableau à la plage dont on l'avait extrait. Mais il est maintenant à jour.

Cordialement.

Hello MFERRAND,

Merci pour ces détails .

Par contre il y a un souci (de ma faute) quand j'ai adapté la macro à mon classeur, j'ai relevé deux choses que j'ai oublié d'indiquer ...

1- Quand j'ai par exemple DUPONT RICHARD et DUPONT BERTRAND, le script ne fait pas la différence

2- S' il n'y a pas de "," dans le nom il renvoie une erreur

Peux-tu m'aider à corriger ces 2 oublis de ma part stp.

Merci à toi.

Pas de réponse

Bonjour,

Ta méthode présuppose que tu n'aies pas de noms homonymes. S'il y en a, ils seront confondus en un seul !

Tes données à mettre à jour n'utilisant que le nom, le nom doit être un identifiant unique n'admettant aucun doublon pour que ça fonctionne...

Pour le second problème (éléments de la base à mettre à jour défectueux...), on peut au choix, considérer qu'en l'absence de prénom ce qui est mentionné constitue le nom, ou ne pas traiter ces cas défectueux.

Cordialement.

Bonjour à tous

Faisable dans PowerQuery (en add on sur 2010 et 2013, intégré à 2016)

L'absence de , suivi du prénom ne pose pas de problème en soi mais tant que tu n'a pas moyen de corriger l'homonymie on ne peux résoudre...

Rechercher des sujets similaires à "pas ecraser donnees"