VSB et excel fichier VALIDE - on peut fermer le post - VB/VBA/VBS - Programmation
Marsh Posté le 19-01-2010 à 10:32:12
Sois plus précis sur les symptômes de ton problème.
Tu dis que ça coince, mais as-tu un message d'erreur ? un faux résultat ?
Marsh Posté le 19-01-2010 à 10:51:00
ah oui oups
j'ai un message, "l'indice n'appartient pas à la selection"
je n'arrive pas a envoyer les infos du fichier "formulaire" au fichier "chrono arrivée 2010"
Marsh Posté le 19-01-2010 à 20:27:04
Il faut d'abord que tu ouvre ton fichier "chrono arrivée 2010" avant d'y coller des infos. (ou alors, il est déjà ouvert manuellement ?)
Marsh Posté le 19-01-2010 à 20:30:14
ReplyMarsh Posté le 19-01-2010 à 20:34:03
fabio gadzouli a écrit : alors l'idéal si c'est possible et qu'il se rempli seul. |
rien compris
Marsh Posté le 19-01-2010 à 20:41:19
oups, je voulais dire est ce possible que le fichier se remplisse en etant fermé?
ou est ce quans ouvrans le fichier formulaire l'autre fichier peux s'ouvrir aussi?
Marsh Posté le 19-01-2010 à 20:45:40
Ben non, si le fichier est fermé, il est fermé... il faut l'ouvrir pour écrire dedans
Il est possible de l'ouvrir d'une façon transparente pour l'utilisateur (c'est à dire que le fichier Excel est ouvert en mémoire, mais il n'apparait pas à l'écran). Ensuite, tu peux écrire dedans.
Après, il ne faut pas non plus oublier de le sauvegarder et de le fermer.
Un début de piste :
http://www.commentcamarche.net/for [...] -en-masque
Marsh Posté le 19-01-2010 à 22:15:31
Salut, pour lire/écrire dans des classeurs fermés voir http://silkyroad.developpez.com/VBA/ClasseursFermes/
Marsh Posté le 19-01-2010 à 22:46:07
merci beaucoup pour votre aide.
demain je me met au travail et je vous tiens au jus.
Sympa de voir des personnes qui prennent du temps pour en aider d'autre.
à charge de revenche j'espere
Marsh Posté le 20-01-2010 à 08:51:32
bon j'ai tjs un probléme en fait.
maintenant j'ai une fonction qui ne marche plus.
j'arrive bien a copier les infos d'un tableau a un autre.
par contre le code ne reconnais plus sur quelle ligne il doit se coller.
j'ai une erreur 400 qui apparait et je n'arrive pas a la solutionner.
le but est que le fichier cherche sur le tableau la premiere case vide et colle ensuite les donnés.
voici le code:
'test pour determiner la ligne ou coller les infos dans le tableau
Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Select
valeurA2 = Range("B2" ).Value
If valeurA2 = "" Then
Range("B2" ).Select
Else
Range("B1" ).Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("B" & ligne_active_base + 1).Select
End If
' mémoriser le n° de ligne
Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Select
ligne_active_base = ActiveCell.Row
' Coller avec transposition
Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Range("B2" ).PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Marsh Posté le 21-01-2010 à 09:54:37
bon je met mon code à jour, ça ne marche tjs pas
j'essaye d'envoyer des info du formulaire dans la base de donnée sans ouvrir cette derniere.
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.Copy
' Coller avec transposition dans le formulaire
Sheets("Formulaire" ).Select
Range("B20" ).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'test pour determiner la ligne et coller les infos dans le tableau
End Sub
Sub InsertRecord()
Dim Cnx As ADODB.Connection
Dim Fichier As String, Feuille As String, strSQL As String
Fichier = "\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls" 'chemin complet du fichier fermé
Feuille = "ARRIVEE 2010" 'Onglet où les données doivent être insérées
Set Cnx = New ADODB.Connection
With Cnx
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & Fichier & "; ReadOnly=False;"
.Open
End With
Cnx.Execute strSQL
Cnx.Close
Set Cnx = Nothing
End Sub
Sub collage()
Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Select
Range("B65536" ).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
' Rendre vierge le formulaire
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.ClearContents
Range("B1" ).Select
'Retourner dans le tableau
Sheets("Formulaire" ).Select
Range("E5" ).Select
End Sub
Marsh Posté le 21-01-2010 à 18:28:16
Forcément que ça ne fonctionne pas : tu ouvres ton fichier en ADO, comme s'il s'agissait d'une base de données.
A la ligne :
Cnx.Execute strSQL |
il y a la variable strSQL qui devrait contenir la syntaxe d'une requête SQL pour écrire dans le fichier Excel, mais cette chaine de caractères, tu ne définis pas !
Tu fais fausse route en utilisant une connexion ADO, utilise plutôt l'exemple que je t'ai donné plus haut. Là, tu pourras utiliser le copier-coller de ta procédure Collage.
La connexion ADO est valable aussi, mais plus complexe à mettre en œuvre.
Marsh Posté le 21-01-2010 à 18:31:19
ça y est j'a itrouvé.
tous marche bien, sauf un truc.
mais je mettrais le code demain.
Marsh Posté le 22-01-2010 à 08:11:58
bon voici comme promis mon code:
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.Copy
' Coller avec transposition dans le formulaire
Sheets("Formulaire" ).Select
Range("B20" ).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'ouvrir la base de donnée
Sheets("Formulaire" ).Select
Range("B20:I20" ).Select
Selection.Copy
Workbooks.Open Filename:= _
"\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls "
'test pour determiner la ligne et coller les infos dans le tableau
' Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Range("B2" ).Select
fin_tableau = Sheets("ARRIVEE 2010" ).Range("B1" ).End(xlDown).Row
Selection.Offset(1, 0).Select
'coller les données
ActiveSheet.Paste
'fermer la base de donnée
ActiveWindow.Close savechanges:=True
'Workbooks.Close Filename:= _
'"\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls "
' Rendre vierge le formulaire
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.ClearContents
Range("B1" ).Select
'Retourner dans le tableau
Sheets("Formulaire" ).Select
Range("E5" ).Select
End Sub
le probléme qui me reste à regler c'est que une fois que j'ai trouver la cellule vide:
' Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Range("B2" ).Select
fin_tableau = Sheets("ARRIVEE 2010" ).Range("B1" ).End(xlDown).Row
Selection.Offset(1, 0).Select
j'aimerai qu'il me selectionne cette cellule et je n'arrive pas a trouve ce code de ....
si quelqu'un a la solution.
car pour le moment si on ouvre le fichier reception "base de donnee" et que j'enregistre le fichier en ayant laisser ma derniere selestion en cellule D4 par exemple ben il va coller mes donne ren D5 ensuite.
or je veux tjs coller en collone B.
en esperant etre assez clair
Marsh Posté le 22-01-2010 à 09:49:10
ayé je viens de trouver le bon code, c'etait tout con (enfin pas pour moi) puisque j'ai pas mal galéré.
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.Copy
' Coller avec transposition dans le formulaire
Sheets("Formulaire" ).Select
Range("B20" ).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'ouvrir la base de donnée
Sheets("Formulaire" ).Select
Range("B20:I20" ).Select
Selection.Copy
Workbooks.Open Filename:= _
"\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls "
'test pour determiner la ligne et coller les infos dans le tableau
'Workbooks("Chrono 2010 arrivée.xls" ).Sheets("ARRIVEE 2010" ).Range(1, 2).Select
Fin_tableau = Sheets("ARRIVEE 2010" ).Range("B1" ).End(xlDown).Select
Selection.Offset(1, 0).Select
Fin_tableau = ActiveCell.Row
'coller les données
ActiveSheet.Paste
'fermer la base de donnée
ActiveWindow.Close savechanges:=True
'Workbooks.Close Filename:= _
'"\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls "
' Rendre vierge le formulaire
Sheets("Formulaire" ).Select
Range("E5:E12" ).Select
Selection.ClearContents
Range("B1" ).Select
'Retourner dans le tableau
Sheets("Formulaire" ).Select
Range("E5" ).Select
End Sub
MERCI A TOUS
Marsh Posté le 22-01-2010 à 12:56:55
fabio gadzouli a écrit : ayé je viens de trouver le bon code, c'etait tout con (enfin pas pour moi) puisque j'ai pas mal galéré. |
Bonjour
C'est bien, tu as bien cherché, et tu as bien trouvé, Bravo. Maintenant, je te propose éventuellement ceci, qui est à la fois un peu plus simple, et surtout plus précis pour trouver la dernière ligne d'un tableau.
En effet, xlDown ne va que à la dernière cellule non vide APRES la cellule spécifiée, donc pas forcément la dernière cellule non vide de la COLONNE. OK? Qui n'est pas forcément non plus la dernière du tableau! Re-OK?
Code :
|
(si tu veux copier cette macro, dble cique dedans pour ôter les numéros)
Bien à toi
Marsh Posté le 23-01-2010 à 12:40:08
fabio gadzouli a écrit : ayé je viens de trouver le bon code, c'etait tout con (enfin pas pour moi) puisque j'ai pas mal galéré. |
Comme Laoo : tu as cherché, galèré et finalement, tu as fini par trouvé Bravo ! Je suis sur que tu as appris pas mal de choses en cherchant la solution et que ceci te servira pour plus tard ! Une corde plus à ton arc
Marsh Posté le 25-01-2010 à 07:54:10
c'est exact.
ce forum est une mine d'or si on se donne la peine de chercher un peu.
Marsh Posté le 19-01-2010 à 09:50:13
Salut à tous,
comme j'ai pu voir sur ce forum y'a pas mal de personne callé dans le visual basic.
alors je vais tenter d'expliquer mon souci.
j'ai deux fichier excel, l'un s'apelle "formulaire" et l'autre "chrono arrivée 2010"
le premier est un formulaire de remplissage, le second la base de donnée ou doit se loger les infos du formulaire.
comment peut on faire passer les informations de l'un vers l'autre.
ci apres le code de mon formulaire:
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire" ).Select
Range("E4:E12" ).Select
Selection.Copy
'test pour determiner la ligne ou coller les infos dans le tableau
Workbooks("Chrono 2010 arrivée" ).Sheets("ARRIVEE 2010" ).Select
valeurA2 = Range("A2" ).Value
If valeurA2 = "" Then
Range("A2" ).Select
Else
Range("A1" ).Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
' mémoriser le n° de ligne
ligne_active_base = ActiveCell.Row
' Coller avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
' Rendre vierge le formulaire
Sheets("Formulaire" ).Select
Range("E4:E12" ).Select
Selection.ClearContents
Range("B1" ).Select
'Retourner dans le tableau
Sheets("Formulaire" ).Select
Range("E4" ).Select
End Sub
je sais que c'est cette ligne qui coince: Workbooks("Chrono 2010 arrivée" ).Sheets("ARRIVEE 2010" ).Select
car j'arrive a faire la copie vers le meme dossier mais pas vers un autre document.
merci par avance
Fabien
Message édité par fabio gadzouli le 22-01-2010 à 10:53:59