Conserver données par ligne après import

Bonjour à tous,

Existe t'il un moyen de conserver des données dans un tableau (Colonne A,B et C)

sachant que A et B sont issu d'un import (qui décale donc les lignes au fur et a mesure) et C est rempli manuellement après chaque import.

J'ai mis un exemple si quelqu'un a une idée

Merci d'avance

Losand

Bonjour

Oui probablement en important via PowerQuery intégré à Excel

Bonjour

Bonjour à tous

Un essai à tester. Te convient-il ?

Bye !

Bonsoir,

Merci pour ton retour,

Ca a l'air de fonctionner, je teste ca en l'adaptant a ce que je cherche et te fait un retour.

Merci beaucoup

Losand

Bonjour

Bonjour à tous

Un essai à tester. Te convient-il ?

Bye !

Bonjour gmb,

Le principe correspond bien à ce que je cherche, cependant dans la pratique, mon tableau est plus complexe.

Certaine colonnes ont des formules et elles ne sont pas toutes contiguës.

J'ai remis un exemple modifié.

Losand

Bonjour

Bonjour à tous

Un essai à tester. Te convient-il ?

Bye !

Bonjour

J'aimerais bien savoir ce qu'on a au départ et ce qu'on a à la fin dans la feuille "Tableau" si dans la nouvelle feuille "Import", on a plusieurs colonnes de commentaires avec des renseignements.

Bye !

Dans le feuille import, il y a environ 30 colonnes et dans le feuille tableau, on retrouve beaucoup de colonnes identiques (Nom, n°dossier etc...) type "A2 de tableau = Import!A2" mais aussi 2 autre types de colonnes :

  • Des colonnes avec des resultats de formules (calculés sur des données de Import), cela fonctionne toujours quand je fais un nouvel import. Dans l'exemple cela correspond à ANNEE et MOIS
  • Puis des colonnes (entre 20 et 30) qui peuvent etre tout types de données (Prix, date, texte...). dans l'exemple cela correspond aux colonnes commentaires.

Ce qui ne facilite pas la chose, c'est que toutes ces colonnes, pour mes besoins, ne sont pas contiguës

Ex de tableau! : Colonnes de A à E = colonnes de Import! du type A2 de tableau = Import!A2

Colonne F = Colonne avec une date rentrée manuellement dans tableau!

Colonne G = Une formule qui additionne 2 colonnes de Import!

Colonne H = colonnes de Import! du type A2 de tableau = Import!A2

Colonne I = Colonne G = Une formule qui additionne 2 colonnes de Import!

Colonne de J à M = Colonne avec une texte rentrée manuellement dans tableau! etc...

On essayant d'etre clair:

Aucunes colonnes dans Import! ne contient de saisies manuelles (limite cette feuille sera cachée)

Et la Feuille Tableau! contient des colonnes ou seront saisies des données de type Texte, date etc... et le problème est que si mon import change, mes données saisies manuellement dans Tableau! ne sont plus en correspondance.

Losand

Bonjour

J'aimerais bien savoir ce qu'on a au départ et ce qu'on a à la fin dans la feuille "Tableau" si dans la feuille feuille "Import", on a plusieurs colonnes de commentaires avec des renseignements.

Bye !

Bonsoir à tous,

Je relance mon sujet avec un nouveau fichier explicatif.

Est'il possible d'avoir le résultat souhaité, a savoir, conserver (décaler) mes commentaires au fur et à mesure de mes imports?

J'ai cherché toute la semaine mais en vain.

Gmb était sur la bonne voie mais je n'arrive pas adapter à mes besoins d'ou ma nouvelle demande avec le fichier exemple joint

Merci d'aance si vous jetez un oeil.

C'est la dernière pièce d'un puzzle complexe pour moi svp (outil de travail pour moi)

Losand

Bonjour

Bonjour à tous

Nouvelle version.

Bye !

Bonjour Gmb

Ça fonctionne très bien, je te remercie beaucoup.

Comme évoqué précédemment, je dois l'adapter a un fichier contenant plus de colonnes,

Est'il possible que tu me détailles un peu le code que je puisses le comprendre stp

Losand

Bonjour

Bonjour à tous

Nouvelle version.

Bye !

Le même avec macro commentée.

