Mise à jour classeur fermé via ADO: résultat inattendu !

Jam

XLDnaute Accro
Bonjour à tous,

J'exécute le code ci-dessous pour mettre à jour une plage nommée dans plusieurs classeurs. Ce code est en cours de développement, mais à son exécution il se passe quelquechose d'assez bizarre: le nom dans le classeur mis à jour voit sa référence changer :confused::confused::confused:

Je précise que la macro fonctionne correctement. Le nom "vMois" qui est dans la feuille PARAM en A5 se retrouve en E5 ! La cellule A5 ayant été mise à jour :(

Si quelqu'un a une idée de ce qui peut éventuellement se passer. Merci d'avance.

Code:
Sub MAJ_MoisDansSBP()
    Dim x As Integer
    Dim sRep As String
    Dim sFile As String
    Dim oFso        As Object
    Dim oFile       As Object
    Dim oDirectory  As Object
    Dim oCon As ADODB.Connection
    Dim oRs As ADODB.Recordset
    

    x = Application.InputBox("Veuillez saisir le numéro du mois à mettre à jour", "MAJ du Mois", Month(Now()), , , , , 1)

    '# Désactivation de certains paramètres pour accélerer le traitement
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
    
    '# Création des objets de scripting
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Set oDirectory = oFso.getfolder(Range("sPath"))
        
    '# On active la gestion d'erreur
    On Error GoTo GestionErreur
    
    '# On vérifie qu'il y a bien des fichiers dans le répertoire
    If Not (oDirectory.Files.Count > 0) Then
        MsgBox "Le répertoire sélectionné ne contient aucun fichier !", vbCritical + vbOKOnly, "Erreur répertoire"
        Exit Sub
    End If
    
    '# On parcours tous les fichiers du répertoire
    For Each oFile In oDirectory.Files
        '# Si le fichier est un fichier Excel on l'ouvre.
        If Right$(oFile.Name, 4) = ".xls" And Left$(oFile.Name, 14) = "DEV - SBP - CA" Then
        
            '# Ouverture de la connection
            Set oCon = New ADODB.Connection
                oCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & oFile.Path & ";" & _
            "Extended Properties=""Excel 8.0;HDR=No;"";"
            Set oRs = New ADODB.Recordset
            
            With oRs
                .Open "SELECT * from [vMois]", oCon, adOpenKeyset, adLockOptimistic
                oRs(0).Value = x
                .Update
                .Close
            End With
            
            oCon.Close
        End If
    Next

NormalEnd:
    '# On ferme les objets créés
    Set oFso = Nothing
    Set oDirectory = Nothing
    Set oRs = Nothing
    Set oCon = Nothing
    
    '# Rétablissement des paramètres Excel
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .StatusBar = False
    End With
    
    MsgBox "Mise à jour terminée avec succès !", vbInformation + vbOKOnly, "Fin de traitement"
    
    Exit Sub
    
GestionErreur:
MsgBox "Une erreur a eu lieu pendant le traitement. La procédure est interrompue.", vbCritical + vbOKOnly, "Erreur de traitement"
GoTo NormalEnd

End Sub
 
Dernière édition:

Jam

XLDnaute Accro
Re : Mise à jour classeur fermé via ADO: résultat inattendu !

Bonjour,

Je viens de tester la requête en utilisant

Code:
.Open "SELECT * from [PARAM$A5:A5]", oCon, adOpenKeyset, adLockOptimistic

Et cela n'entraîne pas la même erreur.
Néanmoins j'aimerai bien comprendre car j'ai besoin de mettre à jour plusieurs dizaine de fichiers où potentiellement la référence de la plage peut être amenée à changer et utiliser des références plutôt qu'un nom m'embêterai.

Je reste donc à l'écoute de tout proposition.
 
G

Guest

Guest
Re : Mise à jour classeur fermé via ADO: résultat inattendu !

Bonjour Jam,

difficile de répondre sans l'exemple concret sous les doigts. Mais une solution si tes adresses Feuille/Cellule sont amenées à changer:

Code:
Dim sql as string, AdresseFeuilleCellule as String
'.....
'......
AdresseFeuilleCellule = "PARAM$A5:A5" 
sql = "SELECT * from [" & AdresseFeuilleCellule & "]"
 
With oRs
[FONT=monospace].Open Sql, oCon, adOpenKeyset, adLockOptimistic[/FONT]
 
'.....
'.....
End With

A+
 

Jam

XLDnaute Accro
Re : Mise à jour classeur fermé via ADO: résultat inattendu !

Merci Hasco,

Ce qui m'embête ce n'est pas tant l'utilisation de variable dans mon code que le risque que la référence A5 dans la feuille PARAM ne change sans le savoir et donc de modifier une cellule incorrecte :(

Bonne journée
 

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
6
Affichages
383

Statistiques des forums

Discussions
312 839
Messages
2 092 688
Membres
105 509
dernier inscrit
hamidvba