Pour un nouvel utilisateur d'Excel, je me tiendrais à l'écart de VBA, sauf en cas de nécessité. Si je comprends bien votre question, vous pouvez la résoudre uniquement avec des formules. J'ai essayé de les rendre aussi simples que possible.
Tout d'abord, je préserverais l'ensemble des données originales en travaillant sur une image des données sources. C'est utile à des fins d'audit et cela peut vous aider à mieux comprendre comment cela fonctionne. Les colonnes ressembleraient à ceci :
ID | Parent ID | New ID | New Parent ID
----------------------------------------------------
1000000000 | 0 | |
1100000000 | 1000000000 | |
1100000001 | 1100000000 | |
1200000000 | 1000000000 | |
1200000001 | 1200000000 | |
1200000002 | 1200000000 | |
(Pour tous les exemples, j'utiliserai le même ensemble de données d'exemple réduit. La première colonne est la colonne A, les en-têtes de colonne sont sur la ligne 1).
Nous allons donner un Nouvel ID à l'élément enfant dans la colonne Nouvel ID et son ID parent sera automatiquement évalué dans la colonne Nouvel ID parent.
Identités dactylographiées
Pour l'instant, il suffit de copier-coller les valeurs d'ID dans la colonne Nouvel ID :
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1000000000 |
1100000000 | 1000000000 | 1100000000 |
1100000001 | 1100000000 | 1100000001 |
1200000000 | 1000000000 | 1200000000 |
1200000001 | 1200000000 | 1200000001 |
1200000002 | 1200000000 | 1200000002 |
Ensuite, dans la première cellule de l'ID du nouveau parent, entrez la formule suivante : =VLOOKUP($B2,$A:$C,3,FALSE)
. Cette formule permet à Excel de regarder vers le haut verticalement. Elle se lit comme suit : "recherchez la valeur de la cellule B2 (ID parent) dans la colonne A (colonne ID) et lorsque vous trouvez une correspondance exacte, renvoyez la valeur dans la troisième colonne (colonne C, Nouveaux ID)".
Compte tenu de la structure de nos données, cela signifie en réalité "recherchez l'ID du parent dans la colonne ID et lorsque vous trouvez une correspondance exacte, renvoyez son nouvel ID". Pour l'instant, les nouveaux ID sont identiques aux ID d'origine, nous nous en occuperons plus tard. Si vous avez besoin de plus d'explications sur l'utilisation des fonctions (telles que VLOOKUP
) dans les formules, cliquez sur le bouton fx
juste à côté de la barre de formule et ensuite le lien d'aide "plus d'aide sur cette fonction".
Dès que vous tapez Entrée, la formule sera remplacée par son résultat et dans ce cas, la valeur d'erreur #N/A
. Cela est dû au fait que le premier ID du parent ne peut être trouvé dans la colonne ID. Ceci est logique puisque le parent le plus haut n'a par définition aucun parent.
Pour faire face à ce cas de figure, nous allons modifier notre formule en =IF($B2=0,0,VLOOKUP($B2,$A:$C,3,FALSE))
. Il se lit comme suit : "si la valeur de la cellule B2 est 0, alors retournez 0, sinon cherchez [...]" ou "si l'ID du parent est 0, alors retournez 0, sinon cherchez son nouvel ID".
Il est temps d'appliquer cette formule à l'ensemble de la colonne, ce que vous pouvez faire par un simple copier-coller :
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1000000000 | 0
1100000000 | 1000000000 | 1100000000 | 1000000000
1100000001 | 1100000000 | 1100000001 | 1100000000
1200000000 | 1000000000 | 1200000000 | 1000000000
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000
C'est là que la magie opère
Maintenant, écrasez un nouvel ID. Comme dans votre exemple, remplacez 1000000000
avec 1
. Vous verrez que l'ID du nouveau parent se met immédiatement à jour avec le nouvel ID. Jouez à nouveau et remplacez 1100000000
avec 10
:
ID | Parent ID | New ID | New Parent ID
1000000000 | 0 | 1 | 0
1100000000 | 1000000000 | 10 | 1
1100000001 | 1100000000 | 1100000001 | 10
1200000000 | 1000000000 | 1200000000 | 1
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000
C'était amusant ! Mais le faire un millier de fois, non merci, pas vrai ?
Identités auto-valorisées
C'est là qu'Excel excelle, car une fois que vous avez fait le gros du travail, il s'occupe de tout. Dans la cellule C4, tapez cette formule : =C3+10
. Celle-ci ajoute dix à la valeur de la cellule C3, la cellule juste au-dessus, ce qui incrémente effectivement le Nouvel ID de dix. Copiez-collez-le jusqu'à la fin de la colonne et vous êtes prêt :
ID | Parent ID | New ID | New Parent ID
1000000000 0 1 0
1100000000 1000000000 | 10 | 1
1100000001 1100000000 | 20 | 10
1200000000 1000000000 | 30 | 1
1200000001 1200000000 | 40 | 30
1200000002 1200000000 | 50 | 30
Copier-coller de formules
Un dernier mot d'avertissement. Je suppose que vous utiliserez les nouveaux ID et les nouveaux ID parent, peut-être dans d'autres classeurs. Dans ce cas, vous voudrez probablement faire un spécial collage, pour ne retenir que la valeur, et non la formule.
Disons qu'une fois que vous avez terminé, vous souhaitez supprimer les colonnes ID et ID parent d'origine. Avant de le faire, copiez les colonnes New ID et New Parent ID comme vous le faites habituellement. Ensuite, au lieu de coller, utilisez la fonction special paste
et choisissez Valeurs, puis cliquez sur OK. Le site special paste
est disponible, entre autres, par un clic droit sur la destination.
0 votes
Eh bien, peut-être que je suis trop bête. Mais je ne comprends pas. A quoi ressemblent vos données actuelles et à quoi devraient-elles ressembler après ? Peut-être qu'un exemple de classeur serait un bon moyen de le montrer.
0 votes
Je suis désolé, j'ai mis à jour la question avec les données de sortie souhaitées. Je vais également poster l'exemple de classeur.