Modifier valeurs selon une colonne
Bonjour,
J'ai un petit soucis pour mettre en place une boucle dans VBA.
Dans le fichier ci-joint, j'ai un onglet "BDD FA" regroupant plusieurs lignes et un onglet "BDD Reprévisions".
Celui-ci est complété à l'aide de la feuille "Reprévison" qui ajoute une ligne par une ligne les valeurs saisies les une après les autres.
Voici le code me permettant de faire cela.
Sub Reprevisionner()
Set fbdd = Sheets("BDD Reprévision")
tabloA = Range(Cells(1, 1), Cells(2, Cells(1, Columns.Count).End(xlToLeft).Column))
tabloB = fbdd.Range(fbdd.Cells(1, 1), fbdd.Cells(2, fbdd.Cells(1, Columns.Count).End(xlToLeft).Column))
ReDim tabloR(1, UBound(tabloB, 2))
lgn = fbdd.Range("A" & Rows.Count).End(xlUp)(2).Row
For j = 1 To UBound(tabloA, 2)
For jr = 1 To UBound(tabloB, 2)
If tabloB(1, jr) = tabloA(1, j) Then
tabloR(0, jr - 1) = tabloA(2, j)
End If
Next jr
Next j
Range(Cells(2, 2), Cells(2, Cells(1, Columns.Count).End(xlToLeft).Column)).ClearContents
fbdd.Range("A" & lgn).Resize(1, UBound(tabloR, 2)) = tabloR
End Sub
La prochaine étape est que les valeurs saisies viennent modifier les anciennes valeurs présentes dans "BDD FA" selon le numéro de FA. Ceci se fait à l'aide d'un bouton.
Le fichier exemple pour vous illustrer ma demande.
En vous remerciant.
Bonjour,
Petite piqûre de rappel pour ceux qui se sont penchés sur mon problème.
J'ai essayé tant bien que mal à parvenir au résultat souhaité à l'aide de ce code-ci :
Sub Reprevisionner()
Application.ScreenUpdating = False
Set fbdd = Sheets("BDD Reprévision")
tabloA = Range(Cells(1, 1), Cells(2, Cells(1, Columns.Count).End(xlToLeft).Column))
tabloB = fbdd.Range(fbdd.Cells(1, 1), fbdd.Cells(2, fbdd.Cells(1, Columns.Count).End(xlToLeft).Column))
ReDim tabloR(1, UBound(tabloB, 2))
lgn = fbdd.Range("A" & Rows.Count).End(xlUp)(2).Row
For j = 1 To UBound(tabloA, 2)
For jr = 1 To UBound(tabloB, 2)
If tabloB(1, jr) = tabloA(1, j) Then
tabloR(0, jr - 1) = tabloA(2, j)
End If
Next jr
Next j
Sheets("Reprévision").Activate
Range("C2:G2").Copy
nomCherche = Cells(2, 2)
Sheets("BDD FA").Activate
Set result = Range("A2:A1400").Find(What:=nomCherche, LookIn:=xlValues)
If result Is Nothing Then
MsgBox "Non trouvé"
Else
Range(result, result.End(xlToRight)).Select
End If
ActiveCell.Offset(0, 11).Select
ActiveCell.PasteSpecial
Sheets("Reprévision").Activate
Range("H2").Copy
nomCherche = Cells(2, 2)
Sheets("BDD FA").Activate
Set result = Range("A2:A1400").Find(What:=nomCherche, LookIn:=xlValues)
If result Is Nothing Then
MsgBox "Non trouvé"
Else
Range(result, result.End(xlToRight)).Select
End If
ActiveCell.Offset(0, 20).Select
ActiveCell.PasteSpecial
Sheets("BDD FA").Visible = False
Application.ScreenUpdating = True
Sheets("Reprévision").Activate
Range(Cells(2, 2), Cells(2, Cells(1, Columns.Count).End(xlToLeft).Column)).ClearContents
fbdd.Range("A" & lgn).Resize(1, UBound(tabloR, 2)) = tabloR
Cells(2, 2).Select
End Sub
Cela fonctionne ou du moins je n'ai pas encore vu d'anomalies. Mais j'imagine que ce code n'est pas entièrement optimiser et peut, peut-être, être simplifier.
Rien ne vous y oblige, juste pour vous tenir informer de mon problème.
Merci