Copier données selon valeur d'une cellule

youklebambou

XLDnaute Junior
Bonjour à tous,
je cherche à copier les données d'une feuille 2 sur une feuille 1 mais en fonction des données d'une cellule.
je m'explique : sur la feuille 1 j'ai en B1 une date
en colonne A j'ai les dates du mois. quand je change la date B1 je souhaite que ca me copie et colle les données de la feuille 2 en face de la date
j'ai mis un fichier en pièce jointe pour être plus clair;
J'ai deja commencé un code mais il ne fonctionne pas...
merci d'avance
 

Pièces jointes

  • Test 1.xlsm
    18 KB · Affichages: 29

phlaurent55

Nous a quittés en 2020
Repose en paix
Bonjour,

avec ce code:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$B$1" Then Exit Sub
Set F = Feuil2
j = Day(Range("B1")) + 3
F.[B6].Copy Destination:=Cells(j, 2)
End Sub

ou celui-ci
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$1" Then Exit Sub
Set F = Feuil2
j = Day(Range("B1")) + 3
F.[B6].Copy Destination:=Cells(j, 2)
End Sub

à+
Philippe
 

youklebambou

XLDnaute Junior
Genial !!!! par contre je me suis aperçu que la ligne des valeurs (ici valeur F) en feuille 2 peut changer et se retrouver ailleurs.... en gros tu crois que dans ton code on peut inclure une recherche de nom precis avant la copie de la colonne correspondante?
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

je me suis aperçu que la ligne des valeurs (ici valeur F) en feuille 2 peut changer et se retrouver ailleurs....

en gros tu crois que dans ton code on peut inclure une recherche de nom precis avant la copie de la colonne correspondante?

Ce sera nécessaire de rechercher la valeur à copier puisqu'elle change de place

pour cela il faudrait voir le fichier

à+
Philippe
 

youklebambou

XLDnaute Junior
je me suis mal exprimer... dans la pièce jointe par exemple l'ordre de "valeur A B J F ou R" peut etre modifier (changement de ligne) moi je cherche a copier la valeur (en colonne B) de la valeur F (colonne A) mais Valeur F va etre un coup en ligne 6 un coup en ligne 8 etc etc.... le but etant de chercher le nom "valeur F" et de copier coller la colonne B associé
(je sais vraiment pas si je suis plus clair....):confused:
 

youklebambou

XLDnaute Junior
bon je suis chiant mais au final il me manque une chose... en fait j'ai plusieurs valeurs a copier dans plusieurs colonnes....je pensais qu'en mettant plusieurs if ça marcherait mais ça a l'air plus complexe....donc en gros il faudrait avec mon exemple : quand je rentre la date , dans la colonne B en face de la date ca me note la valeur F, en C la valeur J et en D la valeur B.....désolé mais je découvre un peu les fonctions...
 

youklebambou

XLDnaute Junior
merci !!!! c’était facile mais je bloquais....par contre j'ai une "Private Sub Worksheet_Change(ByVal Target As Range)" avant la formule qui me rapatrie les données d'un fichier .csv....dans un autre fichier j'utilise aussi cette private sub et des que je change la valeur d'une cellule ca prend en compte directement le rapatriement...alors que la je change la cellule et je dois retourner dessus pour que le rapatriement se fait...tu saurais a quoi c'est du???
 

youklebambou

XLDnaute Junior
Si ça peux t'aider ma formule :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$F$5" Then Exit Sub

Dim chemin$, nomfichier$
chemin = [W1] & "\" & "ICR"
nomfichier = [Z2] & ".csv"
Set F = Feuil13
Application.ScreenUpdating = False
On Error Resume Next
F.Cells.ClearContents 'RAZ
With Workbooks.Open(chemin & "\" & nomfichier).Sheets(1)
.UsedRange.TextToColumns .UsedRange.Cells(1), xlDelimited, Semicolon:=True
F.[A1].Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count) = .UsedRange.Value
F.[A1].Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count).Columns.AutoFit
.Parent.Close False
End With
If Application.CountA(F.UsedRange) Then F.Activate
Sheets("Mai").Select
If Not Intersect(Target, Range("F5")) Is Nothing Then
If Target = "" Then Exit Sub
For Each cellule In Sheets(13).Range("A1:F400")
If cellule = "A" Then Cells(Day(Range("F5")) + 9, 6) = cellule.Offset(0, 1)
If cellule = "B" Then Cells(Day(Range("F5")) + 9, 9) = cellule.Offset(0, 1)
If cellule = "C" Then Cells(Day(Range("F5")) + 9, 11) = cellule.Offset(0, 1)
If cellule = "D" Then Cells(Day(Range("F5")) + 9, 13) = cellule.Offset(-1, 6)
Next cellule
End If
End Sub
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

Sans explication plus précises, sans voir le fichier et avec ma boule de cristal qui me fait la gueule:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F5")) Is Nothing Then
If Target = "" Then Exit Sub

Dim chemin$, nomfichier$
chemin = [W1] & "\" & "ICR"
nomfichier = [Z2] & ".csv"
Set F = Feuil13
Application.ScreenUpdating = False
On Error Resume Next
F.Cells.ClearContents 'RAZ
With Workbooks.Open(chemin & "\" & nomfichier).Sheets(1)
.UsedRange.TextToColumns .UsedRange.Cells(1), xlDelimited, Semicolon:=True
F.[A1].Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count) = .UsedRange.Value
F.[A1].Resize(.UsedRange.Rows.Count, .UsedRange.Columns.Count).Columns.AutoFit
.Parent.Close False
End With
If Application.CountA(F.UsedRange) Then F.Activate
Sheets("Mai").Select

For Each cellule In Sheets(13).Range("A1:F400")
If cellule = "A" Then Cells(Day(Range("F5")) + 9, 6) = cellule.Offset(0, 1)
If cellule = "B" Then Cells(Day(Range("F5")) + 9, 9) = cellule.Offset(0, 1)
If cellule = "C" Then Cells(Day(Range("F5")) + 9, 11) = cellule.Offset(0, 1)
If cellule = "D" Then Cells(Day(Range("F5")) + 9, 13) = cellule.Offset(-1, 6)
Next cellule
End If
End Sub

à+
Philippe
 

youklebambou

XLDnaute Junior
Mon dieu....c'est à ça qu'on reconnait les boss!!!! ne change pas ta boule de cristal elle fonctionne très bien!!! mon dossier original comporte pas mal de données sensible donc pas moyen de l'envoyer et en faire un autre était compliqué....bref tu as trouvé du 1er coup! bravo et merci ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 467
Membres
103 226
dernier inscrit
smail12