Renvoyer automatiquement des données d'une feuille à une autre

Bonjour,

Je sollicite votre aide après plusieurs tentatives.

Je souhaite renvoyer des données d'une feuille sans formules à une autre avec formules dans le même classeur.

c'est faisable?

si oui, est ce que je dois faire ça avec condition ( colonne ou plusieurs colonnes ) pour que ma macro puisse reconnaître l’emplacement des cellules à coller? car j'ai pensé à coller copier la plage (toujours avec macro étant donnée que je dois utiliser ça plusieurs fois) sauf que je perds mes formules dans la feuille avec formules.

si je ne suis pas assez précise dans ma demande n'hésitez pas SVP.

Merci pour votre aide

Bonjour,

peux-tu mettre un exemple sur fichier excel ?

merci

cela faciliterait la réponse

Bonjour,

peux-tu mettre un exemple sur fichier excel ?

merci

cela faciliterait la réponse

avec exemple de données ou sans ?

Voici un fichier avec deux feuille 1 et 2

je veux copier valeur F2 dans F1 sans affecter les formules de la feuille 1. ( bon j'ai mis des étoiles au lieu de mettre des nombres j'espère que ça posera pas de problème)

256exempel.xlsx (28.26 Ko)

il n'y a aucune formule !!

ce n'est pas tout à fait représentatif ...

si la feuille X comporte des valeurs ... et que la feuille Y comporte des valeurs et des formules, que veux-tu faire là où il y a des formules ? ne rien faire ? je n'ai pas compris et le fichier ne m'a pas aidé !

Re Bonjour,

Merci pour votre compréhension.

Je dois reformuler le principe comme je comprends mieux le besoin aujourd'hui. J'ai toujours besoin de renvoyer automatiquement des données d'une feuille à une autre mais avec le principe suivant :

-- Dans la feuille "solde" : si on a une cellule colorées on regarde dans quelle colonne elle se trouve et ainsi dans la même ligne on regarde quel ID elle a . pour la marque aussi c'est toujours dans la même ligne que la cellule colorées.

  • - On récupère que la valeur de la cellule, le nom la marque et l'ID se sont les informations qui vont nous aider pour pouvoir placer la valeur dans la feuille "product".Dans cette feuille, on doit trouver le nom du produit (qui nous permet de trouver la colonne ) ainsi que l'ID & marque ( qui nous permet de trouver la ligne )
  • -> On trouve notre cellule grâce à ces trois conditions.

-- On colle ensuite la valeur récupérer dans la feuille "solde" et la coller dans la feuille " product".

Option : ajouter ensuite un commentaire qui indique l'ancienne valeur et la source de la nouvelle valeur ( nom feuille ) si commentaire existant, on le complète. Sachant qu'on a plusieurs feuille "solde_" qui alimente notre feuille "product".

je joins un fichier exemple simplifié.

Merci encore une fois pour votre patience et votre aide

89exemple1.xlsm (44.41 Ko)

r

Re Bonjour,

J'ai eu un bug, je voulais modifier le message précédent mais je ne pouvais pas...

Merci pour votre compréhension.

Je dois reformuler le principe comme je comprends mieux le besoin aujourd'hui. J'ai toujours besoin de renvoyer automatiquement des données d'une feuille à une autre mais avec le principe suivant :

-- Dans la feuille "solde" : si on a une cellule colorées on regarde dans quelle colonne ( numéro de colonne ligne 1 ) elle se trouve et ainsi dans la même ligne on regarde quel ID elle a.

  • - On récupère que la valeur de la cellule, le numéro colonne (ligne 1), la marque (facultative) et l'ID se sont les informations qui vont nous aider pour pouvoir placer la valeur dans la feuille "product".Dans cette feuille, on doit trouver le numéro de la colonne qui correspond ( colonne K = 11 -> le 11 est le numéro de colonne ligne 1 dans "solde" (qui nous permet de trouver la colonne ) ainsi que l'ID ( qui nous permet de trouver la ligne )
  • -> On trouve notre cellule grâce à ces trois conditions. (voir condition : marque peut être facultative )

-- On colle ensuite la valeur récupérer dans la feuille "solde" et la coller dans la feuille " product" et on garde sa couleur.

Option : ajouter ensuite un commentaire qui indique l'ancienne valeur et la source de la nouvelle valeur ( nom feuille ) si commentaire existant, on le complète. Sachant qu'on a plusieurs feuille "solde_" qui alimente notre feuille "product".

