Bonjour tout le monde,
ce forum m'a beaucoup aidé et appris dans Excel et aujourd'hui je me suis inscrit car j'ai un problème de procédure trop grande et que j'aurai besoin des lumières du forum pour m'aider à corriger mon problème.
voici la problématique :
Pour ma boite, j'ai créer un userform pour la saisie du budget.
L'année fiscale chez nous commence en février donc février = le mois 1
On saisie le montant globale pour 6 catégorie et la macro dans le userform alimente une base de donnée et crée la saisonnalité pour les 12 mois qui viennent.
Mon userform créé 24 ligne de base * 6 catégorie * 12 mois en tout j'ai 1728 ligne dans mon code VBA. Ces lignes j'ai pu les créer avec des formules de texte sur Excel lorsque j'ai collé j'ai eu le problème de procédure trop grande.
mon problème c'est vraiment la procédure d'upload
Voici le code VBA :
Private Sub BTajout_Click()
''''''''''''''''''''''''''''''' Controle de doublon '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim rngCust As Range
Dim Concat As String
Concat = CBlisteCP.Value & " F2 CA Ordonnance"
Set rngCust = Feuil2.Range("P").Find(Concat)
If rngCust Is Nothing Then
GoTo suite
Else
MsgBox "le chiffres d'affaires pour la Pharmacie existe dejà"
Exit Sub
End If
suite:
'''''''''''''''''''''''''''''''programme lors de la validation des donnees''''''''''''''''''''''''''''''''''''''''''''''
Dim ligne As Integer
Application.ScreenUpdating = False
If MsgBox("confirmez-vous l'ajout des donnees?", vbYesNo, "confirmation") = vbYes Then
'''''''''''''''''''''''''''''''''''''''''''''''''''''debut Programme d'upload'''''''''''''''''''''''''''''''''''''''''''''''''''
lignefévr = catégorie 1
ligne févr +1 =catégorie 2
ligne févr +2 = catégorie 3
ligne févr +3 = catégorie 4
ligne févr +4 = catégorie 5
ligne févr +5 = catégorie 6
la même chose pour janvier jusqu'à décembre
et je termine mon bouton par
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIfin application unload formulaire de saisieIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'Unload FRMSaisie
TBattendu.Value = ""
TBattendu20.Value = ""
TBattendu40.Value = ""
TBattendu60.Value = ""
TBattenduAUTRES.Value = ""
TBattendu12.Value = ""
Worksheets("bdd").ListObjects("tableau7").Unlist
Feuil2.ListObjects.Add(xlSrcRange, Range("$A$1:$P$" & LigneJanvier + 5), , xlYes).Name = _
"Tableau7"
MsgBox "ligne creer avec succès"
Sheets("TCD").Select
ActiveWorkbook.Connections("Requête - PlageBDD").Refresh
Feuil14.PivotTables("Tableau croise dynamique3").PivotCache.Refresh
Sheets("Menu").Select
Application.ScreenUpdating = True
End If
End If
End Sub
pour la saisonnalité c'est le montant de la catégorie * une cellule dans Excel, voici les cellules : de C4:N9
Exemple pour lignefévr pour la cat1 on va utiliser la cellule C4
Est-ce qu'il y a un moyen de créer une boucle, ce qui dépasse mes connaissances pour cette complexité ou bien je dois couper le module ?
Je vous remercie d'avance pour votre aide
Bonne journée à tous
ce forum m'a beaucoup aidé et appris dans Excel et aujourd'hui je me suis inscrit car j'ai un problème de procédure trop grande et que j'aurai besoin des lumières du forum pour m'aider à corriger mon problème.
voici la problématique :
Pour ma boite, j'ai créer un userform pour la saisie du budget.
L'année fiscale chez nous commence en février donc février = le mois 1
On saisie le montant globale pour 6 catégorie et la macro dans le userform alimente une base de donnée et crée la saisonnalité pour les 12 mois qui viennent.
Mon userform créé 24 ligne de base * 6 catégorie * 12 mois en tout j'ai 1728 ligne dans mon code VBA. Ces lignes j'ai pu les créer avec des formules de texte sur Excel lorsque j'ai collé j'ai eu le problème de procédure trop grande.
mon problème c'est vraiment la procédure d'upload
Voici le code VBA :
Private Sub BTajout_Click()
''''''''''''''''''''''''''''''' Controle de doublon '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim rngCust As Range
Dim Concat As String
Concat = CBlisteCP.Value & " F2 CA Ordonnance"
Set rngCust = Feuil2.Range("P").Find(Concat)
If rngCust Is Nothing Then
GoTo suite
Else
MsgBox "le chiffres d'affaires pour la Pharmacie existe dejà"
Exit Sub
End If
suite:
'''''''''''''''''''''''''''''''programme lors de la validation des donnees''''''''''''''''''''''''''''''''''''''''''''''
Dim ligne As Integer
Application.ScreenUpdating = False
If MsgBox("confirmez-vous l'ajout des donnees?", vbYesNo, "confirmation") = vbYes Then
'''''''''''''''''''''''''''''''''''''''''''''''''''''debut Programme d'upload'''''''''''''''''''''''''''''''''''''''''''''''''''
lignefévr = catégorie 1
ligne févr +1 =catégorie 2
ligne févr +2 = catégorie 3
ligne févr +3 = catégorie 4
ligne févr +4 = catégorie 5
ligne févr +5 = catégorie 6
la même chose pour janvier jusqu'à décembre
Feuil2.Select |
lignefévr = Feuil2.Range("A456541").End(xlUp).Row + 1 |
'''''''''''''''''''''''''''''''''CAT 1015 février''''''''''''''''''''''''''''''''''''''''''''''''''''' |
Cells(lignefévr, 1).Formula = "=RC[2] & "" "" & RC[5] & "" "" & RC[13] & "" "" & RC[6] & "" "" & RC[8] & "" "" & RC[10]" 'Concatenation de Type rubrique AREA centre de profit nom , moi et montant |
Cells(lignefévr, 2) = "0080200000 " 'N° compte Valeur manuel |
Cells(lignefévr, 3) = "BU" 'TYPE source : Manuel |
Cells(lignefévr, 5) = "1015" 'Catégorie source : Manuel |
Cells(lignefévr, 6) = "CA Ordonnance " 'Rubrique |
Cells(lignefévr, 7) = CBlisteCP.Value 'centre de profit nom |
Cells(lignefévr, 8).Formula = "=INDEX(PlageCP,MATCH(RC[-1],ListeCP,0),3) " 'Centre de profit Numéro rechercheV sur la ligne 7 |
Cells(lignefévr, 4).Formula = "=RC[4]& ""0100"" " 'ligne 8 et 0100 |
Cells(lignefévr, 9) = 1 'manuel |
Cells(lignefévr, 10) = 2020 'Année manuel |
Cells(lignefévr, 11) = TBBudget1015.Value * Feuil11.Range("C4").Value ' Montant * saisonalité du mois en cours |
Cells(lignefévr, 12) = CButilisateur.Value ' Nom d'utilisateur |
Cells(lignefévr, 13).Formula = "=INDEX(PlageCP,MATCH(RC[-6],ListeCP,0),1) " ' Recherche V sur cnom |
Cells(lignefévr, 15).Formula = "=INDEX(PlageCP,MATCH(RC[-8],ListeCP,0),4) " ' Recherche V sur cnom |
Cells(lignefévr, 16).Formula = "=RC[-9] & "" "" &RC[-13] & "" "" &RC[-10] " ' concat CP,TYPE,type ca |
With Feuil2.Range("P " & lignefévr)'Je transforme la ligne en valeur pour que la macro puisse faire un contrôle de doublon |
.Value = .Value |
End With |
With Feuil2.Range("A " & lignefévr) 'Je transforme la ligne en valeur pour que la macro puisse faire un contrôle de doublon |
.Value = .Value |
End With |
et je termine mon bouton par
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIfin application unload formulaire de saisieIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'Unload FRMSaisie
TBattendu.Value = ""
TBattendu20.Value = ""
TBattendu40.Value = ""
TBattendu60.Value = ""
TBattenduAUTRES.Value = ""
TBattendu12.Value = ""
Worksheets("bdd").ListObjects("tableau7").Unlist
Feuil2.ListObjects.Add(xlSrcRange, Range("$A$1:$P$" & LigneJanvier + 5), , xlYes).Name = _
"Tableau7"
MsgBox "ligne creer avec succès"
Sheets("TCD").Select
ActiveWorkbook.Connections("Requête - PlageBDD").Refresh
Feuil14.PivotTables("Tableau croise dynamique3").PivotCache.Refresh
Sheets("Menu").Select
Application.ScreenUpdating = True
End If
End If
End Sub
pour la saisonnalité c'est le montant de la catégorie * une cellule dans Excel, voici les cellules : de C4:N9
Exemple pour lignefévr pour la cat1 on va utiliser la cellule C4
Est-ce qu'il y a un moyen de créer une boucle, ce qui dépasse mes connaissances pour cette complexité ou bien je dois couper le module ?
Je vous remercie d'avance pour votre aide
Bonne journée à tous