Comment lier ma base de données avec les colonnes du tableau suivi ?

Bonjour

Je n'y arrive pas mais pas du tout et du coup je copie-colle dans mes colonnes de mon tableau de suivi, ce qui prend du temps ! Comment puis-je faire (en mode VBA)

51tableau-maj-suivi.zip (348.19 Ko)
29base-de-donnees.zip (329.92 Ko)

avec ma base de données qui évolue (par rapport à la date) d'insérer automatiquement dans mon "suivi" et dans les colonnes adéquates les nouvelles données sans pour autant effacer les données de mon tableau de suivi (donc à chaque fois, créer une nouvelle ligne avec les nouvelles informations de ma base de données. Je vous joins mes 2 fichiers et par avance je vous remercie de toute l'aide que vous allez m'apporter

Qui peut m'aider, j'en appelle aux pros, suis trop nulle !

Je ne suis pas certain d'avoir bien saisi :

il s'agit de copier les données du classeur base de données vers le tableau de suivi comme si le fichier base de données servait de formulaire ou bien il faut synchroniser les deux fichiers ?

Bonjour,

Ton fichier exemple est vraiment mal foutu...

Il est mité, troué comme un morceau de gruyère... Impossible de comprendre à partir de quelle ligne doit commencer l'importation !

Normalement, on devrait chercher la dernière ligne de ton tableau cible et la retrouver peu ou prou dans le tableau source. Et quand on l'a trouvé on commence la copie à partir de la ligne suivante.

Mais là, présenter un fichier comme ça c'est vraiment du foutage de gueule... Tu n'encourages pas vraiment les bonnes volontés !

Si tu espères une réponse tu devrais convertir ton fichier cible ("suivi") si j'ai bien compris... en tableau structuré. (comme la source)

Les tableaux structurés existent depuis plus de 10 ans : Tu travailles toujours sur Excel 97 ?

A+

Edit : Bonjour Optimix

Bonjour le fil, bonjour le forum,

Tout à fait d'accord avec Galopin !...

On doit coller une colonne unique Euros dans un tableau qui en comporte 3 de colonnes Euros !?... Mais, d***rdez-vous...

Essaie ce code à adapter :

Private Sub CommandButton1_Click()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TS As ListObject 'déclare la variable TS (Tableau Source)
Dim PS As Range 'déclare la variable PS (Plage Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim LR As Integer 'déclare la variable LR (Ligne de Référence)

Set CS = ThisWorkbook 'définit la classeur source CS
Set OS = CS.Worksheets("Base de données") 'définit l'onglet source OS
CA = CS.Path & "\" 'définit le chemin d'accès CA
Set TS = OS.ListObjects(1) 'ou set TS=OS.ListObjects("Base3") définit le tableau source TS
Set PS = TS.DataBodyRange 'définit la plage source PS
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CD = Workbooks("tableau-maj-suivi.xlsx") 'définit le classeur destination (génère une erreur si ce classeur n'est pas ouvetrt)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CD = Workbooks.Open(CA & "tableau-maj-suivi.xlsx") 'définit le classseur destination en l'ouvrant (le code suppose que les deux classeurs sont dans le même dossier, sinon ça plantera...)
End If 'fin d ela condition
On Error GoTo 0 'annule la gestion des erreurs
Set OD = CD.Worksheets("Suivi ") 'définit l'onglet destination OD (attention il y a un espace à la fin !?...)
LR = OD.Cells(Application.Rows.Count, "E").End(xlUp).Row + 1 'définit la ligne de référence de LR
OS.Range(PS.Columns(1), PS.Columns(3)).Copy OD.Cells(LR, "E") 'copie les colonnes 1 à 3 de PS et les colle dans la cellule ligne LR colonne E de OD
OS.Range(PS.Columns(4), PS.Columns(5)).Copy OD.Cells(LR, "J") 'copie les colonnes 4 et 5 de PS et les colle dans la cellule ligne LR colonne J de OD
OS.Range(PS.Columns(6), PS.Columns(8)).Copy OD.Cells(LR, "O") 'copie les colonnes 6 à 8 de PS et les colle dans la cellule ligne LR colonne O de OD
'TS.DataBodyRange.Delete 'cette ligne efface les donnée de la base mais je ne savais pas si il fallait la mettre ou pas...
End Sub

Ton fichier devient, par conséquent, .xlms. :

9base-de-donnees.zip (343.55 Ko)

Bonjour,

Et on copie, on copie !...

Quand on voit le nombre de styles utilisés (dans le 2 classeurs), il y a un risque de plantage d'Excel.

Il va falloir penser à nettoyer tout cela et le reste...

capture d ecran 2021 03 13 131915

Merci à vous tous et désolée pour le dérangement ; comme quoi suis vraiment nulle et vraiment beaucoup à apprendre avec vous

Re,

Et la proposition que je t'ai faite ?!...
Je savais quand ce *** de Merlin m'a dit de gouter ses pilules d'invisibilité qu'il fallait m'abstenir. Mais que voulez-vous elle étaient bleues et ressemblaient étrangement à celles que je prends pour... Alors je me suis pas méfié...

Il fait une erreur ici

Set OD = CD.Worksheets("Suivi ") 'définit l'onglet destination OD (attention il y a un espace à la fin !?...)
Encore merci

Re,

Heu... il me semble pourtant avoir attiré ton attention dans le commentaire de cette ligne !...

