méthode ADO problème incrémentation

jtitin

XLDnaute Occasionnel
Bonjour à tous

j'utilise cette macro pour incrémenter des données dans un classeur fermé.
mes données s'incrémentent sur 11 colonnes et à la suite de ligne en ligne.
je cherche à ce que ces données s'incrémentent à la suite en fonction de la 1er cellule vide colonne A
donc se positionner sur la 1ere cellule vide colonne A et uniquement colonne A et incrémenter.
car dans une 12ème colonne se trouve des formules sur toute la colonne et l'incrémentation se fait alors par rapport à la dernière cellule vide
Merci de votre aide

Sub Macro2()
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Fichier As String, Cible As String, Feuille As String
Dim i As Byte
Dte = Format(Date, "dd/mm/yy")
Hre = Format(Now, "hh:mm")
Fichier = "C:\Documents and Settings\Jtitin\Bureau\rapport\MonFichier.xls"
Feuille = "sauvegarde$"
Set Cn = New ADODB.Connection
Cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & Fichier & ";" & _
"extended properties=""Excel 8.0;"""

Cible = "SELECT * FROM [" & Feuille & "];"

Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic
With Rs
.AddNew
.Fields(0) = Sheets("Feuil1").Range("F9")
.Fields(1) = Format(CDate(Sheets("Feuil1").Range("H9")), "hh:mm")
.Fields(2) = Dte
.Fields(3) = Hre
.Fields(4) = Sheets("FINAL").Range("CS28")
.Fields(5) = Sheets("FINAL").Range("A4")
.Fields(6) = Sheets("FINAL").Range("E4")
.Fields(7) = Sheets("FINAL").Range("C28")
.Fields(8) = Sheets("FINAL").Range("E28")
.Fields(9) = Sheets("FINAL").Range("G30")
.Fields(10) = Sheets("FINAL").Range("M30")
.Update
End With
Rs.Close
Cn.Close
End Sub
 

MichelXld

XLDnaute Barbatruc
Re : méthode ADO problème incrémentation

bonsoir


C'est possible mais tu vas créer une usine à gaz pour pas grand chose.
Pour ma part, j'enregistrerais les données brutes dans une première feuille du classeur fermé, grace à ta procédure ADO.
Dans ce même classeur fermé, je créerais des liaisons dans une autre feuille, et qui contiendrait les formules dans la 12eme colonne.

Les bibliotheques ADO ou DAO sont prévues pour manipuler des bases de données. Il est préférable que tu considères ta feuille comme une table et ensuite tu effectues les calculs et l'analyse dans une autre feuille.



Si tu souhaites tout de meme rester sur ta premiere idée, recherche le premier enregistrement vide dans la premiere colonne et modifie l'enregistrement en écrivant tes nouvelles données.



Bonne soirée
MichelXld
 
Dernière édition:

jtitin

XLDnaute Occasionnel
Re : méthode ADO problème incrémentation

merci MichelXld pour ton conseil.
oui ta solution est envisageable mais je souhaites rester sur ma premiere idée.
mais comment modifier ce code pour ce positionner sur la 1ere cellule vide colonne A
et alors incrémenter mes 11 colonnes
le résultat vas me servir dans un tcd , donc avoir ma base complète sur une feuille

merci encore
 

MichelXld

XLDnaute Barbatruc
Re : méthode ADO problème incrémentation

bonjour


Dans ce cas tu peux utiliser:

Code:
    Dim Cn As ADODB.Connection
    Dim Rs As ADODB.Recordset
    Dim Fichier As String, Cible As String, Feuille As String
 
    Fichier = "C:\ClasseurFermé.xls"
    Feuille = "Feuil1$"
 
    Set Cn = New ADODB.Connection
    Cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "data source=" & Fichier & ";" & _
        "extended properties=""Excel 8.0;"""
 
    Cible = "SELECT * FROM [" & Feuille & "];"
 
    Set Rs = New Recordset
    Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic
    Rs.Filter = "Champ1=Null"
 
    With Rs
        If Not .EOF Then
            .Fields("Champ1") = "xxxx"
            .Fields("Champ2") = 60
            .Fields("Champ3") = 17
            .Update
        End If
    End With
 
    Rs.Close
    Cn.Close




Bon week end
MichelXld
 
Dernière édition:

jtitin

XLDnaute Occasionnel
Re : méthode ADO problème incrémentation

bonsoir MICHELXld

oui j'ai utiliser ton code de cette façon:
j'ai repris ces ligne pour les intégrer à la macro à modifier.

Rs.Filter = "Champ1=Null"
With Rs
If Not .EOF Then
.Fields("Champ1") = "xxxx"
.Fields("Champ2") = 60
.Fields("Champ3") = 17
.Update
End If
End With

mais comment adapter le nom des champs??
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 083
Membres
103 114
dernier inscrit
sylvainb6969