je joins un fichier exemple simplifié et adapté.

Merci encore une fois pour votre patience et votre aide

29test.xlsm (44.40 Ko)

-- Dans la feuille "solde" : si on a une cellule colorées on regarde dans quelle colonne ( numéro de colonne ligne 1 ) elle se trouve et ainsi dans la même ligne on regarde quel ID elle a.

La couleur n'est pas le résultat d'une MFC a priori. Pour ma compréhension, quelle est sa signification ?

A quel moment faut-il faire le transfert vers la feuille product ? Quel est l'élément déclencheur ? car il ne faudrait pas le répéter plusieurs fois pour une même cellule.

Bonjour Steelson

La couleur n'est pas le résultat d'une MFC a priori. Pour ma compréhension, quelle est sa signification ?

La couleur dans la feuille solde des cellules indique une modification faite sur les valeurs. comme ça on repère facilement les nouvelles valeurs.

A quel moment faut-il faire le transfert vers la feuille product ?Quel est l'élément déclencheur ?

Le transfert se fait lorsqu'on termine les modifications dans la feuille solde, pour changer les anciennes valeurs dans la feuille product par les nouvelles valeurs.

car il ne faudrait pas le répéter plusieurs fois pour une même cellule.

Tu penses qu'il ne faut pas répéter cette opération à plusieurs reprises ? c a d auj j'effectue le transfert ensuite je refais ça trois jours plus tard ? sinon, l'ID est unique donc je ne penses pas qu'il aura une répétition pour une même cellule.

-- On récupère que la valeur de la cellule, le numéro colonne (ligne 1)

pourquoi 70 en $L$1 de solde ?? 70ème ligne ?

voici

je pense que ta ligne 1 onglet solde est erronée ...

reste à mettre le commentaire

Sub transferer()
Dim f1 As Worksheet, f2 As Worksheet, id As Range, marque As String
Set f1 = Sheets("solde")
Set f2 = Sheets("product")
' transfert de f1 vers f2
With f1
    .Select
    For i = 8 To .Range("C" & Rows.Count).End(xlUp).Row
        If .Range("C" & i) <> "" Then
            For j = 6 To .Cells(1, Columns.Count).End(xlToLeft).Column
                ' le fond blanc n'est pas considéré comme couleur ici !
                If .Cells(i, j).Interior.ColorIndex <> xlColorIndexNone And .Cells(i, j).Interior.ColorIndex <> 2 Then
                    marque = .Range("D" & i).Value
                    If marque = "" Then
                        .Range("D" & i).Select
                        MsgBox "Marque absente en D" & i
                    Else
                        Set id = ici(f2.Range("B:B"), .Range("C" & i).Value, marque)
                        If Not id Is Nothing Then
                            'Debug.Print .Range("C" & i).Value, marque, id.Row, .Cells(1, j)
                            .Cells(i, j).Copy Destination:=f2.Cells(id.Row, .Cells(1, j))
                        End If
                    End If
                End If
            Next
        End If
    Next
End With
f2.Select
End Sub

Function ici(plage As Range, valeur1 As Variant, valeur2 As Variant) As Range
    With plage
        ok = False
        Set ici = .Find(valeur1, LookIn:=xlValues)
        If Not ici Is Nothing Then
            prem = ici.Address
            Do
                If ici.Offset(0, 5) = valeur2 Then ok = True
                If Not ok Then Set ici = .FindNext(ici)
            Loop While Not ici Is Nothing And ici.Address <> prem And Not ok
        End If
    End With
End Function

c'est quand même un peu tordu comme méthode, je pense qu'il aurait mieux valu faire une base de données, mais bon ...

20test.xlsm (52.90 Ko)

-- On récupère que la valeur de la cellule, le numéro colonne (ligne 1)

pourquoi 70 en $L$1 de solde ?? 70ème ligne ?

Non ce n'est pas la 70 éme ligne , c'est numéro attribuer à cette colonne dans la feuille solde. bon j'ai mis des numéros de moi même pour remplir et que ça soit représentatif mais dans mon explication précédente j'ai utilisée l'exemple de Ligne 1 dans "solde" on a une colonne qui a le numéro 11, avec un nom produit : jeandenim si on cherche jeandenim dans la feuille "product" on va le retrouver dans la colonne K qui est 11 en vrai. Je me suis dis si on utilsie ça comme condition le programme trouvera plus facilement la colonne que si on utilise le nom : jeandenim par exemple.