Dans l'exemple que tu as fourni l'onglet se nomme "suivi " (avec un espace à la fin). Si dans ton fichier original il se nomme "suivi" (sans l'espace), forcément ça plante. Il faut que le code et le nom de l'onglet correspondent alors soit tu modifies le code soit tu modifie le nom de l'onglet...

Y'en a, j'vous jure !

Merci j'ai bien lu les instructions mais il me dit manque "with" ; allez j'abandonne et je continue ma méthode ancienne - cad copier coller suis bonne à rien ; merci encore à vous

Bonjour,

Continue à copier comme tu le fais !

Message précédent

Re,

@Paita
Je ne comprends pas ton découragement. Il te manque un With où ?
Le fichier que je t'ai fourni fonctionne si les deux fichiers se trouvent dans le même dossier, sinon il faut juste renseigner le chemin du fichier tableau-maj-suivi.xlsx.

@Jean-Éric
Je n'ai rien compris à ce message précédent. Pourrais-tu être un peu plus explicite...

Re,

@ThauThème,

Les classeurs de paita comprennent :

49.227 styles différents (que l'on peut voir dans Ruban, Styles, Styles de cellules).

156 cellules ou plages de nommées.

130 références à des cellules ou plages invalides

19 cellules nommées avec des références externes.

C'est typiquement ce que l'on retrouve lorsque l'on fait des copier coller à tout va.

Il y a un risque (important) de plantage !

Bon, maintenant, c'est un avis personnel.

Cdlt.

Re,

Je comprends mieux maintenant et, en effet, il serait bon de nettoyer tout ça, de tout remettre à zéro...

Re,

A toute fin utile, je te donne un lien pour récupérer l'outil XLStyles Tool UWP.

Il permet le nettoyage !...

XLStyles Tool UWP

Cdlt.

Edit : le lien n'est pas autorisé.

ThauThème, bien le bonjour et mon sauveur

JCe matin, j'ai pris mon "vrai" fichier et j'ai travaillé avec ta proposition et cela marche super . Tu es trop génial. Puis-je encore te solliciter je souhaite que les données se trouve au début et non à la fin je suppose que je dois rajouter un tri sur la date

Et encore un grand merci

Bonjour le fil bonjour le forum,

Le code modifié avec le tri par date :

Private Sub CommandButton1_Click()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TS As ListObject 'déclare la variable TS (Tableau Source)
Dim PS As Range 'déclare la variable PS (Plage Source)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim LR As Integer 'déclare la variable LR (Ligne de Référence)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CS = ThisWorkbook 'définit la classeur source CS
Set OS = CS.Worksheets("Base de données") 'définit l'onglet source OS
CA = CS.Path & "\" 'définit le chemin d'accès CA
Set TS = OS.ListObjects(1) 'ou set TS=OS.ListObjects("Base3") définit le tableau source TS
Set PS = TS.DataBodyRange 'définit la plage source PS
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CD = Workbooks("tableau-maj-suivi.xlsx") 'définit le classeur destination (génère une erreur si ce classeur n'est pas ouvetrt)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CD = Workbooks.Open(CA & "tableau-maj-suivi.xlsx") 'définit le classseur destination en l'ouvrant (le code suppose que les deux classeurs sont dans le même dossier, sinon ça plantera...)
End If 'fin d ela condition
On Error GoTo 0 'annule la gestion des erreurs
Set OD = CD.Worksheets("Suivi ") 'définit l'onglet destination OD (attention il y a un espace à la fin !?...)
LR = OD.Cells(Application.Rows.Count, "E").End(xlUp).Row + 1 'définit la ligne de référence de LR
OS.Range(PS.Columns(1), PS.Columns(3)).Copy OD.Cells(LR, "E") 'copie les colonnes 1 à 3 de PS et les colle dans la cellule ligne LR colonne E de OD
OS.Range(PS.Columns(4), PS.Columns(5)).Copy OD.Cells(LR, "J") 'copie les colonnes 4 et 5 de PS et les colle dans la cellule ligne LR colonne J de OD
OS.Range(PS.Columns(6), PS.Columns(8)).Copy OD.Cells(LR, "O") 'copie les colonnes 6 à 8 de PS et les colle dans la cellule ligne LR colonne O de OD
'TS.DataBodyRange.Delete 'cette ligne efface les donnée de la base mais je ne savais pas si il fallait la mettre ou pas...
'tri par croisssant par date (colonne F)
OD.Sort.SortFields.Clear 'supprime le tri
OD.Sort.SortFields.Add Key:=OD.Range("F4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'définit le tri
With OD.Sort 'prend en compte les option de tri
    .SetRange OD.Range("E4").CurrentRegion 'plage
    .Header = xlYes 'en-tête
    .MatchCase = False '...
    .Orientation = xlTopToBottom '...
    .SortMethod = xlPinYin '...
    .Apply '...
End With 'fin de la prise en copte des option de trie
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
OD.Activate 'actice l'onglet detination OD
OD.Range("E4").Select 'sélectionne la cellule E4 de l'onglet OD
End Sub

Tu es un amour mille mercis

On ne peut pas rapatrier les lignes au début et non à la fin ?

Re,

Les tests que j'ai faits ne fonctionnement pas correctement car les données 25.02.2021 ne sont pas associées à des dates 25/02/2021... Donc le tri ne fonctionne pas. On pourrait changer les formats dans les deux tableaux avant le copier/coller puis trier par date après le copier/coller. Cela conviendrait-il ou tu préfère simplement rajouter les données au début, sans tri.

Rechercher des sujets similaires à "comment lier base donnees colonnes tableau suivi"