Bonjour à tous,
C'est mon premier post ici, malgré que je visite régulièrement les sujets et que je trouve souvent mon bonheur, mais là je ne saurais pas comment faire :
Je vous explique, il y a une feuille normale (pas userform) appelée "interface" dans laquelle les utilisateurs remplissent des champs, en suite ils doivent cliquer sur valider et cela ajoute ces données à une BDD (base de données). Le code marche mais il est TROOOP lent.
J'ai donc mis un bouton avec les instructions pour que cela se fasse, le remplissage n'est pas "simple' en effet il est "en cascade" ainsi en français ça donne ça :
Si au moins une case de la plage1 est remplie alors associe à chaque case remplie, les valeurs de la plage2
Si au moins une case de la plage2 est remplie alors copie dans la base de données
Bref, ainsi si dans la plage1 il y a : Test1 test2
et dans la plage2 il y a : p1 p2 et p3 donc dans la base de données cela se copie ainsi par colonne :
Test1 | p1 | autres données en dessous de cette p1 |
| Test1 | p2 | |
Test1 | p3 | |
| test2 | p1 | |
| test2 | p2 | |
| test2 | p3 | |
Bref voici l'interface et le code :
Private Sub ValiderBDD_Click()
'____AMELIORATION ajoutée soi disant pour la rendre plus rapide :(
Dim BoEcran As Boolean, BoBarre As Boolean, BoEvent As Boolean, BoSaut As Boolean
Dim iCalcul As Integer
BoEcran = Application.ScreenUpdating
BoBarre = Application.DisplayStatusBar
iCalcul = Application.Calculation
BoEvent = Application.EnableEvents
BoSaut = ActiveSheet.DisplayPageBreaks
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
'---------------------------------------------
'Copie cases dans la BDD
Dim Col As Integer
Dim ligne As Integer
'debut d'jout
Set plage = Range("B15:F19")
Set semaine = Range("C11")
Set annee = Range("E11")
Set ope = Range("C12")
Set typ = Range("C2")
'TEST SI PLAGE VIDE
If Application.CountA(plage) = 0 Or Application.CountA(semaine) = 0 Or Application.CountA(annee) = 0 Or Application.CountA(ope) = 0 Or Application.CountA(typ) = 0 Then
MsgBox ("Veuillez renseigner au moins une OF, date, année, opérateur et semaine")
Else:
'Teste OF NON VIDES
For Each C In Worksheets("Interface").Range("B15:F19").Cells
If Not IsEmpty(C.Value) Then 'Si Numéro d'OF non vide alors
For Each D In Worksheets("Interface").Range("C23:E23").Cells 'pour chaque Peinture faire :
If Not IsEmpty(D.Value) Then 'Si cellule peinture non vide alors
For Col = 1 To 9 'colonnes de 1 à 9 dans BDD
ligne = comptage(2, Col)
If Col = 1 Then
'Colonne Année
Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Range("E11").Value
'Colonne Semaine
ElseIf Col = 2 Then
Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Range("C11").Value
'Peinture donnée
ElseIf Col = 3 Then
Worksheets("BDD").Cells(ligne, Col) = C.Value
'Conformité Adhérence
ElseIf Col = 4 Then
Worksheets("BDD").Cells(ligne, Col) = D.Value 'peinture
Worksheets("BDD").Cells(ligne, Col + 1) = Worksheets("Interface").Cells(D.Row + 1, D.Column).Value2 'adhe
Worksheets("BDD").Cells(ligne, Col + 2) = Worksheets("Interface").Cells(D.Row + 2, D.Column).Value2 'épaisseur
Worksheets("BDD").Cells(ligne, Col + 3) = Worksheets("Interface").Cells(D.Row + 3, D.Column).Value2 'Conformité ép
Worksheets("BDD").Cells(ligne, Col + 4) = Worksheets("Interface").Cells(D.Row + 4, D.Column).Value2 'Opérateur
Worksheets("BDD").Cells(ligne, Col + 5) = Worksheets("Interface").Cells(D.Row + 5, D.Column).Value2 'Type (Retouch/Init)
Worksheets("BDD").Cells(ligne, Col + 6) = Worksheets("Interface").Cells(D.Row + 6, D.Column).Value2 'Programme
'ElseIf Col = 5 Then
'Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Cells(D.Row + 1, D.Column).Value2
'ElseIf Col = 6 Then
'Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Cells(D.Row + 2, D.Column).Value2
'ElseIf Col = 7 Then
'Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Cells(D.Row + 3, D.Column).Value2
'ElseIf Col = 8 Then
'Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Cells(D.Row + 4, D.Column).Value2
'ElseIf Col = 9 Then
'Worksheets("BDD").Cells(ligne, Col) = Worksheets("Interface").Cells(D.Row + 5, D.Column).Value2
End If
Next
End If
Next
End If
Next
MsgBox ("Données ajoutés avec succès")
End If 'ajout
'--------AMELIIORATION FIN
Application.ScreenUpdating = BoEcran
Application.DisplayStatusBar = BoBarre
Application.Calculation = iCalcul
Application.EnableEvents = BoEvent
ActiveSheet.DisplayPageBreaks = BoSaut
End Sub
Merci d'avance pour votre aide