VBA : Changer le contenu d'une cellule

Bonjour,

Je souhaiterai effectuer une macro VBA pour changer le contenu des cellules du premier onglet "Planning" par les informations données dans le second onglet "Name".

Est-il possible d'effectuer cela ?

Merci par avance pour votre support !

7essai-1.xlsm (13.90 Ko)

Bonjour,

Ci-joint un essai par insertion d'une RECHERCHEV sur table structurée. Aussi obtenable par POWER QUERY sur feuille différente.

Sub COR()
[B2].Formula = "=IF(A2="""","""",IFERROR(VLOOKUP(A2,COR,2,FALSE),A2))" 'Insertion formule
ActiveSheet.ListObjects("BDD").ListColumns(2).DataBodyRange.Copy 'Copie colonne B
[A2].PasteSpecial Paste:=xlPasteValues 'Collage valeur A2
Columns(2).Delete 'Suppression colonne B
End Sub

Cdlt,

Bonjour,

Merci pour rapide retour.

Quand je copie-colle votre code sur un nouveau fichier, il ne marche pas.

Y a t-il quelque chose a rajouter ?

Merci par avance.

Bonjour,

Il me faut plus de précision. Qu'entendez-vous par, il ne marche pas ? Quelle est la manipulation réalisée ? Quel est le résultat obtenu et attendu ? Un message d'erreur ? La structure du classeur est-elle la même que celle fournie ?

La seule chose en plus du code est de transformer vos 2 tableaux en tables structurées nommées BDD (celles ayant accueillir les nouvelles données) et COR (la table de correspondance) afin de faciliter l'adressage des valeurs selon la manipulation suivante :

2021 04 07 22 31 14 presentation1 powerpoint

Je vous laisse étudier afin que votre fichier ai la même structure que celui que je vous ai envoyé.

Cldt,

Bonjour,

Merci pour votre retour, je souhaiterai avoir plus d'informations pour pouvoir utliser cette macro dans pluiseurs fichiers.

Serait-il possible d'avoir cette macro sans tables structurées (mais plutot en désignant les emplacements directement des onglets) ?

Merci d'avance !

Bonjour,

Sans table structurée selon votre demande :

Sub COR()
Dim WS_COR$, LR%
WS_COR = Worksheets(2).Name & "!A:B" 'Défini la 2ème feuille et plage "A:B" de cette feuille comme table correspondance
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne feuille Planning
[B1].Formula = "=IF(A1="""","""",IFERROR(VLOOKUP(A1," & WS_COR & ",2,FALSE),A1))" 'Insertion formule
Range("B1:B" & LR).FillDown 'Recopie formule B1 jusqu'à dernière ligne
Range("B1:B" & LR).Copy 'Copie B1 jusqu'à dernière ligne
[A1].PasteSpecial Paste:=xlPasteValues 'Collage valeur A1
Columns(2).ClearContents 'Nettoyage colonne B
End Sub

Cdlt,

Bonjour,

Génial, c'est exactement cela qu'il me faut.

Cependant, il doit avoir une erreur car voici le résultat obtenu.

Encore merci pour votre support !

image

Bonjour,

Pour le coup il ne te faut plus de table structurée car je met une formule en B1 ce qui n'est pas possible dans une en tête de table structurée.
Donc reconvertissez vos données en plage simple, dans la capture d'écran que je vous avais faite, après avoir cliqué sur une des cellules du tableau BDD/Création/Convertir en plage.

N'oubliez pas de remettre des valeurs réelle de correspondance dans votre colonne A avant de réactiver la macro. En effet, si vous réactivez la macro une nouvelle fois, vous n'aurez que des 0 car la correspondance ne sera pas trouvée.

Cdlt,

Bonjour,

Ayant effectué les modifications demandées dans mon fichier, j'ai toujours des cases vides.

Est-ce qu'il y a un probleme ?

Merci par avance.

Bonjour,

Oui j'ai un soucis car la feuille en 2ème position ne s'appelle pas name, c'est la feuille 3 en l’occurrence dans votre classeur.

2021 04 09 13 15 52 microsoft visual basic pour applications planning essai xlsm arret sheet1

Donc pour que vous fassiez la maintenance et choisissiez la façon la plus simple pour vous de gérer votre fichier effectuez les modifications suivantes :

WS_COR = Worksheets(2).Name & "!A:B" 'Valeur initiale dans le code fourni
WS_COR = "Name!A:B" 'Si votre feuille de correspondance s'appelle toujours Name
WS_COR = Worksheets(3).Name & "!A:B" 'En fonction de la position de la feuille de correspondance, ici la 3ème feuille

A vous de choisir entre les 2ème et 3ème ligne laquelle vous convient le mieux à la place de la 1ère ligne. Ici j'ai choisir la 2ème ligne, qui est plus facile à gérer je trouve.

En espérant que mes explications étaient claires.

Cdlt,

Super cela marche maintenant parfaitement !

Par contre, il efface mes données dans la colonne B.

J'ai en effet rajouté des données, il y a des données de la colonne A jusqu'a la colonne AC.

Est-il possible de corriger cela ?

Bonjour,

Dans ce cas :

Sub COR()
Dim WS_COR$, LR%
WS_COR = "Name!A:B" 'Défini la 2ème feuille et plage "A:B" de cette feuille comme table correspondance
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne feuille Planning
[AF1].Formula = "=IF(A1="""","""",IFERROR(VLOOKUP(A1," & WS_COR & ",2,FALSE),A1))" 'Insertion formule
Range("AF1:AF" & LR).FillDown 'Recopie formule AF1 jusqu'à dernière ligne
Range("AF1:AF" & LR).Copy 'Copie AF1 jusqu'à dernière ligne
[A1].PasteSpecial Paste:=xlPasteValues 'Collage valeur A1
Columns(32).ClearContents 'Nettoyage colonne AF
End Sub

J'ai mis AF pour laisser de la marge au cas où.

Cdlt,

Super cela marche parfaitement !!!

Encore merci !

Bon week-end !

Rechercher des sujets similaires à "vba changer contenu"