Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 vba modification de tableau et modif la BDD

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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.
 
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.
 
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".
 
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.
 

Si ce ne sont plus des copies 1 pour 1, il faut revoir la logique, je vais te faire une proposition .
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…