[VBA] Problème macro Excel

Résolu/Fermé
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 - 30 mai 2008 à 10:35
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 10 juin 2008 à 15:39
Bonjour,

Ma macro consiste a récupérer des données sur une autre feuille et les coller dans une nouvelle mais la elle ne veut pas l'effectuer d'ou vient le probleme s'il vous plait?????

Voici un bout de code :

Public Function Charge_Fichier_N2()
'Charge le fichier résultant des requetes de niveau2
Dim i As Integer
Dim NewClasseur As Variant
Dim NewSheet As Variant
Application.ScreenUpdating = False 'Désactive la mise à jour de l'écran
Set NewClasseur = Workbooks.Add 'Création du classeur contenant les différentes requetes de N2
With NewClasseur
.Title = "Requetes Niveau 2"
.Subject = "Query N2"
.SaveAs Filename:="Requetes Niveau 2.xls"
End With
For i = 1 To Nb_Query_N2
File_txt = "QueryN2_File" & i
Set NewSheet = Worksheets.Add ' Création de la feuille pour chaque requete
NewSheet.Name = File_txt 'Nomage de la feuille du nom de la requete Zadig

LE PROBLEME COMMENCE ICI JE PENSE

Workbooks("QueryN2_File" & i).Activate
Sheets("N2SDB").Select
Range(Cells(1, 1), Cells(300, 100)).Select
Selection.Copy
Workbooks("Requetes Niveau 2.xls").Sheets("QueryN2_File" & i).Activate
Cells(1, 1).Select
ActiveSheet.Paste
ThisWorkbook.Sheets("QueryN2_File" & i).Activate

Next i
A voir également:

10 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 mai 2008 à 10:44
Bonjour,
Nb_Query_N2 n'est pas initialisé ? ou alors quel est sa valeur ?
A+
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 10:47
Si il est initialisé à 16 dans mon cas!!!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 11:03
tu ne confondrais pas le nom classeur avec nom des feuilles ?
Workbooks("QueryN2_File" & i).Activate 
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
30 mai 2008 à 11:08
En fait j'essaie de faire en sorte que les feuilles ont le même nom que les fichiers d'ou proviennent les données!!!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 11:19
oui, ca j'ai bien compris, mais Workbooks c'est un classeur et je ne vois pas où tu crée des classeurs avec ce nom + i
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
30 mai 2008 à 11:26
Quand je l'execute il me dit que l'indice n'appartient pas a la selection