Je vais tester le code! Merci

Steelson,

Je viens de tester le code et il respecte parfaitement ce que je voulais comme résultat, dans le code que j'avais, il me manquait de la souplesse et il était beaucoup trop long et complexe. Le tien il est sublime!! bluffer merci

as tu utilisé aussi la marque comme condition ?

Set id = ici(f2.Range("B:B"), .Range("C" & i).Value, marque)
                        If Not id Is Nothing Then
                            'Debug.Print .Range("C" & i).Value, marque, id.Row, .Cells(1, j)
                            .Cells(i, j).Copy Destination:=f2.Cells(id.Row, .Cells(1, j))
                        End If

Je penses que oui d'après ma compréhension! mais quand on a deux ID avec deux marques différentes dans solde & product le code ne se perds pas.

par contre, si on garde dans la feuille product un seul ID ( de cet exemple) il va coller la mauvaise valeur. en tout cas j'ai remarqué ça grace à la couleur de la case avec l'exemple ID : 600.

Je te laisse regardé le test.

25test-2.xlsm (52.90 Ko)

Je ne penses pas tomber dans ce cas, mais c'est plus pour mieux comprendre le VBA.

Oui j'ai utilisé la marque (si absente il y a un message) ici :

Function ici(plage As Range, valeur1 As Variant, valeur2 As Variant) As Range
    With plage
        ok = False
        Set ici = .Find(valeur1, LookIn:=xlValues)
        If Not ici Is Nothing Then
            prem = ici.Address
            Do
                If ici.Offset(0, 5) = valeur2 Then ok = True
                If Not ok Then Set ici = .FindNext(ici)
            Loop While Not ici Is Nothing And ici.Address <> prem And Not ok
        End If
    End With
End Function

la marque est transmise à la fonction par la valeur2 ... tant que la valeur décalée de 5 colonnes par rapport à l'ID n'est pas égale à la marque (valeur2), je poursuis la recherche avec FindNext (c'est la première fois que j'utilise du reste ce findnext)

la marque est transmise à la fonction par la valeur2 ... tant que la valeur décalée de 5 colonnes par rapport à l'ID n'est pas égale à la marque (valeur2), je poursuis la recherche avec FindNext (c'est la première fois que j'utilise du reste ce findnext)

Je comprends mieux, Merci pour ton aide en tout cas.

Je te souhaite bon week-end,

Re bonjour,

Ce qui me reste à présent, c'est l'ajout d'un commentaire après le transfert des valeurs :

le but c'est d'insérer un commentaire qui permet de savoir l'ancienne valeur ainsi la source de la nouvelle valeur.

If Not .Comment Is Nothing Then
.Comment.Text = .Comment.Text & chr(13) & "valeur de la cellule precedente" & " " & "Nom de la feuille"
end if

ce code test si le commentaire est vide, si oui il ajoute le commentaire. Est ce que c'est possible de compléter le commentaire si ce dernier n'est pas vide?

Bonne soirée et merci

    If .Comment Is Nothing Then
        .AddComment
        .Comment.Text Text:="valeur de la cellule precedente" & " " & "Nom de la feuille"
    Else
        .Comment.Text Text:=.Comment.Text & vbCrLf & "valeur de la cellule precedente" & " " & "Nom de la feuille"
    End If

Bonjour, Meilleur vœux à tous

        .Comment.Text Text:=.Comment.Text & vbCrLf & "valeur de la cellule precedente" & " " & "Nom de la feuille"

Ici, le : "Nom de la feuille" indique qu'il faut préciser le nom de la feuille dans le code? ou ça récupère automatiquement le nom de la feuille source?

Re bonjour,

Dim f1 As Worksheet, f2 As Worksheet, Id As Range, marque As String
Set f1 = Sheets("solde")
Set f2 = Sheets("product")
' de f1 vers f2

de F1 vers F2 : faut il que les feuilles soit dans l'ordre ou le faite qu'on fasse f1 = sheets(" ") suffit pour que le VBA sache dans quelle feuille on est?

puis je utiliser le .ActiveSheet pour indiquer qu'on est dans la bonne feuille solde étant donné que je peux en avoir plusieurs dans le même classeur ?

merci

Rechercher des sujets similaires à "renvoyer automatiquement donnees feuille"