XL 2016 vba modification de tableau et modif la BDD

julien741

XLDnaute Nouveau
Bonjour,

J'essai de réaliser une macro sous VBA pour transférer les données modifier du tableau F6:AF32 de l'onglet Analyse semaine reedition à l'onglet "BDD analyse prod".

Le but du fichier et dans un premier temps d'appuyer sur le bouton "Appuyer pour reediter" qui va afficher suivant le N° de semaine/année (en R4) les données de l'onglet BDD analyse prod.
Une fois que le résultat est afficher, je modifie les données que je souhaite du tableau qui peu varier en nombre de ligne et en appuyant sur le bouton "Enregistre la correction en modifiant la BDD" il modifie les données corriger dans la base de donnée Analyse prod en les remplaçant.

Comme vous pourrez le voir j'arrive à le faire sur la première ligne mais je n'arrive pas à définir sur l'ensemble du tableau.

Merci par avance de votre aide.

Cdt.

Julien.
 

Pièces jointes

  • Classeur1.xlsm
    46 KB · Affichages: 6

fanch55

XLDnaute Barbatruc
Bonjour,
le classeur joint ne comporte pas les macros attendus
1647866651301.png
 

fanch55

XLDnaute Barbatruc
Dans la sub recupanalyseprodsem
on trouve
For Each Ws In Worksheets​
Set Trouve = Ws.Columns("D").Find(Range("R4"), LookIn:=xlValues, LookAt:=xlWhole)​
Vous parcourez toutes les feuilles pour récupérer les donnnées de la Bdd ? 🤔

Correction de la sub correctionBDDanalyseprod
VB:
Sub correctionBDDanalyseprod()
Application.ScreenUpdating = False
Dim BDD As Worksheet, J1AM As Worksheet, R As Range
Dim I&, J&, K&, Derlig&

Set BDD = Worksheets("BDD Analyse prod")
Set J1AM = Worksheets("Analyse semaine reedition")
Derlig = BDD.Range("D" & BDD.Rows.Count).End(xlUp).Row

Set R = BDD.Columns("D").Find(J1AM.[R4], LookIn:=xlValues, lookat:=xlWhole)
If Not R Is Nothing Then
    I = R.Row ' Ligne de début de maj en Bdd
    J = J1AM.Range("F33").End(xlUp).Row 'Dernière ligne dans tableau de J1AM
    K = I + (J - 6)
    BDD.Range("F" & I & ":Z" & K).Value = J1AM.Range("F6:Z" & J).Value
    BDD.Range("AA" & I & ":AF" & K).Value = J1AM.Range("AA6:AF" & J).Value
    
    'If Flag = 0 Then ' pas compris ce groupe de code
    '    BDD.Range("D" & Derlig & ":AJ" & Derlig + 1).FillDown
    '    BDD.Range("F" & Derlig + 1).Value = J1AM.[F6].Value
    '    BDD.Range("I" & Derlig + 1).Value = J1AM.[G6].Value
    '    BDD.Range("J" & Derlig + 1).Value = J1AM.[H6].Value
    '    BDD.Range("K" & Derlig + 1).Value = J1AM.[I6].Value
    '    BDD.Range("L" & Derlig + 1).Value = J1AM.[J6].Value
    '    BDD.Range("U" & Derlig + 1).Value = J1AM.[K6].Value
    '    BDD.Range("V" & Derlig + 1).Value = J1AM.[L6].Value
    '    BDD.Range("D" & Derlig + 1).Value = MaDate
    'End if
End If

Set BDD = Nothing: Set J1AM = Nothing
End Sub
 

julien741

XLDnaute Nouveau
Merci pour le code, je vais le tester.
Pour le morceau de code non compris c'était pour la suite, c'est à dire que si on rajoute une ligne dans le tableau Analyse semaine reedition et de le rajouter à la suite des données ou de l'insérer à la suite de la dernière ligne avant la date suivante.

Merci.

Cdt.
Julien.
 

julien741

XLDnaute Nouveau
Bonjour Fanch55,
J'ai tester ta solution, elle fonctionne, mais je souhaiterais savoir si je rajoute une ligne complémentaire dans l'onglet Analyse semaine production avant la moyenne (oublie d'une prod par exemple), j'imagine que c'est pas le même code?
J'ai essayer si je rajoute une ligne il m'effacer une a deux ligne dans la Base de donnée sur la prod suivante.
Si je rajoute par exemple une ligne dans l'onglet analyse semaine prod en mettant 9/2022, et bien lorsque je lance la macro il remplace une à deux lignes de la prod du 10/2022.
Peut-on corriger cela, en mettant dans le code que si je rajoute une ligne il décale les lignes suivante dans la base de données, ou peut-on rajouter la ligne supplémentaire à la fin des lignes dans la base de données?

Merci par avance de ton retour.

Cdt.
Julien.
 

fanch55

XLDnaute Barbatruc
Salut Julien,
Dans la mesure où "Analyse semaine reedition" est une vue partielle de la Bdd ( j’entends par là que toutes les colonnes de la Bdd n'y sont pas ) et qu'il n'y a aucune formule dans la bdd pour les colonnes absentes,
tu ne pourras pas détruire ou ajouter une ligne à celle-ci .

Pour ce faire, il faudrait ramener toutes les colonnes de la Bdd dans "Analyse semaine reedition".
 

julien741

XLDnaute Nouveau
Ok, je comprends.
Essayons sur ta solution, on ramene toutes les colonnes de la base de données dans l'analyse semaine reedition, à partir de la ligne 6.
Le but est surtout de corriger les erreurs d'importation de la production avec en plus ou moins de ligne et/ou juste corriger les valeurs suivant le cas et remettre les données dans la base de données corriger.
Il faut faire comment pour la macro? on modifie l'importation en modifier juste les colonnes?

Application.ScreenUpdating = False
Dim BDD As Worksheet, J1AM As Worksheet, R As Range
Dim I&, J&, K&, Derlig&

Set BDD = Worksheets("BDD Analyse prod")
Set J1AM = Worksheets("Analyse semaine reedition")
Derlig = BDD.Range("A" & BDD.Rows.Count).End(xlUp).Row

Set R = BDD.Columns("A").Find(J1AM.[R4], LookIn:=xlValues, lookat:=xlWhole)
If Not R Is Nothing Then
I = R.Row ' Ligne de début de maj en Bdd
J = J1AM.Range("F33").End(xlUp).Row 'Dernière ligne dans tableau de J1AM
K = I + (J - 6)
BDD.Range("A" & I & ":Z" & K).Value = J1AM.Range("A6:Z" & J).Value
BDD.Range("AA" & I & ":AF" & K).Value = J1AM.Range("AA6:AF" & J).Value
End If

Set BDD = Nothing: Set J1AM = Nothing

Merci du coups de mains.
Cdt.
Julien.
 

fanch55

XLDnaute Barbatruc
Ok, je comprends.
Essayons sur ta solution, on ramene toutes les colonnes de la base de données dans l'analyse semaine reedition, à partir de la ligne 6.
Le but est surtout de corriger les erreurs d'importation de la production avec en plus ou moins de ligne et/ou juste corriger les valeurs suivant le cas et remettre les données dans la base de données corriger.
Il faut faire comment pour la macro? on modifie l'importation en modifier juste les colonnes?

Si ce ne sont plus des copies 1 pour 1, il faut revoir la logique, je vais te faire une proposition .
 
Dernière édition:

Discussions similaires

Réponses
21
Affichages
563

Statistiques des forums

Discussions
312 913
Messages
2 093 534
Membres
105 749
dernier inscrit
Mamadou221