VSB et excel fichier VALIDE - on peut fermer le post

VSB et excel fichier VALIDE - on peut fermer le post - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 19-01-2010 à 09:50:13   

Reply

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 ?

Reply

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"

Reply

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 ?)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 19-01-2010 à 20:30:14    

alors l'idéal si c'est possible et qu'il se rempli seul.
sinon comment faire?

Reply

Marsh 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


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

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?

Reply

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


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

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/


Message édité par kiki29 le 19-01-2010 à 22:15:58
Reply

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

Reply

Marsh Posté le 19-01-2010 à 22:46:07   

Reply

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

Reply

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
 
 

Reply

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.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

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.

Reply

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 .... :p
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

Reply

Marsh Posté le 22-01-2010 à 09:49:10    

ayé je viens de trouver le bon code, c'etait tout con :p (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

Reply

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 :p (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 :
  1. Sub transpose_dans_tableau()
  2. 'Atteindre le formulaire et mémoriser les données
  3.     Sheets("Formulaire" ).Select
  4.    
  5. ' Coller avec transposition dans le formulaire
  6.   Range("E5:E12" ).Copy
  7.  
  8.     Range("B20" ).Select
  9.     Selection.PasteSpecial Transpose:=True
  10. Application.CutCopyMode = False
  11. mavaleur = Range("B20:I20" ).Value
  12. 'ouvrir la base de donnée
  13.    Workbooks.Open Filename:= _
  14.     "\\SERVEUR-sc\data\Premieres frappes\1 en cours\lot\webmaster\test\chrono arrivée 2010\Chrono 2010 arrivée.xls "
  15.  
  16. 'Trouver la  dernière ligne du Tableau:
  17. Dim dernière, Ligne As Integer
  18. Range("B1" ).Select  '(si le tableau commence en col B)
  19. 'Pour chaque colonne de 1 à 8   (8 ou autre, selon votre tableau !)
  20.   For i = 1 To 8
  21.     ' on détermine à partir du BAS, le rang de la dernière cellule NON VIDE  (très rapide)
  22. Ligne = Cells(65530, i).End(xlUp).Row
  23.   'si le rang trouvé est supérieur au plus grand précédent, "dernière" prend cette valeur:
  24. If Ligne > dernière Then dernière = Ligne
  25. Next i
  26. 'Et pour aller 1 ligne en-dessous:
  27. dernière = dernière + 1
  28. Range(("B" & dernière), ("i" & dernière)).Value = mavaleur
  29.     ActiveWorkbook.Close savechanges:=True
  30. ' Rendre vierge le formulaire
  31.    Sheets("Formulaire" ).Select
  32.     Range("E5:E12" ).ClearContents
  33.     Range("E5" ).Select
  34. End Sub


 
 
(si tu veux copier cette macro, dble cique dedans pour ôter les numéros)
 
 
Bien à toi
 

Reply

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 :p (enfin pas pour moi) puisque j'ai pas mal galéré.
 
MERCI A TOUS


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 :)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed