Actualisation d'un tableau puis recopie vers une autre feuille Le sujet est résolu

Forum pour toutes vos questions à propos d'Excel (avec ou sans macros) ...
darman78
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 14 novembre 2018
Version d'Excel : 2010 FR

Message par darman78 » 14 novembre 2018, 10:50

Bonjour a tous,
Cela fait à présent quelques jour que je bloque sur mon problème alors je me décide a venir vous en parler. Je dispose d'un tableau dans lequel il a y a différentes données, je souhaite recopier certaines colonnes sur une autre feuilles, jusque la tout va bien. Ce que je n'arrive pas à faire c'est, quand une information est rajoutée après la recopie du tableau, celle ci s'actualise dans le deuxième tableau sans décaler certaines colonnes qui, elles ne sont pas recopiées d'un tableau a l'autre.
J'espère avoir été clair dans mes explications :mrgreen:
Voici mon code:

Code : Tout sélectionner

Sub copie_tableau()
Application.EnableEvents = False
With Worksheets("Feuil1")                             
 
.Range("A2:A114").Copy Worksheets("Feuil2").Range("A6")
.Range("D2:D114").Copy Worksheets("Feuil2").Range("F6")
.Range("G2:G114").Copy Worksheets("Feuil2").Range("B6")
.Range("R2:R114").Copy Worksheets("Feuil2").Range("C6")
.Range("Z2:Z114").Copy Worksheets("Feuil2").Range("D6")
 
End With                                               
Application.EnableEvents = True


End Sub
Pouvez vous me venir en aide ?
Merci beaucoup
Avatar du membre
Pedro22
Membre impliqué
Membre impliqué
Messages : 1296
Appréciations reçues : 114
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par Pedro22 » 14 novembre 2018, 11:00

darman78 a écrit :
14 novembre 2018, 10:50
Bonjour a tous,
Cela fait à présent quelques jour que je bloque sur mon problème alors je me décide a venir vous en parler. Je dispose d'un tableau dans lequel il a y a différentes données, je souhaite recopier certaines colonnes sur une autre feuilles, jusque la tout va bien. Ce que je n'arrive pas à faire c'est, quand une information est rajoutée après la recopie du tableau, celle ci s'actualise dans le deuxième tableau sans décaler certaines colonnes qui, elles ne sont pas recopiées d'un tableau a l'autre.
J'espère avoir été clair dans mes explications :mrgreen:
Voici mon code:

Code : Tout sélectionner

Sub copie_tableau()
Application.EnableEvents = False
With Worksheets("Feuil1")                             
 
.Range("A2:A114").Copy Worksheets("Feuil2").Range("A6")
.Range("D2:D114").Copy Worksheets("Feuil2").Range("F6")
.Range("G2:G114").Copy Worksheets("Feuil2").Range("B6")
.Range("R2:R114").Copy Worksheets("Feuil2").Range("C6")
.Range("Z2:Z114").Copy Worksheets("Feuil2").Range("D6")
 
End With                                               
Application.EnableEvents = True


End Sub
Pouvez vous me venir en aide ?
Merci beaucoup
Bonjour,

En clair, après ajout de données, la plage à copier n'est plus "A2:A114" ? Si c'est ça le problème, tu peux d'abord déterminer la position de la dernière ligne, puis dimensionner ta copie jusqu'à celle-ci.
Exemple :

Code : Tout sélectionner

LigMax = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("A2:A" & LigMax).Copy Worksheets("Feuil2").Range("A6")
Le problème n'est pas de ne pas savoir, le problème est de ne pas chercher...
Ton problème est résolu ? N'oublie pas de l'indiquer :
darman78
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 14 novembre 2018
Version d'Excel : 2010 FR

Message par darman78 » 14 novembre 2018, 15:14

La plage de A2 à A114 est un peu grande mais c'est pour avoir de la marge car je ne sais pas comment faire pour copier le tableau avec une taille variable. Mais le problème c'est surtout que certaines colonnes, quand on y insère des données supplémentaires, font descendre les données d'une case. Et ce qu'il y a c'est que une case qui est a coté ne suivra pas la case descendu qui lui correspond ce qui fait que les informations seront décalées et donc fausses. Ce que je cherche a faire c'est donc de faire descendre tout le tableau en dessous de la ligne actualisé.
Avatar du membre
Pedro22
Membre impliqué
Membre impliqué
Messages : 1296
Appréciations reçues : 114
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par Pedro22 » 14 novembre 2018, 15:28

darman78 a écrit :
14 novembre 2018, 15:14
La plage de A2 à A114 est un peu grande mais c'est pour avoir de la marge car je ne sais pas comment faire pour copier le tableau avec une taille variable. Mais le problème c'est surtout que certaines colonnes, quand on y insère des données supplémentaires, font descendre les données d'une case. Et ce qu'il y a c'est que une case qui est a coté ne suivra pas la case descendu qui lui correspond ce qui fait que les informations seront décalées et donc fausses. Ce que je cherche a faire c'est donc de faire descendre tout le tableau en dessous de la ligne actualisé.
C'est toujours pas très clair (peut-être qu'un fichier nous aiderais), y'a-t-il un rapport avec l'extrait de code que tu nous as transmis ?
De ce que je comprends, l'ajout de données se fait par insertion de ligne, idéalement dans un tableau structuré.
Le problème n'est pas de ne pas savoir, le problème est de ne pas chercher...
Ton problème est résolu ? N'oublie pas de l'indiquer :
darman78
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 14 novembre 2018
Version d'Excel : 2010 FR

Message par darman78 » 14 novembre 2018, 16:28

