Enregistrement de données
bonsoir encore une incoérance !
j'ai le code suivant :
Sub enregistrer()
Dim xnumero As Integer
Fac_Dev = Cells(1, 9)
Fac_Num = Cells(1, 10)
Xonglet = Cells(1, 17)
chemin = Sheets("facture").Range("Q30")
If Cells(1, 10) = "" Then 'numero de doc
MsgBox ("coisir un type de documment")
Exit Sub
End If
If Cells(41, 10) = "0" Then 'facture vide
MsgBox ("votre facture est vide")
Exit Sub
End If
If Cells(45, 4) = "" Then 'reglement
reponse = MsgBox("saisisé le mode de reglement", vbYesNo)
If reponse = vbYes Then Exit Sub
End If
Application.ScreenUpdating = False 'enregistrement du document dans la base
reponse = MsgBox("Voulez-vous enregistrer :" & Fac_Dev & Fac_Num & " ?", vbYesNo)
If reponse = vbNo Then Exit Sub
With Sheets(Xonglet) 'selection des données a enregistrer
x = .Range("A65536").End(xlUp).Row
xnumero = Right(.Cells(x, 1), 5)
End With
NFacture = Right(Cells(1, 10), 5) - 1
If NFacture = xnumero Then
With Sheets(Xonglet)
i = .Range("A65536").End(3)(2).Row
.Cells(i, 1) = Sheets("recup").Range("J1") ' Numéro Devis ou Facture ou commande
.Cells(i, 2) = Range("R_nom")
.Cells(i, 3) = Range("R_prenom")
.Cells(i, 4) = Range("R_adresse")
.Cells(i, 5) = Range("R_code_postal")
.Cells(i, 6) = Range("R_ville")
.Cells(i, 7) = Range("R_date")
.Cells(i, 8) = Range("R_num")
.Cells(i, 9) = Range("B15")
.Cells(i, 10) = Range("h15")
.Cells(i, 11) = Range("I15")
.Cells(i, 12) = Range("J15")
.Cells(i, 13) = Range("B16")
.Cells(i, 14) = Range("h16")
.Cells(i, 15) = Range("I16")
.Cells(i, 16) = Range("J16")
.Cells(i, 17) = Range("B17")
.Cells(i, 18) = Range("h17")
.Cells(i, 19) = Range("I17")
.Cells(i, 20) = Range("J17")
.Cells(i, 21) = Range("B18")
.Cells(i, 22) = Range("h18")
.Cells(i, 23) = Range("I18")
.Cells(i, 24) = Range("J18")
.Cells(i, 25) = Range("B19")
.Cells(i, 26) = Range("h19")
.Cells(i, 27) = Range("I19")
.Cells(i, 28) = Range("J19")
.Cells(i, 29) = Range("B20")
.Cells(i, 30) = Range("h20")
.Cells(i, 31) = Range("I20")
.Cells(i, 32) = Range("J20")
.Cells(i, 33) = Range("B21")
.Cells(i, 34) = Range("h21")
.Cells(i, 35) = Range("I21")
.Cells(i, 36) = Range("J21")
.Cells(i, 37) = Range("B22")
.Cells(i, 38) = Range("h22")
.Cells(i, 39) = Range("I22")
.Cells(i, 40) = Range("J22")
.Cells(i, 41) = Range("B23")
.Cells(i, 42) = Range("h23")
.Cells(i, 43) = Range("I23")
.Cells(i, 44) = Range("J23")
.Cells(i, 45) = Range("B24")
.Cells(i, 46) = Range("h24")
.Cells(i, 47) = Range("I24")
.Cells(i, 48) = Range("J24")
.Cells(i, 49) = Range("B25")
.Cells(i, 50) = Range("h25")
.Cells(i, 51) = Range("I25")
.Cells(i, 52) = Range("J25")
.Cells(i, 53) = Range("B26")
.Cells(i, 54) = Range("h26")
.Cells(i, 55) = Range("I26")
.Cells(i, 56) = Range("J26")
.Cells(i, 57) = Range("B27")
.Cells(i, 58) = Range("h27")
.Cells(i, 59) = Range("I27")
.Cells(i, 60) = Range("J27")
.Cells(i, 61) = Range("B28")
.Cells(i, 62) = Range("h28")
.Cells(i, 63) = Range("I28")
.Cells(i, 64) = Range("J28")
.Cells(i, 65) = Range("B29")
.Cells(i, 66) = Range("h29")
.Cells(i, 67) = Range("I29")
.Cells(i, 68) = Range("J29")
.Cells(i, 69) = Range("B30")
.Cells(i, 70) = Range("h30")
.Cells(i, 71) = Range("I30")
.Cells(i, 72) = Range("J30")
.Cells(i, 73) = Range("B31")
.Cells(i, 74) = Range("h31")
.Cells(i, 75) = Range("I31")
.Cells(i, 76) = Range("J31")
.Cells(i, 77) = Range("B32")
.Cells(i, 78) = Range("h32")
.Cells(i, 79) = Range("I32")
.Cells(i, 80) = Range("J32")
.Cells(i, 81) = Range("B33")
.Cells(i, 82) = Range("h33")
.Cells(i, 83) = Range("I33")
.Cells(i, 84) = Range("J33")
.Cells(i, 85) = Range("B34")
.Cells(i, 86) = Range("h34")
.Cells(i, 87) = Range("I34")
.Cells(i, 88) = Range("J34")
.Cells(i, 89) = Range("B35")
.Cells(i, 90) = Range("h35")
.Cells(i, 91) = Range("I35")
.Cells(i, 92) = Range("J35")
.Cells(i, 93) = Range("B36")
.Cells(i, 94) = Range("h36")
.Cells(i, 95) = Range("I36")
.Cells(i, 96) = Range("J36")
.Cells(i, 97) = Range("B37")
.Cells(i, 98) = Range("h37")
.Cells(i, 99) = Range("I37")
.Cells(i, 100) = Range("J37")
.Cells(i, 101) = Range("B38")
.Cells(i, 102) = Range("h38")
.Cells(i, 103) = Range("I38")
.Cells(i, 104) = Range("J38")
.Cells(i, 105) = Range("B39")
.Cells(i, 106) = Range("h39")
.Cells(i, 107) = Range("I39")
.Cells(i, 108) = Range("J39")
.Cells(i, 109) = Range("B40")
.Cells(i, 110) = Range("h40")
.Cells(i, 111) = Range("I40")
.Cells(i, 112) = Range("J40")
.Cells(i, 113) = Range("R_total")
.Cells(i, 114) = Range("R_acompte")
.Cells(i, 115) = Range("R_net_a_payer")
.Cells(i, 116) = Range("R_reglement")
.Cells(i, 117) = Range("R_mail")
.Cells(i, 118) = Range("G12")
.Cells(i, 119) = Range("R_tiers1")
End With 'document a imprimer
reponse = MsgBox("Voulez-vous imprimer :" & Fac_Dev & Fac_Num & " ?", vbYesNo)
If reponse = vbYes Then
ActiveSheet.PageSetup.PrintArea = "$B$1:J53"
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True
If reponse = vbNo Then Exit Sub
End If
Dim Rep As Integer
fact = Sheets("recup").Range("Q1")
fact1 = Sheets("recup").Range("J1")
Rep = MsgBox("Voulez-vous sauvegarder en pdf ?", vbYesNo)
If Rep = vbYes Then
End If
If fact = "base_devis" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive devis\devis" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
If fact = "base_commande" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive commandes\commande" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
If fact = "base_facture" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive factures\facture" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
'effacemment du document
Range("B15:I40").ClearContents
Range("Q8").ClearContents
Range("R8").ClearContents
Range("D45").ClearContents
Range("Q1").ClearContents
Range("J1").ClearContents
Range("acompte").ClearContents
Range("tiers1").ClearContents
End If
Application.ScreenUpdating = True ' retour a ma facture
Sheets("recup").Range("A1").Select
End Subil fonctionne mais il est long donc j'ai voulu le racourcir et je l'ai remplacer par :
Sub enregistrer1()
Dim xnumero As Integer
Fac_Dev = Cells(1, 9)
Fac_Num = Cells(1, 10)
Xonglet = Cells(1, 17)
chemin = Sheets("facture").Range("Q30")
Dim Colonne As Integer
If Cells(45, 4) = "" Then 'reglement
reponse = MsgBox("saisisé le mode de reglement", vbYesNo)
If reponse = vbYes Then Exit Sub
End If
Application.ScreenUpdating = False 'enregistrement du document dans la base
reponse = MsgBox("Voulez-vous enregistrer :" & Fac_Dev & Fac_Num & " ?", vbYesNo)
If reponse = vbNo Then Exit Sub
With Sheets(Xonglet) 'selection des données a enregistrer
x = .Range("A65536").End(xlUp).Row
xnumero = Right(.Cells(x, 1), 5)
End With
NFacture = Right(Cells(1, 10), 5) - 1
If NFacture = xnumero Then
With Sheets(Xonglet)
i = .Range("A65536").End(3)(2).Row
.Cells(i, 1) = Sheets("recup").Range("J1") ' Numéro Devis ou Facture ou commande
.Cells(i, 2) = Range("R_nom")
.Cells(i, 3) = Range("R_prenom")
.Cells(i, 4) = Range("R_adresse")
.Cells(i, 5) = Range("R_code_postal")
.Cells(i, 6) = Range("R_ville")
.Cells(i, 7) = Range("R_date")
.Cells(i, 8) = Range("R_num")
.Cells(i, 113) = Range("R_total")
.Cells(i, 114) = Range("R_acompte")
.Cells(i, 115) = Range("R_net_a_payer")
.Cells(i, 116) = Range("R_reglement")
.Cells(i, 117) = Range("R_mail")
.Cells(i, 118) = Range("G12")
.Cells(i, 119) = Range("R_tiers1")
For i = 1 To 104
.Cells(i, 9) = Range("B15")
.Cells(i, 10) = Range("H15")
.Cells(i, 11) = Range("I15")
.Cells(i, 12) = Range("J15")
Next i
End With 'document a imprimer
reponse = MsgBox("Voulez-vous imprimer :" & Fac_Dev & Fac_Num & " ?", vbYesNo)
If reponse = vbYes Then
ActiveSheet.PageSetup.PrintArea = "$B$1:J53"
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True
If reponse = vbNo Then Exit Sub
End If
Dim Rep As Integer
fact = Sheets("recup").Range("Q1")
fact1 = Sheets("recup").Range("J1")
Rep = MsgBox("Voulez-vous sauvegarder en pdf ?", vbYesNo)
If Rep = vbYes Then
End If
If fact = "base_devis" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive devis\devis" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
If fact = "base_commande" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive commandes\commande" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
If fact = "base_facture" Then
Sheets("recup").Range("B1:T53").Select
ActiveSheet.PageSetup.PrintArea = "$B$1:$J$53"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
chemin & "\archive factures\facture" & fact1 & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
From:=1, To:=1, OpenAfterPublish:=False
End If
Application.ScreenUpdating = True ' retour a ma facture
End If
Sheets("recup").Range("A1").Select
End Subet maintenant le bug est le suivant l'ors de l'enregistrement dans ma base il enregistre les donnée de ma boucle
For i = 1 To 104
.Cells(i, 9) = Range("B15")
.Cells(i, 10) = Range("H15")
.Cells(i, 11) = Range("I15")
.Cells(i, 12) = Range("J15")
Next idans la totalité des colonnes concerné au lieu de le faire sur une ligne seulement
si en B15 il y a un 3 il enregistre 3 dans toutes les case de la celule de la colonne 9 de ma base au lieu de le faire que dans une case de la colonne 9 alors que les autre données comme le nom par exemple (.Cells(i, 2) = Range("R_nom")) n'est enregistrer que dans une case
ou est le problème
merci
Bonjour,
Tu dis :
et maintenant le bug est le suivant l'hors de l'enregistrement dans ma base il enregistre les données de ma boucle dans la totalité des colonnes concernées au lieu de le faire sur une ligne seulement
si en B15 il y a un 3 il enregistre 3 dans toutes les case de la cellule de la colonne 9 de ma base au lieu de le faire que dans une case de la colonne 9 alors que les autre données comme le nom par exemple (.Cells(i, 2) = Range("R_nom")) n'est enregistrer que dans une case
C'est tout à fais normal, pour ".Cells(i, 2) = Range("R_nom")" entre autres, i a pour valeur le numéro de la ligne vide sous la dernière cellule utilisée de la colonne A (i = .Range("A65536").End(3)(2).Row), sa valeur n'est pas incrémentée dans une boucle !!!
Pour :
For i = 1 To 104
.Cells(i, 9) = Range("B15")
.Cells(i, 10) = Range("H15")
.Cells(i, 11) = Range("I15")
.Cells(i, 12) = Range("J15")
Next iLes valeurs de B15, H15, I15 et J15 sont inscrite de la ligne 1 à la ligne 104 dans les colonnes I à L puisque tu boucle de 1 à 104 !!!
Il te faut faire une boucle en incrémentant les colonnes et pas les lignes (la valeur de i ne doit pas changer) mais tu dois aussi incrémenter les lignes pour la récup des données à partir de B15, H15, etc..., enfin si j'ai bien compris ton code. Remplace ta boucle ci-dessous par celle-ci et dis moi si c'est ce que tu cherche :
For j = 9 To 112 Step 4
Cells(i, j) = Range("B" & 15 + k)
Cells(i, j + 1) = Range("H" & 15 + k)
Cells(i, j + 2) = Range("I" & 15 + k)
Cells(i, j + 3) = Range("J" & 15 + k)
k = k + 1
Next jHervé.
bonjours hervé je vient de tester la boucle effectivement cela copie mais de la facon suivante:
la premiere partie est bien copier dans la bonne base mais la partie correspondant a la boucle est enregistrer dans ma feuille recup au lieu d'etre enregistrer dans la base choisi par xonglet (soit base_facture, soit base_devis, soit base _commande) en fonction du type de document.
au commencement il ma mis variable inconnu pour J donc je l'est déclarer comme pour i
Dim J As Longpuis il la boucle a tourné mais cette partie la :
i = .Range("A65536").End(3)(2).Row
.Cells(i, 1) = Sheets("recup").Range("J1") ' Numéro Devis ou Facture ou commande
.Cells(i, 2) = Range("R_nom")
.Cells(i, 3) = Range("R_prenom")
.Cells(i, 4) = Range("R_adresse")
.Cells(i, 5) = Range("R_code_postal")
.Cells(i, 6) = Range("R_ville")
.Cells(i, 7) = Range("R_date")
.Cells(i, 8) = Range("R_num")
.Cells(i, 113) = Range("R_total")
.Cells(i, 114) = Range("R_acompte")
.Cells(i, 115) = Range("R_net_a_payer")
.Cells(i, 116) = Range("R_reglement")
.Cells(i, 117) = Range("R_mail")
.Cells(i, 118) = Range("G12")
.Cells(i, 119) = Range("R_tiers1")est bien enregistrer au bon endroit, et la boule elle est enregistrer sur la ligne portant le meme numero mais dans ma page recup et non dans ma base ai je oublier quelque chose ?
merci