question c.n

tactic6

XLDnaute Impliqué
Salut tout le monde
pour appeler une feuille dans le classeur ou on travail c'est Sheets("Feuil1")
mais pour en appeller une dans un autre dossier comment fait-on ?
 

tactic6

XLDnaute Impliqué
Re : question c.n

Bonjour le forum
Fred si tu repasses par là voici l'erreur que j'obtiens avec ADO presque à la fin du code à la ligne Rst.MoveLast
j'ai recherché un peu sur silkyroad.developpez.com mais je ni ai rien trouvé
merci
 

Pièces jointes

  • erreur.jpg
    erreur.jpg
    12.4 KB · Affichages: 43
  • erreur.jpg
    erreur.jpg
    12.4 KB · Affichages: 44
  • erreur.jpg
    erreur.jpg
    12.4 KB · Affichages: 45

tactic6

XLDnaute Impliqué
Re : question c.n

salut Fred
bonsoir tout le monde
voici le code inséré à la macro

code:
Code:
Option Base 1
Sub Enregistrer()
Dim tablo(1, 6)
Dim tabloErreur As Variant
Dim tabloMsg As Variant
Dim tabloFacture As Variant
Dim Msg As String
Dim Msg1 As String
Dim Msg2 As String
Dim F1  As Worksheet
Dim F2 As Worksheet
Dim Derli As Long
Dim i As Integer
 
 'initialisation des variables
Set F1 = Sheets("Facture")
Set F2 = Sheets("Feuil1")
 ' affectaction des valeurs de cellules au tableau
tablo(1, 1) = F1.[C12]
tablo(1, 2) = F1.[H5]
tablo(1, 3) = F1.[j6]
tablo(1, 4) = F1.[H8]
tablo(1, 5) = F1.[H12]
tablo(1, 6) = F1.[J59]
'Gestion des cellules non renseignées
tabloErreur = Array("", "Date", "")
tabloMsg = Array("nom", "date", "numéro")
Msg1 = "Il n'y a pas de "
Msg2 = ", la facture ne peut pas être enregistrée."
'boucle pour l'affichage des cellules non remplies
For i = 3 To 1 Step -1
   If tablo(1, i) = tabloErreur(i) Then Msg = Msg & vbLf & Msg1 & tabloMsg(i) & Msg2
Next i
'si une condition remplie, affichage du message d'erreur et fin de Sub
If Not Msg = "" Then MsgBox Msg: Exit Sub
' controle TVA
For i = 15 To 52
  If F1.Cells(i, "J").Value <> "" And _
      F1.Cells(i, "K").Value = "" Then _
         MsgBox "la cellule " & Cells(i, "K").Address & " est vide.": End
'Recherche  de la dernière ligne de l'onglet "Feuil1"
Derli = F2.Columns("A").Find("*", , , , , xlPrevious).Row ' + 1

'Gestion des doublons
'Gestion des doublons
tabloFacture = F2.Range("C1:C" & Derli).Value
'si doublon, affichage du message et fin de Sub
If Not IsError(Application.Match(tablo(1, 3), tabloFacture, 0)) Then _
   MsgBox "Le numéro de facture """ & tablo(1, 3) & """ existe déja!": Exit Sub

'insertion des données sur Feuil1
Derli = Derli + 1
F2.Cells(Derli, "I").Value = Now
F2.Range("A" & Derli & ":F" & Derli).Value = tablo

Const DossierSauvegarde As String = "D:\Données\Boulangerie\Sauvegarde\Relevé\" ' à modifier selon l'emplacement de ton dossier
Const DossierSauvegarde2 As String = "D:\Données\Boulangerie\Sauvegarde\Facture\"
Const DossierSauvegarde3 As String = "E:\Sauvegarde\"
Dim AWbk As Workbook
Dim LaFin As String
Dim Ext As String
Dim NomClasseur As String
Dim Nume As String
Set AWbk = ActiveWorkbook


'Sub ADO_AjoutBD()
Dim Fichier As String
Dim NomFeuille As String
Dim Cn As ADODB.Connection
Dim Cd As ADODB.Command
Dim Rst As ADODB.Recordset

'ici, le chemin du classeur dans lequel tu veux exporter les données de la cellule J6
Fichier = "E:\Sauvegarde\Facture.xlsx"
'ici le nom de la feuille
NomFeuille = "Feuil1"
 
 Set Cn = New ADODB.Connection
 'ligne pour Excel 2007
   Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=" & Fichier & ";" & _
      "Extended Properties=""Excel 12.0;HDR=Yes;"""
 'ligne pour les versions antérieures
   'Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Fichier & ";" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;"";"
    
   Set Cd = New ADODB.Command
   Cd.ActiveConnection = Cn
   
      Cd.CommandText = "SELECT * FROM [" & NomFeuille & "$]"
      Set Rst = New ADODB.Recordset
      Rst.Open Cd, , adOpenKeyset, adLockOptimistic
      'envoi du curseur à la fin de la base
      Rst.MoveLast
      With Rst
         .AddNew
            'Nume est la valeur inscrite ligne  1 de la colonne,
            '[J6], la valeur de la cellule à exporter
         .fields("Nume") = [j6]
         .Update
      End With
 'Fermeture
Rst.Close:   Cn.Close
   
Set Cn = Nothing:   Set Cd = Nothing:   Set Rst = Nothing
'End Sub
'nom du classeur sans l'extension
NomClasseur = Left(AWbk.Name, Len(AWbk.Name) - InStr(1, StrReverse(AWbk.Name), "."))
'extension
Ext = Right(AWbk.Name, InStr(1, StrReverse(AWbk.Name), "."))
'date et heure
'LaFin = Format(Now, "dd-mm-yy hh-mm-ss")
'on définit ce que sera Nomfichier
'ce  sera la cellule G3 + H3 de la feuille nommée Facture
Nomfichier = Sheets("Facture").Range("G6") & " " & Sheets("Facture").Range("J6") & " " & Sheets("Facture").Range("H8")
'LaFin = Cells("H8" & "J6").Value
'enregistrement des copies
Nume = [Facture!J6]  ' vérifie j'ai mis J6
Sheets("Feuil1").Copy
' 'ActiveWorkbook.SaveAs DossierSauvegarde & NomClasseur & " " & LaFin & Ext ', xlExcel8 ' tu peux supprimer xlExcel8
ActiveWorkbook.SaveAs DossierSauvegarde & Nomfichier & " " & Ext  ', xlExcel8 ' tu peux supprimer xlExcel8
ActiveWorkbook.Close
Nume = [Facture!J6]  ' vérifie j'ai mis J6
Sheets("Facture").Copy
ActiveWorkbook.SaveAs DossierSauvegarde2 & Nomfichier & " " & Ext ', xlExcel8  ' tu peux supprimer xlExcel8
ActiveWorkbook.SaveAs DossierSauvegarde3 & Nomfichier & " " & Ext

ActiveWorkbook.Close
'If MsgBox("Ouvrir le dossier de sauvegarde ?", vbYesNo) = vbYes Then _
   Shell "C:\WINDOWS\EXPLORER.EXE /n,/e," & ""D:\Données\", vbNormalFocus

End Sub
au plaisir de te relire:)
 

fred65200

XLDnaute Impliqué
Re : question c.n

bonsoir

je crois que tu peux supprimer encore quelques lignes.
Nume est déjà initialisé et n'a pas changé de valeur.
tu peux enregistrer sous plusieurs fois le même classeur et tu ne fermes qu'une fois.

Code:
ActiveWorkbook.SaveAs DossierSauvegarde & Nomfichier & " " & Ext  ', xlExcel8 ' tu peux supprimer xlExcel8
'ActiveWorkbook.Close
'Nume = [Facture!J6]  ' vérifie j'ai mis J6
'Sheets("Facture").Copy
ActiveWorkbook.SaveAs DossierSauvegarde2 & Nomfichier & " " & Ext ', xlExcel8  ' tu peux supprimer xlExcel8
ActiveWorkbook.SaveAs DossierSauvegarde3 & Nomfichier & " " & Ext

cordialement

fred
 

fred65200

XLDnaute Impliqué
Re : question c.n

re

Code:
For i = 15 To 52
  If F1.Cells(i, "J").Value <> "" And _
      F1.Cells(i, "K").Value = "" Then _
         MsgBox "la cellule " & Cells(i, "K").Address & " est vide.": End
[COLOR=Red]NEXT[/COLOR]
'Recherche  de la dernière ligne de l'onglet "Feuil1"
Derli = F2.Columns("A").Find("*", , , , , xlPrevious).Row ' + 1
C'est pas là par hasard?

@+
 

Statistiques des forums

Discussions
312 755
Messages
2 091 707
Membres
105 053
dernier inscrit
HAMOUD