Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3196 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VSB et excel fichier VALIDE - on peut fermer le post

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VSB et excel fichier VALIDE - on peut fermer le post

n°1958668
fabio gadz​ouli
Posté le 19-01-2010 à 09:50:13  profilanswer
 

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
mood
Publicité
Posté le 19-01-2010 à 09:50:13  profilanswer
 

n°1958680
tegu
Posté le 19-01-2010 à 10:32:12  profilanswer
 

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 ?

n°1958684
fabio gadz​ouli
Posté le 19-01-2010 à 10:51:00  profilanswer
 

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"

n°1958826
otobox
Maison fondée en 2005
Posté le 19-01-2010 à 20:27:04  profilanswer
 

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
n°1958827
fabio gadz​ouli
Posté le 19-01-2010 à 20:30:14  profilanswer
 

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

n°1958830
otobox
Maison fondée en 2005
Posté le 19-01-2010 à 20:34:03  profilanswer
 

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
n°1958832
fabio gadz​ouli
Posté le 19-01-2010 à 20:41:19  profilanswer
 

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?

n°1958836
otobox
Maison fondée en 2005
Posté le 19-01-2010 à 20:45:40  profilanswer
 

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
n°1958849
kiki29
Posté le 19-01-2010 à 22:15:31  profilanswer
 

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
n°1958856
fabio gadz​ouli
Posté le 19-01-2010 à 22:46:07  profilanswer
 

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

mood
Publicité
Posté le 19-01-2010 à 22:46:07  profilanswer
 

n°1958900
fabio gadz​ouli
Posté le 20-01-2010 à 08:51:32  profilanswer
 

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

n°1959325
fabio gadz​ouli
Posté le 21-01-2010 à 09:54:37  profilanswer
 

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
 
 

n°1959493
otobox
Maison fondée en 2005
Posté le 21-01-2010 à 18:28:16  profilanswer
 

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
n°1959495
fabio gadz​ouli
Posté le 21-01-2010 à 18:31:19  profilanswer
 

ça y est j'a itrouvé.
tous marche bien, sauf un truc.
mais je mettrais le code demain.

n°1959570
fabio gadz​ouli
Posté le 22-01-2010 à 08:11:58  profilanswer
 

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

n°1959589
fabio gadz​ouli
Posté le 22-01-2010 à 09:49:10  profilanswer
 

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

n°1959681
Laoo
Posté le 22-01-2010 à 12:56:55  profilanswer
 

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
 

n°1959872
otobox
Maison fondée en 2005
Posté le 23-01-2010 à 12:40:08  profilanswer
 

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
n°1960119
fabio gadz​ouli
Posté le 25-01-2010 à 07:54:10  profilanswer
 

c'est exact.
ce forum est une mine d'or si on se donne la peine de chercher un peu.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VSB et excel fichier VALIDE - on peut fermer le post

 

Sujets relatifs
parcourir fichier CSV (TAB), saut de ligne non détecté[Résolu] boucle for ne retient que la dernière ligne du fichier
suppression structure dans fichier[C] Ecriture dans un fichier
[SHELL] Connexion base DB2 + lancement requête dans fichier .sqlrecuperer la taille d'un fichier distant
Signature et Cryptage fichier XML avec php[VBA] Ajouter une ligne à un fichier Word à partir de cellules Excel
Enregistrer fichier deja ouvert 
Plus de sujets relatifs à : VSB et excel fichier VALIDE - on peut fermer le post


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR