Copie de lignes d'un fichier vers un autre en recherchant une valeur

Bonjour la communauté,

Je galère à réaliser la dernière macro de mon fichier c'est pourquoi je fais appel à la communauté pour m'aider

J'ai deux fichiers Excel. Pour faire simple, un premier est une base de données brut et l'autre un écran de visualisation et modification.

J'ai créé des macro pour importer des données du fichier "Table_Gestion_des_DI" dans le fichier "InterfaceGestionSansMacro" la pas de soucis.

En revanche, lorsque j'ai ajouté des modifications sur les lignes importés dans les colonnes de S à AZ du fichier "InterfaceGestionSansMacro" je n'arrive pas à exporter les lignes modifiées vers la base de données en cherchant le numéro de DI dans la colonne AY.

Je précise que les colonnes sont aux mêmes positions d'un fichier à l'autre.

Help! D'habitude je me débrouille en bidouillant des macro trouvées sur un célèbre moteur de recherche mais la je n'y arrive pas

Merci a ceux qui voudront bien m'aider

Bonjour,

Je sais pas si c'est moi mais les fichiers ne contiennent pas de macro .

?!? lol

Oui je les ai viré car certains demandent sans par protection.

Le voila avec les macros.

J'ai essayé d'adapter le code de ce post mais sans succès. Mes connaissances sont beaucoup trop faibles en VBA.

https://forum.excel-pratique.com/excel/macro-excel-recherche-d-une-valeur-et-copie-de-ligne-t45075.h...

Bonjour tout le monde! Personne pour m'aider?

Vu que je n'y arrive pas, je tente une nouvelle approche.

Voila ce que j'ai réussi à faire pour le moment et qui fonctionne :

Sub SaveModif()

'Ouverture du fichier "Table_Gestion_des_DI" => La base de donnée.

    Workbooks.Open Filename:="G:\MAINTENANCE\D-Martin\Table_Gestion_des_DI.xlsm"

'Copie de la valeur sur l'autre fichier car je ne n'ai pas trouvé comment faire pour la prendre directement sur le fichier "InterfaceGestion"

    Workbooks("InterfaceGestion").Sheets("EcranVisu").Range("AY7").Copy

    Sheets("Tables").Select
    Range("BA1").Select
    ActiveSheet.Paste

'Copie de la ligne à transférer dans le fichier "Table_Gestion_des_DI"

    Workbooks("InterfaceGestion").Sheets("EcranVisu").Range("A7:AZ7").Copy

'Rechercher la valeur contenue dans "BA1" sur la Sheets("Tables")
        'A faire!

'Coller les valeurs copiées sur la ligne de la valeur trouvée
        'A faire!

'Supprimer la valeur stocké en "BA1"

    Sheets("Tables").Range("BA1").ClearContents

'Enregistrer le fichier et le fermer.

    Workbooks("Table_Gestion_des_DI").Close SaveChanges:=True

End Sub

J'ai besoin d'aide pour les deux autres noté "A faire". Surtout pour rechercher la valeur dans la plage.

Si quelqu'un veut bien m'aider s'il vous plaît. HELP!

Merci d'avance!

Ton problème c'est que tu ne fais pas référence à un numéro de ligne bien précis.

à l'ouverture de ton fichier d'import, tu renseignes le num de ligne,

dim iLigne as integer

'quand tu récupère la valeur en "AZ" & iLigne, ('iligne étant le numéro de ta ligne)
iLigne = range("AZ7").row

'au moment de coller les valeurs, tu cibles par : 
range("AZ" & iLingne). value = "ta valeur"

c'est une idée.

Bonjour,

Pourquoi avoir 2 fichiers distincts ? Pour ne pas avoir cette base sous un nouvel onglet (éventuellement masqué) du fichier interface ?

J'ai l'impression que ce serait quand même beaucoup plus simple, d'autant plus que vous communiquez avec la base en continu.

Cdlt,

Bonjour, merci de regarder à mon problème

J'ai plusieurs fichiers (3 exactement) pour plusieurs raisons :

- éviter les problèmes de lecture seule.

- avoir une base de donnée propre en vue de l'intégrer dans une future GMAO.

- donner l’accès à la base qu'à certaines personnes.

J'ai donc :

- un fichier de saisie et visualisation des données de la base (fonctionnel).

