Mise à jour d'une colonne à partir d'une autre feuille

Bonjour

Je souhaiterai mettre à jour une colonne à partir d’un autre Onglet.

J’ai un import depuis une base SQL et je souhaiterai mettre à jour une colonne spécifique sur une feuille différente

Merci par avance de votre aide
VBA mis à jour d’une colonne.xlsx (190,8 Ko)

Bonjour,
Pouvez-vous nous préciser l’onglet et la colonne ?
Si non, voici :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveWorkbook.RefreshAll
End Sub

Pour actualiser le classeur à chaque changement de feuille.
PS: A mettre dans ThisWorkbook
Will

1 « J'aime »

Bonsoir
Tout d’abord merci d’avoir pris la peine de répondre.
La colonne est dans le fichier Excel mis à disposition
N’hésites pas
Bonne soirée à tous

Bonsoir,
Vous avez pu tester l’code ?

Bonjour,
Voici une proposition avec VBA
VBA mis à jour d’une colonne.xlsm (219,6 Ko)

Bonsoir Patrick,
Mon problème a été résolu avec un adorable contributeur de forum :slight_smile: Ce code m’est personnel mais je le partage car il fonctionne très bien.
Au final nous avons, par rapport à un fichier source mis à jour depuis une base SQL, mis à jour tous les onglets commençant par FR. FR dans notre cas correspondant à une colonne de notre fichier source qui correspond à une région (FR - FRANCE). SI l’enregistrement existe dans la base SQL et pas dans l’onglet correspondant alors on le créé. Si par contre l’enregistrement existe dans l’onglet mais pas dans la base alors on l’archive.
ça parait simple …

Ci-dessous le code
Sub MAJ()
Dim C As Range, Ligne As Long, D As Range, L As Long
Dim Plg As Range, Col As Long, Array1, Arrray2, PlgA As Range
Dim Sh As Worksheet, Plg1 As Range
Array1 = Array(« 1 », « 0 », « 10 », « 33 », « 5 », « 65 », « 66 », « 55 », « 8 », « 6 », « 59 », « 12 », « 13 », « 15 », « 14 », « 16 », « 62 », « 57 », « 4 »)
With Sheets(« Base SQL »)
For Each C In .Range(« BH2 », .Cells(.Rows.Count, 60).End(xlUp))
Set Plg = .Range(.Cells(C.Row, 1), .Cells(C.Row, « BN »))
With Sheets(.Cells(C.Row, 61).Value)
If Application.CountIf(.[A:A], Plg(1)) = 0 Then
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Ligne, 2) = Date
.Cells(Ligne, 1) = Plg(1)
For i = 2 To 18
.Cells(Ligne, i + 1) = Plg(Array1(i))
Next i
End If
End With
Next C
End With
'MAJ Archive
Set Plg = Sheets(« base SQL »).[A:A]
Set PlgA = Sheets(« Archivage »).[A:A]
For Each Sh In Sheets
If Left(Sh.Name, 2) = « FR » Then
With Sh
For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Application.CountIf(Plg, .Cells(i, 1).Value) = 0 And _
Application.CountIf(PlgA, .Cells(i, 1).Value) = 0 Then
Set Plg1 = .Cells(i, 1).Resize(, 27)
With Sheets(« Archivage »)
L = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Plg1.Copy
.Cells(L, 1).PasteSpecial xlValues
.Cells(L, 28) = Date
Plg1.EntireRow.Delete
End With
End If
Next i
End With
End If
Next Sh
End Sub

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.