SQL - requête pour éditer une seule cellule

J'ai aperçu des choses avec ptrsafe pour les systemes en 64bits

En ce qui concerne l'utilisation de cette syntaxe, ça m'a été trop obscure pour que j'arrive à en saisir une méthode d'utilisation...

Bonjour,

"Microsoft.ACE.OLEDB.16.0" ça n'existe pas il faut utiliser la chaine de connexion que j'avais donné
En revanche, je pense que le problème vient du nom de la feuille avec espace
Il faut également que le champ à remplacer ne soit pas un champ calculé

Voici les fichiers test à mettre dans le même dossier (ça fonctionne chez moi)

14testadodb.xlsm (20.39 Ko)
6mabdd.xlsx (11.42 Ko)

Toutefois, j'attire votre attention sur le fait que ce genre de connexion ratée peut endommager le fichier ".xlsx"

A+

Bonjour,

Non le problème ne vient pas du nom de l'onglet car j'ai utilisé ce même nom dan mes tests !

Bonjour BrunoM45, Dysorthographie,

je viens de tester les fichiers test de BrunoM45, ça fonctionne ; mais ça fonctionne plus lorsque je veux inscrire une valeur dans une cellule unique

Un message d'erreur (le ènième..) apparait donc "trop peu de paramètres. 1 attendu" et j'imagine que ce paramètre attendu est le "WHERE" de la requête SQL...

Donc est ce que juste un ajustement de syntaxe serait salutaire? ou bien la commande UPDATE n'est pas la bonne méthode?

ou bien.. il est impossible d'écrire dans une seule cellule oOo

troppeuparamattendu
brunom45 test troppeuparamattendu

BrunoM45,

Je vois que dans ton exemple le HDR est sur "NO" mais lorsque j'essaie de nommer les champs de façon "générique" comme suit "[F19] .. [F1]" ça ne fonctionne pas

On est donc obligé de nommer les champs avec une entête??

Quand tu mets HDR=no les cellules selectionnées dans From [onglet$ B10:C11"] par exemple [F1] représente Fild(0)

[F1] Field1 colonne B

[F2] Field2 colonne C

notes également que si tu mets

IMEX=1 ce qui veut dire ne pas tenir compte du type de champ ta connexion devient en lecture seule

Je crois que j'ai trouvé la, ou peut-être, "une" solution.

En tout cas la valeur que je souhaitais ajouter en feuille "MOIS 1er" cellule "S6" s'ajoute bel et bien dans le fichier .xlsx

La dernière chose que j'ai réalisé c'est d'installer un complément (voir capture d'écran ci-joint) : " 2016 Access Database Engine"

Voici l'adresse du site où j'ai trouvé l'info : https://stackoverflow.com/questions/40360932/microsoft-ace-oledb-16-0-provider-is-not-registered-on-...

Voici l'adresse où j'ai téléchargé le complément : https://www.microsoft.com/en-us/download/details.aspx?id=54920 (j'ai choisi la version X64)

Depuis ça fonctionne.

J'espère que ça pourra aider quelqu'un. Merci à vous Dysorthographie et BrunoM45 pour votre aide précieuse. J'ai aussi appris des nouvelles choses.

Cependant je trouve VBA très obscure et plus je le pratique plus ça me paraît obscure. Malheureusement c'est le seule langage qui à ma connaissance permet d'automatiser sur excel.

sql update cellunique adoconnection ok

@Dysorthographie : "

Quand tu mets HDR=no les cellules selectionnées dans From [onglet$ B10:C11"] par exemple [F1] représente Fild(0)

[F1] Field1 colonne B

[F2] Field2 colonne C

notes également que si tu mets

IMEX=1 ce qui veut dire ne pas tenir compte du type de champ ta connexion devient en lecture seule"

Je ne suis pas sûr de bien comprendre.. [F1] représente Field(0) ? Ce qui veut dire que lorsque "HDR=yes" [F1] représente Field(1)?

Enfin désolé... j'ai lu plusieurs fois, cherché sur le net, je ne comprends pas le sens.. Peux tu expliciter davantage stp?? :)

Et IMEX=1 sert à préciser que l'on limite la connexion en lecture seule??

En te remerciant pour ces précisions,

HDR permet de dire si la première ligne est le nom de la colonne ou pas!

si tu mets HDR=yes

A1=Toto

A2=""

update [onglet$A1:A2] Set [Toto] ='veleur'

Okay c'est comme ça que je l'entendais

mais quand tu dis : "Quand tu mets HDR=no les cellules selectionnées dans From [onglet$ B10:C11"] par exemple [F1] représente Fild(0)"

Je ne comprends pas du tout :/ ...

adodb a besoin de nommer les champs {Colonnes}

quand tu mets HDR=no adodb Va nommer lui même les champs [F1] pour le premier champ [F2] pour le second et ainsi de suite !

A1:B10 [F1] pour la colonne A

[F2] pour la colonne B

C10:D20 [F1] pour la colonne C

[F2] pour la colonne D

Ok ! Merci pour ton explication. Tout est clair! je ne comprenais pas le "Field(0), en fait ça voulait dire "1er champs".

Oui déformation lié au VBA et les tableaux !

le champs sont toujours numéroté de F1 a FX en fonction de la plage de colonned impliqué le nom de la table update [Ingle$A:B] [F1] [F2]

champ1=[A]=[F1]

champ2=[B]=[F2]

Petite question,

Je viens de voir que l'on ne pouvait pas utiliser la connexion ADO pour deux exécutions de requêtes successives. Même en faisant un :

Connexion.close

Connexion = Nothing

Avant de paramétrer la nouvelle connexion

y a t-il possibilité ou bien il faut créer deux connexions différentes? avec des variables distinctes?

capture d ecran 2022 12 18 200615
Dim Onglet, I As Integer: Onglet = Array("MOIS 1er$", "MOIS 2nd$")
With CreateObject("ADODB.Connection")
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dest & "\" & monthFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
    .Open
    For I = 0 To UBound(Onglet)
        .Execute "UPDATE [" & Onglet(I) & "S6:S6]  SET [F1] = '" & budgAnte & "'"
    Next
    .Close
End With

Bonsoir Dysorthographie,

Super merci pour ta aide, je vais tester ça ! ;)

Bonjour Dysorthorgraphie,

J'ai testé ta méthode mais c'est le meme résultat que lors de mes essais ; apparemment il n'est pas possible de modifier une connexion. J'ai testé avec un ".Close" après chaque connexion à un onglet mais c'est pareil ..

champsnepeutetremisajour
Rechercher des sujets similaires à "sql requete editer seule"