Agrandir une plage de sélection à chaque enregistrement.

Talzatior

XLDnaute Occasionnel
Bonjour amis du forum ...

Je me permets de débuter un nouveau post, car je comprends bien que le post à la suite duquel je pose ma nouvelle question n'est plus trop approprié pour un usage futur dans la base de données du forum ...

Je prends donc l'initiative d'en ouvrir un nouveau ...

Pour ceux qui n'ont pas suivi le précédent fil (https://www.excel-downloads.com/threads/attribuer-un-nom-a-des-champs-dun-classeur.123218/), j'ai, grâce à vous, une acro me permettant de prendre des données de la feuille facture actuelle, et de les envoyer dans un autre classeur fermé, où je souhaite archiver des informations.

Mais je suis confronté à un souci ... Je ne sais comment m'y prendre pour augmenter la plage de sélection "Archives_fact" d'une ligne après chaque enregistrement ...

Existe-t-il une solution ?

Pour ceux qui ne souhaitent pas lire le fil précédent, je joins le fichier exemple dans lequel est utilisé cette macro, qui m'a été indiqué par PMO2, que je remercie encore ;)

A bientôt ;)

Le fichier :
 

Pièces jointes

  • Transfert de données par ADO dans un classeur fermé.zip
    30.5 KB · Affichages: 41

Robert

XLDnaute Barbatruc
Repose en paix
Re : Agrandir une plage de sélection à chaque enregistrement.

Bonjour Talzatior, bonjour le forum,

Je n'ai pas pris le temps d'ouvrir ton fichier ni de regarder ton fil précédent... Je te propose ce bout de code qui peut-être te sera utile :

Code:
Sub Macro1()
Dim pl As Range 'déclare la variable pl (PLage)
Set pl = Range("A1:G10") 'définit la variable pl
Set pl = pl.Resize(pl.Rows.Count + 1, pl.Columns.Count) 'redimensione pl
pl.Select 'sélectionne pl
End Sub

il te monte comment redimensionner une plage.
 

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

Bonjour Robert et merci pour ta réponse ;)

Pour t'éviter d'aller ouvrir le fichier ou de relire l'ancien fil, ainsi que pour faciliter le solutionnement du problème par d'autres éventuellement, je vais exposer plus précisément mon souci ;)

Alors voilà, j'ai ce code :
Code:
Sub ArchiveFact()
Dim conn As Object
Dim requete As Object
Dim fact_num As Long
Dim fact_date As Date
Dim cmd_num As String
Dim cmd_date As Date
Dim nom_clt As String
Dim ech_date As Date
Dim tot_HT As Double
Dim texte_SQL As String
Dim classeur As String
Dim fichier As String

Sheets("Facture").Activate

'collecte les infos de la facture
fact_num = Range("A14")
fact_date = Range("A16")
cmd_num = CStr(Range("C16"))
cmd_date = Range("D16")
nom_clt = CStr(Range("F9"))
ech_date = Range("H16")
tot_HT = Range("F43")

'connexion à la base dans fichier archives.xls
classeur = "Archives_test.xls"
fichier = ThisWorkbook.Path & "\" & classeur
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                "data source=" & fichier & ";" & _
                "extended properties=""Excel 8.0;"""
                
' travail demandé: insère dans les champs de "Archives_fact" les données collectées
texte_SQL = "INSERT INTO Archives_fact (num_fact,date_fact,num_cmd,date_cmd,nom_clt,tot_HT,ech_date) VALUES ('" & (fact_num) & "','" & (fact_date) & "', '" & (cmd_num) & "','" & (cmd_date) & "','" & (nom_clt) & "','" & (ech_date) & "','" & (tot_HT) & "')"
' éxécute le travail demandé
Set requete = CreateObject("ADODB.recordset")
Set requete = conn.Execute(texte_SQL)

Set requete = Nothing
Set conn = Nothing

MsgBox "archivage de la facture n° " & fact_num & " effectué avec succès"

End Sub

