Recordset sous condition

nak

XLDnaute Occasionnel
Bonjour,

J'utilise le code suivant pour mettre à jour un fichier XLSX fermé. En quelque sorte je m'en sert de base.

VB:
Sub Sauvegarder()
' Chemin d'accès de la base
Sfichier = ThisWorkbook.Path & "\Base.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "BaseFI"

' Créer la connexion XLSX
Set Cn = New ADODB.Connection
With Cn
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=16;Data Source=" _
        & Sfichier & ";Extended Properties=""Excel 12.0;HDR=NO;Persist Security Info=False;"";"
    .Open
End With
Set Cd = New ADODB.Command
Cd.ActiveConnection = Cn
 
' Ouvrir 1000000 lignes d'enegistrement
Cd.CommandText = "SELECT * FROM [BaseFI$A1:AA1000000]"
Set Rst = New ADODB.Recordset
Rst.Open Cd, , adOpenKeyset, adLockOptimistic
' Boucler sur plusieurs lignes
DernLigne = Sheets("Fiche").Range("A" & Rows.Count).End(xlUp).Row
For L = 20 To DernLigne
' Chercher la valeur dans la BdD
Rst.Find "F1 = '" & Cells(L, 1) & "'", , adSearchForward, 1
    
' Si on se retrouve à la fin des enregistrement on en créé un nouveau
If Rst.EOF = True Then Rst.AddNew
    ' On rempli la ligne d'enregistrement avec les valeur  
    For i = 0 To 26 ' Mettre ici le nombre de champs -1
        If i < 22 Then Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)
        If i >= 22 And Rst(i).Value = "" Then Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)
    Next i
Next L

' Metre à jour la ligne d'enregistrement
Rst.Update
    
' Fermer la connexion
Cn.Close

' Effacer les variables objet
Set Cn = Nothing
Set Cd = Nothing
Set Rst = Nothing
End Sub

Aujourd'hui le code fonctionne correctement pour mettre à jour les 26 colonnes.
Sauf que j'aimerais ajouter une condition pour les 5 dernières colonnes.
J'ai écrit le code simplement mais cela ne fonctionne pas :
Code:
If i >= 22 And Rst(i).Value = "" Then Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)

En fait j'en déduit que le Rst(i).Value = "" ne passe pas.

Avez-vous une solution à me proposer ?

Merci

A+
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Recordset sous condition

Salut Nak

Essaye peut-être avec ton code modifié
Code:
Sub Sauvegarder()
  ' Chemin d'accès de la base
  Sfichier = ThisWorkbook.Path & "\Base.xlsx"
  'Nom de la feuille dans le classeur fermé
  NomFeuille = "BaseFI"


  ' Créer la connexion XLSX
  Set Cn = New ADODB.Connection
  With Cn
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=16;Data Source=" _
                      & Sfichier & ";Extended Properties=""Excel 12.0;HDR=NO;Persist Security Info=False;"";"
    .Open
  End With
  Set Cd = New ADODB.Command
  Cd.ActiveConnection = Cn


  ' Ouvrir 1000000 lignes d'enegistrement
  Cd.CommandText = "SELECT * FROM [BaseFI$A1:AA1000000]"
  Set Rst = New ADODB.Recordset
  Rst.Open Cd, , adOpenKeyset, adLockOptimistic
  ' Boucler sur plusieurs lignes
  DernLigne = Sheets("Fiche").Range("A" & Rows.Count).End(xlUp).Row
  For L = 20 To DernLigne
    ' Chercher la valeur dans la BdD
    Rst.Find "F1 = '" & Cells(L, 1) & "'", , adSearchForward, 1


    ' Si on se retrouve à la fin des enregistrement on en créé un nouveau
    If Rst.EOF = True Then Rst.AddNew
    ' On rempli la ligne d'enregistrement avec les valeur
    For i = 0 To 26  ' Mettre ici le nombre de champs -1
      If i < 22 Then
        Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)
      Else  ' Si i n'est pas inférieur à 22, c'est que forcément il est égal ou supérieur ... non
      If IsNull(Rst(i)) Then Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)
    Next i
  Next L
  ' Metre à jour la ligne d'enregistrement
  Rst.Update


  ' Fermer la connexion
  Cn.Close


  ' Effacer les variables objet
  Set Cn = Nothing
  Set Cd = Nothing
  Set Rst = Nothing
End Sub

A+
 

Discussions similaires