Pour un nouvel utilisateur d'Excel, je resterais loin de VBA sauf si nécessaire. Si je comprends bien votre question, vous ne pouvez la résoudre qu'avec des formules. J'ai essayé de les rendre aussi simples que possible.
Premièrement, je conserverais le jeu de données d'origine en travaillant sur une image des données source. C'est utile à des fins d'audit et cela peut vous aider à mieux comprendre son fonctionnement. Les colonnes ressembleraient à ceci:
ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
-------------------------------------------------- -
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 réduit. La première colonne est la colonne A, les en-têtes de colonne sont à la ligne 1.)
Nous attribuerons un nouvel identifiant à l'élément enfant dans la colonne Nouvel identifiant et son identifiant parent sera automatiquement évalué dans la colonne Nouvel identifiant parent.
ID tapés
Pour l'instant, il suffit de copier-coller les valeurs d'identifiant dans la colonne Nouvel identifiant:
ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 | 0 | 1000000000 |
1100000000 | 1000000000 | 1100000000 |
1100000001 | 1100000000 | 1100000001 |
1200000000 | 1000000000 | 1200000000 |
1200000001 | 1200000000 | 1200000001 |
1200000002 | 1200000000 | 1200000002 |
Puis dans la première cellule de l'ID nouveau parent, entrez la formule suivante: =VLOOKUP($B2,$A:$C,3,FALSE)
. Cette formule permet à Excel de regarder verticalement. Il 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 disposition de nos données, cela signifie réellement "recherchez l'ID parent dans la colonne ID et, lorsque vous trouvez une correspondance exacte, renvoyez son nouvel ID". À l'heure actuelle, les nouveaux identifiants sont identiques à l'identifiant d'origine, nous nous en occuperons plus tard. Si vous avez besoin d'explications supplémentaires sur l'utilisation de fonctions (comme VLOOKUP
) dans les formules, cliquez sur le fx
bouton situé en regard de la barre de formule, puis sur le lien d'aide "Aide supplémentaire 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 de l'erreur #N/A
. Cela est dû au fait que le premier ID parent ne peut pas être trouvé dans la colonne ID. Ceci est logique puisque le plus haut parent n'a, par définition, aucun parent.
Pour traiter ce cas, nous allons mettre à jour notre formule =IF($B2=0,0,VLOOKUP($B2,$A:$C,3,FALSE))
. Il se lit "si la valeur de la cellule B2 est 0, puis renvoie 0, sinon recherchez [...]" ou "si l'ID parent est 0, puis renvoie 0, sinon recherchez son nouvel ID".
Il est temps d'appliquer cette formule à l'ensemble de la colonne, ce que vous pouvez faire en un simple copier-coller:
ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
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
Remplacez maintenant un nouvel identifiant. Comme dans votre exemple, remplacez 1000000000
par 1
. Vous verrez immédiatement les mises à jour du nouvel ID parent avec le nouvel identifiant. Rejouer et remplacer 1100000000
par 10
:
ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 | 0 | 1 | 0
1100000000 | 1000000000 | 10 | 1
1100000001 | 1100000000 | 1100000001 | dix
1200000000 | 1000000000 | 1200000000 | 1
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000
C'était amusant! Mais le faire mille fois, non merci, non?
Identifiants automatiques
C'est là que brille Excel, car une fois que vous avez réfléchi, il fera tout le travail. Dans la cellule C4, type dans cette formule: =C3+10
. Celui-ci ajoute dix à la valeur dans la cellule C3, la cellule juste au-dessus, incrémentant effectivement le nouvel identifiant de dix. Copiez-collez-le jusqu'à la fin de la colonne et vous êtes tous ensemble:
ID | ID parent | Nouvel identifiant | Nouvel identifiant parent
1000000000 0 1 0
1100000000 1000000000 | 10 | 1
1100000001 1100000000 | 20 | dix
1200000000 1000000000 | 30 | 1
1200000001 1200000000 | 40 | 30
1200000002 1200000000 | 50 | 30
Copier-coller des formules
Un dernier mot de prudence. Je suppose que vous utiliserez les nouveaux identifiants et les nouveaux identifiants de parent, éventuellement dans d'autres classeurs. Dans ce cas, vous souhaiterez probablement faire un collage spécial , pour ne conserver que la valeur, pas la formule.
Supposons qu'une fois que vous avez terminé, vous souhaitez supprimer les colonnes ID d'origine et ID parent. Avant de le faire, copiez les colonnes Nouvel ID et Nouvel ID Parent comme vous le faites habituellement. Ensuite, au lieu de coller, utilisez la special paste
commande et choisissez Valeurs, puis cliquez sur OK. La special paste
commande est disponible avec un clic droit sur la destination, entre autres lieux.