Et sa marche pour le premier vu que le i est à 1 il va piocher dans le fichier ini le nom qui correspond Query_Files(i c'est à dire 1)
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 mai 2008 à 12:35
Je sais que quand ont a une idée dans la tête il est parfois difficile de se la sortir mais...
WORKBOOK c'est un CLASSEUR et Sheets c'est UNE FEUILLE et ca m'étonnerais que tu ai un classeur avec le même nom que la feuille !!
Quel est le nom DU CLASSEUR ?
Quel est le nom DE LA FEUILLE ?
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 14:13
g voulu donner un nom de feuille identique au nom du fichier d'ou provient les données mais si tu me dis que c'est pas possible que sa doi causer des problemes je veux bien te croire mais jtien pa a tvexé c pa un fichier ki a sa feuille avec le meme nom voila.
Mais abandonne c pa grave je vais cherché une autre methode et je te soliciterai si je n'y arrive toujours pas.
Merci en tou cas
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 mai 2008 à 14:47
Faut pas abandonner vite... examine bien mes rematques..

'Mon avis, ajouter ces lignes
Dim CeClasseur As String
    CeClasseur = ThisWorkbook.FullName
'------------------------------------------------------------------------
    'ICI tu crée un nouveau classeur avec le nom Requetes Niveau 2.xls
    Set NewClasseur = Workbooks.Add 'Création du classeur contenant les différentes requetes de N2
    With NewClasseur
        .Title = "Requetes Niveau 2"
        .Subject = "Query N2"
        .SaveAs Filename:="Requetes Niveau 2.xls"
    End With
'------------------------------------------------------------------------
    For i = 1 To Nb_Query_N2 'd'aptès tes dires = 16
        'ICI tu ajoute des nouvelles feuilles NOMS =
        'QueryN2_File1 : QueryN2_File2 : QueryN2_File3  etc.. jusque 16
        File_txt = "QueryN2_File" & i
        Set NewSheet = Worksheets.Add ' Création de la feuille pour chaque requete
        NewSheet.Name = File_txt 'Nomage de la feuille du nom de la requete Zadig
        '-----------------------------
    'LE PROBLEME COMMENCE ICI JE PENSE
    'ICI tu veux activer des classeurs avec les NOMS =
    'QueryN2_File1 : QueryN2_File2 : QueryN2_File3  etc.. jusque 16
    'MAIS OU SONT-IL ??, je ne vois nulle part que tu a créer des classeurs
    'avec ces noms, à moins que tu les ai créer sur le DD
    'et que tu les ai déjà OUVERT
    Workbooks("QueryN2_File" & i).Activate
    'ICI tu veux sélectionner une feuille dans un classeur qui je pense
    'n'existe pas.
'ICI Je pense que tu doit remplacer la ligne du dessus par
'Workbooks(CeClasseur).activate
    Sheets("N2SDB").Select
    Range(Cells(1, 1), Cells(300, 100)).Select
    Selection.Copy
    Workbooks("Requetes Niveau 2.xls").Sheets("QueryN2_File" & i).Activate
    Cells(1, 1).Select
    ActiveSheet.Paste
    ThisWorkbook.Sheets("QueryN2_File" & i).Activate
'ICI Je pense que tu doit remplacer la ligne du dessus par
'Workbooks(CeClasseur).activate
    Next i

Ca peu ne pas être juste je n'ai pas l'ensemble de l'appli.
Quel est le nom du classeur sur lequel les donnée sont déjà
tu dit..
A+
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 14:58
Ce que tu m'as fait est bien et je vais t'expliquer toute l'appli tu me dis ce que tu en penses

J'ai crée un fichier Lanceur.xls la premiere feuille est une feuille INI ou sont stockés les noms des fichiers placés sur un serveur dont QueryN2Files1...2..3..etc.
Ce fichier Lanceur consiste à executer à son ouverture un formulaire pour selectionner le niveau que je veux.
En choisissant Niveau 2 normalement j'aimerai que qu'il crée le fichier Requêtes Niveau 2.xls avec des feuilles possédant le nom des fichiers qui sont sur le serveur c'est à dire QueryN2Files1..2..3 etc... et que les données qui sont dans ces fichiers sur le serveur atterissent dans Requêts Niveau 2.xls à la feuille correspondante.

J'espere que tu as compris sinon je ne vois pas ce que je peux te dire mais merci c gentil!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 15:10
en effet c'est beaucoup plus clair, reste 2 questions..
Quand tu lance la macro.. Les 16 Classeurs sont déjà ouvert ?
si oui, pas de 2ém question
Sinon..
Il faut d'abord les ouvrir et avec le chemin complet y compris réseau.

A+
EDIT:
Tes 'Fichiers' c'est bien des classeurs xls ?
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
30 mai 2008 à 15:29
Non non c'est censé etre un classeur avec 16 feuilles et les 16 classeur ou il va récuperer les données sont sur le serveur.
Est ce que je dois tous les ouvrir ou je peux lui demander de les ouvrir et récuperer mes données?
a+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
30 mai 2008 à 16:17
NOUS Y SOMME ENFIN.....
Bien sur que tu doit les ouvrir, y a moyen de faire autrement mais beaucoup plus compliqué, et sur réseaux je sais pas si c'est possible)

Les réseaux je métrise pas, mais je pense que tu aurais plus facile de les ouvrir avec des Hyperlink que tu placerais sur ta feuille "INI"
exemple:
adresse dans cellule
Range("C11").Select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

ou alors avec Workbooks.open(chemin & nom complet)
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
30 mai 2008 à 16:49
Avec Workbooks.open sa miré mieu mais si sa ne marche pas jessaye le reste.
Merci a+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
3 juin 2008 à 19:29
Bonjour,
Avec les explications qie tu donne ont est reparti pour la gloire, tâche d'EXPLIQUER CA CLAIREMENT ET COMPLETEMENT, avec des extraits de codes si nécessaire.
A+
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
6 juin 2008 à 08:41
Bonjour,

Dis moi je voulais savoir j'essaye mais je n'arrive pas : J'essaie de copier deux zones et de les coler dans le même tableau a peu près le probleme c'est qu'il ne colle qu'une seule zone pas la deuxieme. EN GROS C'EST L'UNE OU L'AUTRE



Feuille_enCours = Chemin_Files & "\" & QueryN4_File(i) & ".txt"

Workbooks(Feuille_enCours).Activate
Sheets(QueryN4_File(i)).Select
Range(Cells(index_section_homme, 6), Cells(index_section_homme + 9, 24)).Select
Selection.Copy
Workbooks(File_Out_N4).Activate
Sheets(Nom_Adr_Query_N4(i)).Select
Cells.Select
Range(Cells(22, 4), Cells(31, 17)).Select
ActiveSheet.Paste




Feuille_enCours = Chemin_Files & "\" & QueryN4_File(i) & ".txt"

Workbooks(Feuille_enCours).Activate
Sheets(QueryN4_File(i)).Select
Range(Cells(index_section_femme, 6), Cells(index_section_femme + 9, 24)).Select
Selection.Copy
Workbooks(File_Out_N4).Activate
Sheets(Nom_Adr_Query_N4(i)).Select
Cells.Select
Range(Cells(10, 4), Cells(20, 17)).Select
ActiveSheet.Paste
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
6 juin 2008 à 22:42
Impossible de suivre tes macros, je ne sais pas la contenu des variables, tu ferais bien de faire un pas à pas et voir où ca foire, et controler les valeurs des variables.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
9 juin 2008 à 14:08
Bonjour,

Je suis en train de concevoir une macro qui génère automatiquement un fichier et l'enregistre dans un dossier.
La macro marche cependant j'ai un petit problème: comme cette application est tenue à etre utilisée plusieurs fois lorsque je l'execute Windows me demande si je veux l'enregistrer et écraser le fichier deja existant....

SI JE METS OUI : TOUT MARCHE CORRECTEMENT!!!
SI JE METS NON :LA MACRO S'EXECUTE QUAND MM MAIS BUG AUSSITOT ET EXCEL N'EST PLUS UTILISABLE!!!
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 juin 2008 à 16:20
montre la partie de macro concernée
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009 > lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
9 juin 2008 à 16:40
Justement je ne sais absolument pas comment concevoir tout ça, dans ce domaine la......

c'est pour ca que je te solicite peut etre que tu peux m'aider
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 juin 2008 à 17:00
La macro marche cependant j'ai un petit problème: comme cette application est tenue à etre utilisée plusieurs fois lorsque je l'execute Windows me demande si je veux l'enregistrer et écraser le fichier deja existant....
SI JE METS OUI : TOUT MARCHE CORRECTEMENT!!!
SI JE METS NON :LA MACRO S'EXECUTE QUAND MM MAIS BUG AUSSITOT ET EXCEL N'EST PLUS UTILISABLE!!!


Pour qu'Excell te demande ca, c'est que tu ferme un classeur !!! sinon dans ce que tu montre rien ne permet d'avoir cette demande, alors réfléchi bien encore une fois et MONTRE OU TU FERME UN CLASSEUR.
A+
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
10 juin 2008 à 08:22
VOICI CE QUI POURRAIT TINTERESSAIT ALORS!!!!!!!


On Error Resume Next
Set NewClasseur = Workbooks.Add 'Création du classeur contenant les différentes requetes de N2
With NewClasseur
.Title = "Requetes Niveau 2"
.Subject = "Query N2"
.SaveAs Filename:=File_Out_N2
End With
If Err.Number = 1004 Then
' Renseigne l'utilisateur. Puis efface l'objet Err.
Dim Msg1 As Variant
Msg1 = "Le fichier : " & File_Out_N2 & " est déjà ouvert " & Chr(13) & _
" Il va être fermé ! "
MsgBox Msg1, , " MESSAGE D'ERREUR "
Err.Clear ' Efface les champs d'objet Err
End If
Workbooks(File_Out_N2 & ".xls").Close SaveChanges:=False 'ferme le fichier xls déjà ouvert
'Fin traitement d'erreur
Application.ScreenUpdating = False 'désactive la mise à jour de l'écran


ET LORSQUE JE METS NON PAR EXEMPLE DANS LA FENETRE WINDOWS IL UTILE CETTE PARTIE DE CODE


'**************************
' Ouverture File txt
'**************************
FICHIER = Chemin_Files & "\" & NomSheet & ".txt" 'Definie le chemin et le fichier à ouvrir sur le serveur
On Error Resume Next
Workbooks.OpenText Filename:=FICHIER, Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
TrailingMinusNumbers:=True
'Traitement de l'erreur en cas d'absence de fichier
If Err.Number = 1004 Then
' Renseigne l'utilisateur. Puis efface l'objet Err.
Dim Msg2 As Variant
Msg2 = "Erreur lors de l'ouverture du fichier : " & Chr(13) & _
FICHIER & Chr(13) & _
" Ce fichier n'existe pas ! " & Chr(13) & _
" La feuille Excel : " & Nom_Adr_Query_N2(i) & " ne contiendra pas de données. "
MsgBox Msg2, , " MESSAGE D'ERREUR "
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
10 juin 2008 à 10:25
quand ont a un problème avec une macro ont met JAMAIS On Error Resume Next , sinon ou veut-tu voir où sont situées les erreurs.
Une macro bien faite n'a pas besoin de ca. Sauf cas exceptionnel.
Tu met cette ligne en Rem et tu lance la macro... comme ca tu verras déjà où ca plante
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
10 juin 2008 à 11:09
ta macro debuguée avec les erreurs en commentaire..
Public Chemin As String

'Charge le fichier résultant des requetes de niveau2
Public Function Charge_Fichier_N2()
Dim i As Integer
Dim NewClasseur As Variant
Dim NewSheet As Variant

Nb_Query_N2 = 1 'Pour mon test
    Chemin = ThisWorkbook.Path & "\" 'ou mettre le nom du répertoir + \
    'ca aussi c'est à neutraliser pour le debug, pour permettre de suivre au pas à pas.
    Application.ScreenUpdating = False 'Désactive la mise à jour de l'écran
    Set NewClasseur = Workbooks.Add 'Création du classeur contenant les différentes requetes de N2
    With NewClasseur
        'définit le titre de la page Web
        .Title = "Requetes Niveau 2"
        'utilisé uniquement pour les Macintosh
        .Subject = "Query N2"
        'Manque le répertoir où sauver
        .SaveAs Filename:=Chemin & "Requetes Niveau 2.xls"
    End With

    For i = 1 To Nb_Query_N2
        File_txt = "QueryN2_File" & i
        Set NewSheet = Worksheets.Add ' Création de la feuille pour chaque requete
        NewSheet.Name = File_txt 'Nomage de la feuille du nom de la requete Zadig
    
        'LE PROBLEME COMMENCE ICI JE PENSE
        'OUI,FAUT AJOUTER L'EXTENSION & ".xls"
        Workbooks("QueryN2_File" & i & ".xls").Activate
        Sheets("N2SDB").Select
        Range(Cells(1, 1), Cells(300, 100)).Select
        Selection.Copy
        Workbooks("Requetes Niveau 2.xls").Sheets("QueryN2_File" & i).Activate
        Cells(1, 1).Select
        ActiveSheet.Paste
        'ICI AUSSI ERREUR
        Workbooks("QueryN2_File" & i & ".xls").Activate
    
    Next i
End Function

et comme tu peu le constater, elle fonctionne sans On Erreur !!
A+
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
10 juin 2008 à 11:44
Je vais t'expliquer:

Pour cette partie de code que je t'ai envoyé la derniere fois sayé c ok sa marche (MERCI!), là en fait c'est le tout début.

Comme je t'ai expliqué, quand tu ouvres le lanceur excel il y a ce formulaire avec le choix des niveaux ou je suis censé cocher le niveau dont j'ai besoin... Lorsque je mets lancer il me demande si je veux enregistrer sur le fichier existant parce que j'ai choisi que le resultat de chaque requête aura un nom commun.
Jusque la j'espere que tu me suis

Set NewClasseur = Workbooks.Add 'Création du classeur contenant les différentes requetes de N2
        With NewClasseur
            .Title = "Requetes Niveau 2"
            .Subject = "Query N2"
            .SaveAs Filename:=File_Out_N2


Le probleme est que lorsque je clique sur oui ca marche correctement mais meme lorsque je clique sur non ou annuler ça me lance la requête peut etre il n'y a pas le resultat final mais je voudrais que ça s'arrete quand je clique sur ANNULER au moins pour le bouton NON je verai après.

J'espere que tas compris sinon laisse tomber jvois pas comment texpliqué !!
Merci a+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
10 juin 2008 à 12:54
met le curseur sur la ligne..
.SaveAs Filename:=File_Out_N2
ensuite tu tape F9 (la ligne va être surlignée en brun) et tu lance la macro...
la macro va s'arrété sur cette ligne.
Ensuite tu promène la souris sur File_Out_N2
et tu dit ce que tu lit.
Si pas de bulle, tu ouvre la fenêtre exécution (Afficher >> Exécution) et tu tape..
Print File_Out_N2 >> Enter
Et ont va pas laisser tomber, c'est pas ma nature :D

EDIT: Tu a enlever le ON Error goto ou mis les On Error Goto 0 où je les ai mis. C'est impératif sinon ca ira pas
EDIT2: essaye en mettant AVANT la ligne..
Set NewClasseur
de mettre Application.DisplayAlert = False
Remettre après à true.
0
medeuy Messages postés 44 Date d'inscription mardi 6 février 2007 Statut Membre Dernière intervention 28 décembre 2009
10 juin 2008 à 15:34
Copain?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
10 juin 2008 à 15:39
Laisse tomber, j'ai mis ce poste en résolu, continue dans l'autre ou ouvre un 3èm
0