Omegan
XLDnaute Nouveau
Bonjour à tous,
Actuellement grand débutant en VBA, je suis entrain de monter un outil de Suivi dans le cadre de mon boulot. Pour cela j'utilise principalement une macro qui copie/colle une base de donnée stocké d'un onglet à un autre. Mon objectif final est de pouvoir automatiser le transfert et classer l'ensemble des informations présente (classé par lignes) pour pouvoir les analyser et établir un suivi.
Avant de vous dévoiler le code, j'aimerai que vous m'apportiez les éléments suivants :
- Créer une fonction pour éviter de recopier le code inutilement
- Simplifier mon code en évitant les .Select
- Effacer la ligne sur 0. lorsqu'elle a était copié
- Mettre en place un système qui permettrai que mes formules de total puissent inclurent les lignes collées automatiquement (pour ça je suis vraiment coincé, voir formules onglet 2.)
- Faire en sortes que mon code fonctionne parfaitement (en effet, au vu de mon tâtonnement je pense avoir fais des petites erreurs qui influent sur l'efficacité du code)
Voici le code que j'utilise (en PJ le document en entier) :
Sub MAJSuivi()
' Définition des variables
Dim Fourni As String
Dim Fourni2 As Range
Dim lig, lig2, lig3 As Long
Dim col As String
Dim i, j As Integer
Dim wsA As Worksheet
Dim wsB As Worksheet
Dim Suivi As Workbook
Dim nblignetot As Long
' Paramétrage des variables
Set Suivi = ThisWorkbook
Set wsA = Suivi.Worksheets("0.")
Set wsB = Suivi.Worksheets("Test")
nblignetot = WorksheetFunction.CountA(Range("D ")) 'Delimitation de la zone de travail
lig2 = 0 'Initialisation
'MsgBox "Nombre de ligne =" & nblignetot
For i = 8 To nblignetot
wsA.Select 'Trouver le n° du fournisseur
col = "B"
lig = i
Fourni = Cells(lig, col)
MsgBox "Nombre de ligne tot : " & nblignetot 'Verif des variables
MsgBox "Fournisseur en cours : " & Fourni
MsgBox "numéro de ligne = " & lig
If Fourni = "1" Then
wsB.Select
Columns("B:B").Select
Set Fourni2 = Selection.Find(What:=Fourni, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) 'Recherche dans l'onglet Test du placement du fournisseur en question
If Fourni2 Is Nothing Then
MsgBox ("Fournisseur non attribué : ") & Fourni
Else
'MsgBox ("Fourni2 = " & Fourni2) 'Verif Valeur Fourni2
Fourni2.Select
Selection.EntireRow.Insert 'Ajout d'une ligne pour coller les infos de l'onglet 0.
lig2 = ActiveCell.Row
'MsgBox ("lig2 : " & lig2) 'Verif valeur ligne active lig2
'MsgBox ("lig : " & lig)
wsA.Select 'Couper coller (+ mise en forme de la ligne selon n-1)
Rows(lig).Cut
wsB.Select
Rows(lig2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A" & lig2 & ":B" & lig2).Select
Selection.ClearContents
lig3 = lig2 - 1
MsgBox ("lig3 = " & lig3)
Rows(lig3).Copy
Rows(lig2).PasteSpecial xlFormats
Application.CutCopyMode = False 'Fin
End If
ElseIf Fourni = "2" Then
//Ainsi de suite jusqu'à mon dernier fournisseur.
Actuellement grand débutant en VBA, je suis entrain de monter un outil de Suivi dans le cadre de mon boulot. Pour cela j'utilise principalement une macro qui copie/colle une base de donnée stocké d'un onglet à un autre. Mon objectif final est de pouvoir automatiser le transfert et classer l'ensemble des informations présente (classé par lignes) pour pouvoir les analyser et établir un suivi.
Avant de vous dévoiler le code, j'aimerai que vous m'apportiez les éléments suivants :
- Créer une fonction pour éviter de recopier le code inutilement
- Simplifier mon code en évitant les .Select
- Effacer la ligne sur 0. lorsqu'elle a était copié
- Mettre en place un système qui permettrai que mes formules de total puissent inclurent les lignes collées automatiquement (pour ça je suis vraiment coincé, voir formules onglet 2.)
- Faire en sortes que mon code fonctionne parfaitement (en effet, au vu de mon tâtonnement je pense avoir fais des petites erreurs qui influent sur l'efficacité du code)
Voici le code que j'utilise (en PJ le document en entier) :
Sub MAJSuivi()
' Définition des variables
Dim Fourni As String
Dim Fourni2 As Range
Dim lig, lig2, lig3 As Long
Dim col As String
Dim i, j As Integer
Dim wsA As Worksheet
Dim wsB As Worksheet
Dim Suivi As Workbook
Dim nblignetot As Long
' Paramétrage des variables
Set Suivi = ThisWorkbook
Set wsA = Suivi.Worksheets("0.")
Set wsB = Suivi.Worksheets("Test")
nblignetot = WorksheetFunction.CountA(Range("D
lig2 = 0 'Initialisation
'MsgBox "Nombre de ligne =" & nblignetot
For i = 8 To nblignetot
wsA.Select 'Trouver le n° du fournisseur
col = "B"
lig = i
Fourni = Cells(lig, col)
MsgBox "Nombre de ligne tot : " & nblignetot 'Verif des variables
MsgBox "Fournisseur en cours : " & Fourni
MsgBox "numéro de ligne = " & lig
If Fourni = "1" Then
wsB.Select
Columns("B:B").Select
Set Fourni2 = Selection.Find(What:=Fourni, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False) 'Recherche dans l'onglet Test du placement du fournisseur en question
If Fourni2 Is Nothing Then
MsgBox ("Fournisseur non attribué : ") & Fourni
Else
'MsgBox ("Fourni2 = " & Fourni2) 'Verif Valeur Fourni2
Fourni2.Select
Selection.EntireRow.Insert 'Ajout d'une ligne pour coller les infos de l'onglet 0.
lig2 = ActiveCell.Row
'MsgBox ("lig2 : " & lig2) 'Verif valeur ligne active lig2
'MsgBox ("lig : " & lig)
wsA.Select 'Couper coller (+ mise en forme de la ligne selon n-1)
Rows(lig).Cut
wsB.Select
Rows(lig2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A" & lig2 & ":B" & lig2).Select
Selection.ClearContents
lig3 = lig2 - 1
MsgBox ("lig3 = " & lig3)
Rows(lig3).Copy
Rows(lig2).PasteSpecial xlFormats
Application.CutCopyMode = False 'Fin
End If
ElseIf Fourni = "2" Then
//Ainsi de suite jusqu'à mon dernier fournisseur.