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 !
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 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 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 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