Bye !

Bonjour Gmb,

Je te remercie pour le fichier et les explications sur le code.

Après avoir essayé de comprendre et de l'adapté des centaines de fois lol, je dois me rendre à l'évidence, je n'y arriverais pas seul.

J'avais indiqué que mon fichier était spécifique avec multiple colonnes.

En PJ, j'ai mis le fichier final terminé avec toutes les formules (gros fichiers)

Seule les colonnes de couleur orange dans "Tableau!" auront des données entrée par mes soins.

ta solution sur le fichier exemple précedent fonctionnait à merveille.

Peux tu me dire si ce que je souhaite est réalisable stp avec mon fichier final??

Losand

Le même avec macro commentée.

Bye !

Bonjour,

Gmb m'a apporté une réponse à ma demande très intéressante mais quelque chose ne fonctionne pas correctement

Lorsque une valeur change dans mon import (ex le couleur Noir (H6) de Coleen), cela supprime mes commentaires.

Je n'arrive pas à comprendre

Le même avec macro commentée.

Bye !

Bonjour

Nouvelle version.

Bye !

Bonjour Gmb,

Merci encore une fois de prendre le temps.

Cependant ca ne correspond pas, j'ai du mal m'exprimer.

Seul la colonne nom ne change pas, c'est la colonne reference

Dans import!, des variables peuvent changer de valeur, comme par exemple les dates ou couleurs, j'aimerais juste que dans tableau elle se mettent a jour a chaque import (sans créer une nouvelle ligne)

Concernant mes commentaires, ca se decale très bien si une ligne (nouvelle) s'intercale dans mon import (ex si j'integre un "Benoit" dans Import, Test5 reste parfaitement avec "Coleen" dans tableau

Je suis pas loin du but grace a toi

Losand

Bonjour

Nouvelle version.

Bye !

Bonjour

Nouvelle version;

Bye !

Bonjour Gmb,

C'est SUPER, merci beaucoup.

Une dernière question, quels paramètres dois je changer dans le code si dans Tableau, mes données commencent en A15 et pas en A2?

Sinon c'est parfait

Losand

Bonjour

Option Explicit

Dim fI As Worksheet, fT As Worksheet, tabloT, tabloI, tabloR()

Dim i&, it&, ii&, j&, k&, flag&

Private Sub Worksheet_Activate()

Set fI = Sheets("Import") 'On repére la feuille "Import" par une variable

Set fT = Sheets("Tableau") 'On repère la feuille "Tableau" par une variable

tabloI = fI.Range("A1").CurrentRegion 'On met les données du tableau de la feuille "Import" dans une variable tableau

tabloT = Range("A14").CurrentRegion 'On met les données du tableau de la feuille "Tableau" dans une variable tableau

ReDim tabloR(1 To UBound(tabloI, 1) - 1, 1 To UBound(tabloT, 2)) 'On définit la variable tableau du résultat

k = 0

For ii = 3 To UBound(tabloI, 1) 'Om passe toutes les lignes de la variable tabloI

flag = 0

For it = 2 To UBound(tabloT, 1) 'pour chacune de ces lignes, on passe toutes les lignes de la variable tabloT

If UCase(tabloT(it, 1)) = UCase(tabloI(ii, 1)) Then 'On recherche les lignes qui ont le même nom en colonne A

'sur les 2 tableaux

flag = 1 'on indique qu'on en a trouvé une et

'on recopie à la même ligne les données de la feuille Import

'au cas ou une données ait changé sur les colonne B,C, ou D

tabloT(it, 2) = tabloI(ii, 2)

tabloT(it, 4) = Year(tabloI(ii, 3))

tabloT(it, 6) = Month(tabloI(ii, 3))

tabloT(it, 8) = tabloI(ii, 4)

End If

Next it

If flag = 0 Then 'si flag = 0, aucune valeur en colonne A de tabloI ne corresopond

'à une valeur de la colonne A de TabloT. C'est donc qu'il faut

'ajouter la ligne du tabloI au tabloRon reporte dans tabloR les

'nouvelles données de tabloI

tabloR(k + 1, 1) = tabloI(ii, 1)

tabloR(k + 1, 2) = tabloI(ii, 2)

tabloR(k + 1, 4) = Year(tabloI(ii, 3))

tabloR(k + 1, 6) = Month(tabloI(ii, 3))

tabloR(k + 1, 8) = tabloI(ii, 4)

k = k + 1

End If

Next ii

'on reécrit le tabloT au bas du tableau de la feuille Tableau qui a pris en compte les lignes modifiées

Range("A14").Resize(UBound(tabloT, 1), UBound(tabloT, 2)) = tabloT

'on ajoute le tabloR (nouvelles lignes) au bas du tableau de la feuille Tableau

Range("A" & UBound(tabloT, 1) + 14).Resize(UBound(tabloI, 1) - 1, UBound(tabloT, 2)) = tabloR

'on classe les données du tableau de la feuille Tableau et on y met le quadrillage

With Range("A14").CurrentRegion

.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes

For i = 7 To 12

.Resize(Range("A14").CurrentRegion.Rows.Count, UBound(tabloR, 2)).Borders(i).LineStyle = xlContinuous

Next i

End With

End Sub

Merci Beaucoup Gmb,

C'est TOP, grace à toi, j'ai pu créer un outil de DINGUE pour mon travail.

Losand

Bonjour

Question suite import V6.xlsm

Option Explicit

Dim fI As Worksheet, fT As Worksheet, tabloT, tabloI, tabloR()

Dim i&, it&, ii&, j&, k&, flag&

Private Sub Worksheet_Activate()

Set fI = Sheets("Import") 'On repére la feuille "Import" par une variable

Set fT = Sheets("Tableau") 'On repère la feuille "Tableau" par une variable

tabloI = fI.Range("A1").CurrentRegion 'On met les données du tableau de la feuille "Import" dans une variable tableau

tabloT = Range("A14").CurrentRegion 'On met les données du tableau de la feuille "Tableau" dans une variable tableau

ReDim tabloR(1 To UBound(tabloI, 1) - 1, 1 To UBound(tabloT, 2)) 'On définit la variable tableau du résultat

k = 0

For ii = 3 To UBound(tabloI, 1) 'Om passe toutes les lignes de la variable tabloI

flag = 0

For it = 2 To UBound(tabloT, 1) 'pour chacune de ces lignes, on passe toutes les lignes de la variable tabloT

If UCase(tabloT(it, 1)) = UCase(tabloI(ii, 1)) Then 'On recherche les lignes qui ont le même nom en colonne A

'sur les 2 tableaux

flag = 1 'on indique qu'on en a trouvé une et

'on recopie à la même ligne les données de la feuille Import

'au cas ou une données ait changé sur les colonne B,C, ou D

tabloT(it, 2) = tabloI(ii, 2)

tabloT(it, 4) = Year(tabloI(ii, 3))

tabloT(it, 6) = Month(tabloI(ii, 3))

tabloT(it, 8) = tabloI(ii, 4)

End If

Next it

If flag = 0 Then 'si flag = 0, aucune valeur en colonne A de tabloI ne corresopond

'à une valeur de la colonne A de TabloT. C'est donc qu'il faut

'ajouter la ligne du tabloI au tabloRon reporte dans tabloR les

'nouvelles données de tabloI

tabloR(k + 1, 1) = tabloI(ii, 1)

tabloR(k + 1, 2) = tabloI(ii, 2)

tabloR(k + 1, 4) = Year(tabloI(ii, 3))

tabloR(k + 1, 6) = Month(tabloI(ii, 3))

tabloR(k + 1, 8) = tabloI(ii, 4)

k = k + 1

End If

Next ii

'on reécrit le tabloT au bas du tableau de la feuille Tableau qui a pris en compte les lignes modifiées

Range("A14").Resize(UBound(tabloT, 1), UBound(tabloT, 2)) = tabloT

'on ajoute le tabloR (nouvelles lignes) au bas du tableau de la feuille Tableau

Range("A" & UBound(tabloT, 1) + 14).Resize(UBound(tabloI, 1) - 1, UBound(tabloT, 2)) = tabloR

'on classe les données du tableau de la feuille Tableau et on y met le quadrillage

With Range("A14").CurrentRegion

.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes

For i = 7 To 12

.Resize(Range("A14").CurrentRegion.Rows.Count, UBound(tabloR, 2)).Borders(i).LineStyle = xlContinuous

Next i

End With

End Sub

Bonjour Gmb,

Une petite question stp

Les données de mon import! commence en A10 (au lieu de A3) donc j'ai changer dans le code par A8 (au lieu de A1) et ca fonctionne bien.

Sauf que ca fonctionne bien si toutes les cellules de A1 à D7 dans mon Import son vide et dans la réalité il y a des cellules non vide, même si elle ne concerne pas l'import.

Il y a t'il une manip pour ne pas prendre en compte les cellules A1 à D8 de l'import!?

Si je veux supprimer le fait que ca rajoute du quadrillage, je supprime quelle ligne à la fin du code?

et dernière question par anticipation,

Suis je limité en nombre de ligne dans le code du type :

tabloR(k + 1, 1) = tabloI(ii, 1)

tabloR(k + 1, 2) = tabloI(ii, 2)

En l'adaptant a mes besoins, j'en ai environ 300 donc j'anticipe la question

Losand

Bonjour

Question suite import V6.xlsm

Option Explicit

Dim fI As Worksheet, fT As Worksheet, tabloT, tabloI, tabloR()

Dim i&, it&, ii&, j&, k&, flag&

Private Sub Worksheet_Activate()

Set fI = Sheets("Import") 'On repére la feuille "Import" par une variable

Set fT = Sheets("Tableau") 'On repère la feuille "Tableau" par une variable

tabloI = fI.Range("A1").CurrentRegion 'On met les données du tableau de la feuille "Import" dans une variable tableau

tabloT = Range("A14").CurrentRegion 'On met les données du tableau de la feuille "Tableau" dans une variable tableau

ReDim tabloR(1 To UBound(tabloI, 1) - 1, 1 To UBound(tabloT, 2)) 'On définit la variable tableau du résultat

k = 0

For ii = 3 To UBound(tabloI, 1) 'Om passe toutes les lignes de la variable tabloI

flag = 0

For it = 2 To UBound(tabloT, 1) 'pour chacune de ces lignes, on passe toutes les lignes de la variable tabloT

If UCase(tabloT(it, 1)) = UCase(tabloI(ii, 1)) Then 'On recherche les lignes qui ont le même nom en colonne A

'sur les 2 tableaux

flag = 1 'on indique qu'on en a trouvé une et

'on recopie à la même ligne les données de la feuille Import

'au cas ou une données ait changé sur les colonne B,C, ou D

tabloT(it, 2) = tabloI(ii, 2)

tabloT(it, 4) = Year(tabloI(ii, 3))

tabloT(it, 6) = Month(tabloI(ii, 3))

tabloT(it, 8) = tabloI(ii, 4)

End If

Next it

If flag = 0 Then 'si flag = 0, aucune valeur en colonne A de tabloI ne corresopond

'à une valeur de la colonne A de TabloT. C'est donc qu'il faut

'ajouter la ligne du tabloI au tabloRon reporte dans tabloR les

'nouvelles données de tabloI

tabloR(k + 1, 1) = tabloI(ii, 1)

tabloR(k + 1, 2) = tabloI(ii, 2)

tabloR(k + 1, 4) = Year(tabloI(ii, 3))

tabloR(k + 1, 6) = Month(tabloI(ii, 3))

tabloR(k + 1, 8) = tabloI(ii, 4)

k = k + 1

End If

Next ii

'on reécrit le tabloT au bas du tableau de la feuille Tableau qui a pris en compte les lignes modifiées

Range("A14").Resize(UBound(tabloT, 1), UBound(tabloT, 2)) = tabloT

'on ajoute le tabloR (nouvelles lignes) au bas du tableau de la feuille Tableau

Range("A" & UBound(tabloT, 1) + 14).Resize(UBound(tabloI, 1) - 1, UBound(tabloT, 2)) = tabloR

'on classe les données du tableau de la feuille Tableau et on y met le quadrillage

With Range("A14").CurrentRegion

.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes

For i = 7 To 12

.Resize(Range("A14").CurrentRegion.Rows.Count, UBound(tabloR, 2)).Borders(i).LineStyle = xlContinuous

Next i

End With

End Sub

Rechercher des sujets similaires à "conserver donnees ligne import"