Voila mon fichier. Le problème se trouve sur la feuille n°2. Quand on rentre des informations dans la colonne "type de matériel", que l'on rajoute une ligne dans le premier tableau et que l'on fait "copie tableau" la ligne rajoutée dans le deuxième tableau précédemment ne descend pas d'une case et ne suit pas la ligne à laquelle elle correspond
PRD sylob.xlsm
(44.04 Kio) Téléchargé 3 fois
Avatar du membre
Pedro22
Membre impliqué
Membre impliqué
Messages : 1296
Appréciations reçues : 114
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par Pedro22 » 14 novembre 2018, 17:25

darman78 a écrit :
14 novembre 2018, 16:28
Voila mon fichier. Le problème se trouve sur la feuille n°2. Quand on rentre des informations dans la colonne "type de matériel", que l'on rajoute une ligne dans le premier tableau et que l'on fait "copie tableau" la ligne rajoutée dans le deuxième tableau précédemment ne descend pas d'une case et ne suit pas la ligne à laquelle elle correspond
PRD sylob.xlsm
Je crois que je commence à comprendre... Si je récapitule :
- Tu crées un tableau à partir d'un export partiel d'une base de données.
- Ta ajoutes des informations dans ce nouveau tableau
- Lorsque tu modifies ta base de données et que tu génères à nouveau un export partiel, les données précédemment saisies se trouvent décalées dans ton tableau, c'est ça ?

Il faudrait que tu ajoutes quelque part un identifiant unique. Ensuite, plutôt que de faire un copier/coller d'une plage complète, il faudrait parcourir les lignes une à une et se baser sur le n° unique pour reporter les exporter les valeurs. Exemple :

Code : Tout sélectionner

Sub copie_tableau()

Dim LigMax As Long, LigMax2 As Long, Indice As Long, Lig As Long, IDunique As String, Position As Variant

With Sheets("Feuil1")                             
   LigMax = .Range("A" & .Rows.Count).End(xlUp).Row 'Détermine la dernière ligne (feuille 1)
   For Lig = 2 To LigMax 'Parcourir les lignes du tableau 1 (feuille 1)
      IDunique = .Range("A" & Lig)
      If Not IDunique = "" Then
         LigMax2 = Sheets("Feuil2").Range("B" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne (feuille 2)
         Set Position = Sheets("Feuil2").Range("A2:A" & LigMax2).Find(IDunique, LookIn:=xlValues, LookAt:=xlWhole) 'Recherche de l'ID unique
         If Position Is Nothing Then Indice = LigMax + 1 Else Indice = Position.Row 'Ecriture sur une nvlle ligne si l'ID unique n'est pas présent
         Sheets("Feuil2").Range("A" & Indice) = IDunique
         Sheets("Feuil2").Range("B" & Indice) = .Range("B" & Lig)
         Sheets("Feuil2").Range("C" & Indice) = .Range("H" & Lig)
         Sheets("Feuil2").Range("D" & Indice) = .Range("S" & Lig)
         Sheets("Feuil2").Range("E" & Indice) = .Range("AA" & Lig)
         Sheets("Feuil2").Range("G" & Indice) = .Range("E" & Lig)
      End If
   Next Lig
End With                                               

End Sub
Modifié en dernier par Pedro22 le 22 novembre 2018, 10:31, modifié 1 fois.
Le problème n'est pas de ne pas savoir, le problème est de ne pas chercher...
Ton problème est résolu ? N'oublie pas de l'indiquer :
darman78
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 14 novembre 2018
Version d'Excel : 2010 FR

Message par darman78 » 15 novembre 2018, 08:19

Bonjour,
ce que tu as expliqué est exactement mon problème mais en mieux dit :P toutefois j'ai essayé de prendre ce que tu avais fait mais du coup cela ne copie plus rien du tout
Avatar du membre
Pedro22
Membre impliqué
Membre impliqué
Messages : 1296
Appréciations reçues : 114
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par Pedro22 » 15 novembre 2018, 09:02

darman78 a écrit :
15 novembre 2018, 08:19
Bonjour,
ce que tu as expliqué est exactement mon problème mais en mieux dit :P toutefois j'ai essayé de prendre ce que tu avais fait mais du coup cela ne copie plus rien du tout
Mon exemple se base sur l'ajout d'un colonne en A dans les 2 tableaux. L'identifiant unique est à mettre dans cette colonne...
Le problème n'est pas de ne pas savoir, le problème est de ne pas chercher...
Ton problème est résolu ? N'oublie pas de l'indiquer :
darman78
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 14 novembre 2018
Version d'Excel : 2010 FR

Message par darman78 » 15 novembre 2018, 09:08

Peut tu m'expliquer comment faire ? parce que je suis un peu perdu et je ne sais pas trop comment faire
Avatar du membre
Pedro22
Membre impliqué
Membre impliqué
Messages : 1296
Appréciations reçues : 114
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par Pedro22 » 15 novembre 2018, 09:49

darman78 a écrit :
15 novembre 2018, 09:08
Peut tu m'expliquer comment faire ? parce que je suis un peu perdu et je ne sais pas trop comment faire
Peu importe ce que tu mets en colonne A, du moment que tu n'as pas de doublons. Le principe est d'y mettre une valeur unique, qui est reportée en tableau 2 en face des mêmes lignes. Ainsi, lorsque l'ordre de l'un des tableaux est modifié, cette valeur permet à la macro de retrouver la position respective de chaque ligne.

Ca peut-être par exemple : "Cmd001", "Cmd002"...
Le problème n'est pas de ne pas savoir, le problème est de ne pas chercher...
Ton problème est résolu ? N'oublie pas de l'indiquer :
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message