[déplacé VB6 -> VBA] Aide pour VBA macro à compléter
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009
-
7 juil. 2009 à 14:02
cs_nandinho
Messages postés14Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention10 juillet 2009
-
8 juil. 2009 à 23:09
Bien le bonjour tout le monde,
voila le "problème" je suis en train de faire un projet de stage pour EDF ( vous me remercieré plus tard pour la réactivité pendant les tempêtes ^^) , je travail sur une base de données (j'ai fais mes premiers pas il y a 6 semaines pour Access et encore moins pour le VRAI Excel). Je besoin de traiter un .xls qui me retourne une base pour le réintégré dans ma BdD, le but ajouter des info sur certaines lignes ( j'aimerais toutes...mais bon...on va pas trop leurs en demander) j'ai donc le 1er Fichier (tout préparer avec macro et code) qui envoi une 1ere fois les données dans la BdD, elle les traitent et les envoi au différent bureau qui me les retourne "remplie" MAIS toutes les lignes ne sont pas remplie et le 1er fichier peut s'agrandir, je n'arrive donc pas à sélectionner toutes les lignes qui sont remplies en entiers ou presques et les faires remplacer dans le 1er fichier (grace à un num uniques).
Sa ferait en gros, ligne remplie dans le fichier renvoyer, on copie/colle à la place de l'autre dans le 1er fichier. Et on passe à la suivante. Sachant quand plus je dois rajouter les colonnes mais sa j'ai fait grâce à l'enregistreur de macro.
Donc voila, j'aimerai un ptit bout de code à grignotter, si quelqu'un pouvait m'aider sa sera gentil!!
Merci.
A voir également:
[déplacé VB6 -> VBA] Aide pour VBA macro à compléter
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009 7 juil. 2009 à 14:20
Outch en relisant sa doit être corsé à comprendre...même moi je m'embrouille . Petite info en supplémentaire.
Le test des cellules vides se fait dans les colonnes AB AC AD. En faite il faudrait juste copier les info de chaque cellule à la ligne qui correspond dans le 1er Fichier( FicheCAD44.xls).
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009 7 juil. 2009 à 14:39
Voila déjà mon début, mais c'est pas vraiment de la prog intelligente
Sub PréparationRetour()
'
' PréparationRetour Macro
'
'
Windows("Zone 1.xls").Activate <---Zone 1 c'est mon fichier de test ( pb il ne s'appelle pas tous comme sa! Comment faire pour ouvrir un fenêtre de recherche et qu'il travail dans celle-ci?)
Columns("AE:AH").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("L1").Select
Selection.EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Range("M1").Select
Selection.EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Columns("AD:AD").Select
Columns("AC:AC").ColumnWidth = 24.14
Columns("AE:AE").Select
Selection.Cut
Range("I1").Select
Selection.Insert Shift:=xlToRight
Columns("AB:AB").ColumnWidth = 24
Columns("AB:AB").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("AB1").Select
Windows("Zone 1.xls").Activate
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:AH319").Select
Selection.Copy
Windows("Retour.xls").Activate
Range("A2").Select
ActiveSheet.Paste
Windows("Retour.xls").Activate
End Sub
hellangel777
Messages postés267Date d'inscriptionjeudi 5 février 2009StatutMembreDernière intervention26 novembre 20131 7 juil. 2009 à 14:43
Bonjour,
imagine une chose, tu travailles sur un projet, tu as un soucis, tu demandes de l'aide, tu relis ton message et tu te rend compte qu'il est "compliqué" car "même toi tu t'embrouilles"
Essaye de faire une explication claire, si tu veux de l'aide, car la... c'est le brouillard dans ma tête après avoir lu tes explications...
HellAngel777
<hr />
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009 7 juil. 2009 à 15:13
+1 pour toi, j'ai "couché" sa sur tableau pour avoir un aperçue de se que je voulais (et sa aide) Je vais couper le traitement en deux.
Je recois un fichier (Fiche 1 par ex) que je ne peux importer avec Access, je crée donc un modéle (Retour) qui lui permet d'être importé. Sur le Fiche 1 je supprime la 1ere ligne, puis je sélectionne tous, copie/colle dans le fichier Retour cellule A2 (enregistreur de macro)
J'aimerais d'abord avoir le code pour afficher une fenêtre de recherche du fichier. (Fiche 1 ne s'appelle pas toujours Fiche 1) . Et aussi lorsque je fais la sélection (Ctrl+A) sa me prend tous mais avec l'enregistreur sa prend en faite que ma sélection A1:AH30 par exemple donc si c'est plus grand sa passe pas. J'ai bien aggrandie jusqu'a 2500 mais il doit yavoir une astuce un peu plus beaucoup mieux much better...
Vous n’avez pas trouvé la réponse que vous recherchez ?
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009 7 juil. 2009 à 15:28
Mon nouveau code
Sub PréparationRetour()
'
' PréparationRetour Macro
'
'
Windows("Zone 1.xls").Activate <---Zone 1 c'est mon fichier de test ( pb il ne s'appelle pas tous comme sa! Comment faire pour ouvrir un fenêtre de recherche et qu'il travail dans celle-ci?)
Columns("AE:AH").Select
Selection.Delete Shift:=xlToLeft
Columns("AB:AB").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Windows("Retour.xls").Activate
Windows("Zone 1.xls").Activate
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:AD319").Select
Selection.Copy
Windows("Retour.xls").Activate
ActiveSheet.Paste
End Sub
cs_nandinho
Messages postés14Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention10 juillet 2009 7 juil. 2009 à 23:23
Bonjour,
Tu peux utiliser une boite de dialogue pour connaître le nom du fichier par exemple :
nom_fichier = InputBox("Nom du fichier :", "Saisir le nom du fichier à traiter")
If nom_fichier = "" Then Exit Sub
If Right(nom_fichier, 4) <> ".xls" Then nom_fichier = nom_fichier & ".xls"
Workbooks(nom_fichier).Activate
Dans cet exemple, nom_fichier est le nom du fichier à travailler, si tu cliques sur annuler de la boite de dialogue, la macro s'arrête. Si tu ne saisis pas l'extension ".xls" elle se rajoute.
pour savoir le nombre de lignes tu peux utiliser la fonction "conter"
HomoAnonimous
Messages postés6Date d'inscriptionmardi 7 juillet 2009StatutMembreDernière intervention 8 juillet 2009 8 juil. 2009 à 08:40
Gné???ma réponse n'a pas été poster...Je deviens fou.
Donc je disais
Bonjour,
Ton code pour le nom de fichier ne correspond pas, mon exemple est un truc vite fait. La input box fonctionne juste si celui est déjà ouvert. Moi je veux faire choisir l'emplacement du fichier à l'utilisateur, avoir une fenêtre du genre "Ouvrir".
Autre question comment je fais pour réutilisé le nbre de lignes dans mon Range?
Merci
cs_nandinho
Messages postés14Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention10 juillet 2009 8 juil. 2009 à 23:09
Bonjour,
Mon exemple fonctionne, mon but n'est pas de faire le boulot à ta place, mais de te donner des idées, de t'aider à développer TES macros.
Au lieu d'activer tu peux ouvrir, si le dossier contenant le fichier est toujours le même voici une variable ou "Chemin_fichier" est le chemin pour aller jusqu'au fichier à ouvrir :
Chemin_fichier = "C:\Documents and Settings\Homoanonimous\Mes documents"
nom_fichier = InputBox("Nom du fichier :", "Saisir le nom du fichier à traiter")
If nom_fichier = "" Then Exit Sub
If Right(nom_fichier, 4) <> ".xls" Then nom_fichier = nom_fichier & ".xls"
Workbooks.Open Filename:=Chemin_fichier & nom_fichier
Tu peux aussi ouvrir la boite de dialogue "Ouvrir un fichier"
boite_ouvrir = Application.Dialogs(xlDialogOpen).Show
''''''''''''''''''''''''''''''''''
Pour utiliser le nbre de lignes tu peux utiliser une boucle, par exemple si le fichier actif est celui ou tu veux coller les données :
For chaque_ligne = 1 To nbre_lignes
Cells(chaque_ligne, 1).Value = Workbooks(nom_fichier).Cells(chaque_ligne, 1)
Next chaque_ligne
Dans mon exemple, il n'y a qu'une colonne à copier, autrement il faut imbriquer deux boucles genre - si tu as 5 colonnes :
For chaque_ligne = 1 To nbre_lignes
For chaque_colonne = 1 to 5
Cells(chaque_ligne, chaque_colonne ).Value = Workbooks(nom_fichier).Cells(chaque_ligne, chaque_colonne )
Next chaque_colonne
Next chaque_ligne
Si le fichier de destination a déjà d'autres données, tu comptes le nbre de lignes du fichier destination et tu l'ajoutes au nbre de lignes du fichier origine, par exemple :
nbre_lignes_destination = Application.........
nbre_lignes_destination = nbre_lignes_destination + nbre_lignes
Avec tout ça, tu as de quoi reflechir et faire un bout de boulot
N'hesite pas à consulter l'aide de VBA (touche F1)