Au sein de celui-ci, un commande sql :
Code:
texte_SQL = "INSERT INTO Archives_fact (num_fact,date_fact,num_cmd,date_cmd,nom_clt,tot_HT,ech_date) VALUES ('" & (fact_num) & "','" & (fact_date) & "', '" & (cmd_num) & "','" & (cmd_date) & "','" & (nom_clt) & "','" & (ech_date) & "','" & (tot_HT) & "')"

Cette commande sql fonctionne parfaitement la première fois, mais ensuite, il faut que je redimensionne manuellement la plage à laquelle "Archives_fact" fait référence en lui rajoutant une ligne.

Si j'utilise l'enregistreur de macro, j'obtiens, en commande :
Code:
Windows("Archives_test.xls").Activate
ActiveWorkbook.Names.Add Name:="ex", RefersToR1C1:="=Feuil1!R1C1:R7C7"

Et je ne vois pas comment agrandir la plage définie à Archives_fact d'une ligne à chaque enregistrement ...

Si jamais je n'agrandis pas cette plage, j'ai le message d'erreur suivant qui s'affiche :
"Erreur d'exécution '-2147467259 (80004005)' :
Impossible d'agrandir la plage nommée."

Voilà pour les détails ;)
Et merci encore ;)
 
Dernière édition:

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

De plus que je ne peux utiliser le
"Windows("Archives_test.xls").Activate"
vu que mon classeur est fermé ...

Est-il possible de faire quelque chose du genre
Code:
Set Archives_fact = Archives_fact.Resize(pl.Rows.Count + 1, pl.Columns.Count) 'redimensione pl
:confused::confused::confused:
 

Pierrot93

XLDnaute Barbatruc
Re : Agrandir une plage de sélection à chaque enregistrement.

Bonjour Talziator, Robert

pas tout suivi, mais pour redéfinir une plage nommée, regarde le code ci-dessous si il peut t'aider :

Code:
ActiveWorkbook.Names("ex").RefersTo = Sheets("Feuil1").Range("A1:A3")

bonne fin d'après midi
@+

Edition : aarf j'ai du me planté, code non valide sur classeur fermé...
 

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

J'ai essayé avec :
Code:
Set Archives_fact = Archives_fact.Resize(Archives_fact.Rows.Count + 1, Archives_fact.Columns.Count) 'redimensione pl

J'ai le message d'erreur suivant qui apparaît :
"Erreur de compilation :
Membre de méthode ou de données introuvable"

Et me surligne en jaune l'argument .Rows
 

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

J'ai également essayé avec :
Code:
Set Range(Archives_fact) = Range(Archives_fact).Resize(Range(Archives_fact).Rows.Count + 1)

Mais il me surligne en bleu le dernier Archives_fact avant .Rows et me pond le message d'erreur suivant :
"Erreur de compilation :
Variable ou procédure attendue, et non un module"

...

Je ne sais plus trop quoi faire pour parvenir à agrandir ma plage nommée à chaque insertion d'une ligne ...

Peut-être que quelqu'un pourra m'aider, du mois je l'espère ... Tout comme j'espère que c'es réalisable sans s'arracher les cheveux pendant 3 jours ...

Amicalement,
Talzatior.

Merci encore à vous tous.
 
Dernière édition:

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

Je crois que je vais devoir reprogrammer toute ma macro ...

Je pense que je vais faire en sorte que le classeur cible s'ouvre le temps du transfert de données, agrandisse cette satanée plage, pour enfin se fermer et se sauvegarder ...

J pense que je n'ai pas le choix ... Je m'y atèle demain, si d'ici là quelqu'un a une autre idée à me soumettre, ce sera avec grand plaisir ;)

Sur ce, bonne nuit le forum ;)
 

Talzatior

XLDnaute Occasionnel
Re : Agrandir une plage de sélection à chaque enregistrement.

Bon, eh bien, apparemment il n'existe pas de moyen pour parvenir à ce que je souhaite de cette manière ...

je vais donc recommencer ma macro en ouvrant mon classeur cible et cela simplifiera les choses je pense ...

En tous les cas merci à ceux qui ont essayé de me proposer des solutions ;)

A bientôt le forum ;)

Talzatior.
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55