- une base de donnée (fonctionnelle).

- un fichier de modification de certaines données de la base (reste la fameuse macro pour être fonctionnel).

@salmanasard : Merci pour ton bout de macro. Je n'arrive pas à le rendre fonctionnel. Apparemment, il n'aime pas le "value =" lors de la compilation. De plus, le "ta valeur" ne colle pas tout a fait à ce que j'ai besoin car il faudrait qu'il se base directement sur l'information stocké dans la celulle de l'onglet "EcranVisu" pour la rechercher dans l'onglet "Tables".

Bonjour la communauté,

J'ai finis par réussir à faire le code que je souhaitais. Sans aides, cela fût très compliqué ^^

Le résultat fonctionne mais je pense que ce code est une vrai usine à gaz et n'est pas du tout optimisé xD

Je le détails si dessous pour si quelqu'un souhaite essayer de l'améliorer ou souhaite s'en inspirer :

Sub SaveModif()

    Dim variable As Long
    Dim rngTrouve As Range

' Mise en mémoire de la valeur à rechercher dans "variable"

    variable = Workbooks("InterfaceGestion").Sheets("EcranVisu").Range("AY7").Value
    Range("AY7").Value = variable

' Copie des valeurs à transférer dans la base de données

    Range("A7:AZ7").Copy

' Ouverture de la base de données

    Workbooks.Open Filename:="G:\MAINTENANCE\D-Martin\Table_Gestion_des_DI.xlsm", Password:="StaffMaintenance"

    Sheets("Tables").Select

' recherche de la variable en colonne AY

    Range("AY:AY").Activate

    Set rngTrouve = Nothing
    Set rngTrouve = ActiveSheet.Columns(51).Cells.Find(what:=variable, LookIn:=xlValues, Lookat:=xlWhole)
    If rngTrouve Is Nothing Then

        ' N° de DI inexistant -> message d'alerte
        MsgBox ("Ce numéro de DI n'existe pas!!!")
        Else

        ' N° de DI existant -> Copie des données A7:AZ7 de la sheet EcranVisu
        rngTrouve.Select
        rsncln = ActiveCell.Offset(0, 1).Value
        ActiveCell.EntireRow.Select
        ActiveCell.PasteSpecial

    End If

' Enregistrer le fichier et le fermer.

    Workbooks("Table_Gestion_des_DI").Close SaveChanges:=True

' Suppression de la ligne qui vient d'être copiée.

    Range("A7").Select
    ActiveCell.EntireRow.Delete

End Sub

Bonjour,

Voici un essai mais on peut sûrement mieux faire...

Sub SaveModif()

Dim wbtable as workbook
Dim wsvisu as worksheet, wstables as worksheet
Dim variable As Long
dim rsncln

' Mise en mémoire de la valeur à rechercher dans "variable"
Set wbtable = Workbooks.Open(Filename:="G:\MAINTENANCE\D-Martin\Table_Gestion_des_DI.xlsm", Password:="StaffMaintenance") 'ouverture
Set wstables = wbtable.Sheets("Tables") 'feuille tables
Set wsvisu = Workbooks("InterfaceGestion").Sheets("EcranVisu") 'feuille ecranvisu

variable = wsvisu.Range("AY7").Value 'valeur dont on cherche l'existence

with wstables 'sur feuille tables
    if application.countif(.range("AY:AY"), variable) = 0 then 'si variable n'existe pas en AY
        MsgBox "Ce numéro de DI n'existe pas!!!" 'msg
    else 'sinon
        ligne = application.match(variable, .range("AY:AY"), 0) 'renvoie la ligne de correspondance
        rsncln = .range("AZ" & ligne).Value 'à quoi sert rsncln ensuite ?
        .Range("A" & ligne & ":AZ" & ligne).value = wsvisu.Range("A7:AZ7").value 'copie valeurs visu sur tables à la ligne
    end if
end with

wbtable.Close SaveChanges:=True 'ferme et sauve

wsvisu.Range("A7:AZ7").Delete shift:=xlshiftup 'supprime ligne 7

Set wsvisu = nothing: Set wstables = nothing: Set wbtable = nothing 'liberation

End Sub

Cdlt,

Rechercher des sujets similaires à "copie lignes fichier recherchant valeur"