En fonction du nombre de fenetre ouvertes VBA
Résolu/Fermé
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
-
13 août 2012 à 14:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 août 2012 à 14:40
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 août 2012 à 14:40
A voir également:
- En fonction du nombre de fenetre ouvertes VBA
- Fonction si et - Guide
- Raccourci agrandir fenetre - Guide
- Fenêtre hors écran windows 11 - Guide
- Nombre facile - Télécharger - Outils professionnels
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
12 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 09:26
17 août 2012 à 09:26
Bonjour,
Comme dit ailleurs...
Comme dit ailleurs...
Option Explicit 'sources : https://www.generation-nt.com/reponses/vba-avoir-liste-fenetre-windows-ouvertes-entraide-298662.html Private Declare Function GetWindowTextLength Lib "user32.dll" Alias _ "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function GetWindowText Lib "user32.dll" Alias _ "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String _ , ByVal nMaxCount As Long) As Long Private Declare Function EnumWindows Lib "user32.dll" _ (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function IsWindowVisible Lib "user32" _ (ByVal hwnd As Long) As Long Private x&, y&, z& Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&) Dim SLength&, Buffer As String, RetVal& SLength = GetWindowTextLength(hwnd) + 1 If SLength > 1 Then Buffer = Space(SLength) RetVal = GetWindowText(hwnd, Buffer, SLength) z = z + 1 If CBool(IsWindowVisible(hwnd)) = True Then x = x + 1 If CBool(IsWindowVisible(hwnd)) = False Then y = y + 1 End If EnumWindowsProc = 1 End Function Sub WinList() x = 0 EnumWindows AddressOf EnumWindowsProc, 0 MsgBox "Vous avez : " & z & " fenêtres ouvertes, dont : " & Chr(10) & _ "- " & x & " visibles," & Chr(10) & "- " & y & " masquées." End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 10:11
17 août 2012 à 10:11
Pour ta question :
Je veux juste dire à excel que "si il y a 3 fenetre, il faut agir ainsi, si il y en a 5, agir ainsi, et si il y en a 6, agir ainsi."
Tu peux intégrer ceci dans ta macro, celle-ci devant être placée en dessous des Private Declare Function, comme ceci :
Je veux juste dire à excel que "si il y a 3 fenetre, il faut agir ainsi, si il y en a 5, agir ainsi, et si il y en a 6, agir ainsi."
Tu peux intégrer ceci dans ta macro, celle-ci devant être placée en dessous des Private Declare Function, comme ceci :
Option Explicit 'sources : https://www.generation-nt.com/reponses/vba-avoir-liste-fenetre-windows-ouvertes-entraide-298662.html Private Declare Function GetWindowTextLength Lib "user32.dll" Alias _ "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function GetWindowText Lib "user32.dll" Alias _ "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String _ , ByVal nMaxCount As Long) As Long Private Declare Function EnumWindows Lib "user32.dll" _ (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function IsWindowVisible Lib "user32" _ (ByVal hwnd As Long) As Long Private x&, y&, z& Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&) Dim SLength&, Buffer As String, RetVal& SLength = GetWindowTextLength(hwnd) + 1 If SLength > 1 Then Buffer = Space(SLength) RetVal = GetWindowText(hwnd, Buffer, SLength) z = z + 1 If CBool(IsWindowVisible(hwnd)) = True Then x = x + 1 If CBool(IsWindowVisible(hwnd)) = False Then y = y + 1 End If EnumWindowsProc = 1 End Function Sub TaMacro() 'Déclaration des variables 'Ton code... 'Bla bla 'ICI, tu as besoin de connaitre le nombre de fenêtres ouvertes ET visibles 'donc : x = 0 EnumWindows AddressOf EnumWindowsProc, 0 Select Case x Case 3 'ICI tu places ton code si 3 fenêtres ouvertes et visibles Case 5 'ICI tu places ton code si 5 fenêtres ouvertes et visibles Case 189 'ICI tu places ton code si 189 fenêtres ouvertes et visibles Case Else 'ICI tu places ton code pour tous les autres cas 'Le Case Else est primordial 'pour pallier à d'éventuelles erreurs et/ou bugs End Select 'ICI la suite de ton code End Sub
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 10:56
17 août 2012 à 10:56
Merci beaucoup,
Par contre j'ai un message d'erreur qui me dit variable non définie pour mon macro original qu'il surligne en jaune "Sub Monmacrooriginal()"
Quand je le met après le en function au niveau de ton "Sub TaMacro()"
Par contre j'ai un message d'erreur qui me dit variable non définie pour mon macro original qu'il surligne en jaune "Sub Monmacrooriginal()"
Quand je le met après le en function au niveau de ton "Sub TaMacro()"
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 11:00
17 août 2012 à 11:00
tu n'as sans doute pas bien placé les différentes function et sub...
Sans voir ton ficheir je ne peux rien faire....
Sans voir ton ficheir je ne peux rien faire....
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 11:55
17 août 2012 à 11:55
J'en déduit donc que tu veux continuer.
En effet, il ne faut pas ajouter 15 fois la même chose pour tous les cas ou le nombre de fenêtres ouvertes et visibles est inférieur à 16...
Utilises trois cas :
Case Is < 16
Case 16 To 24
Case Else
Comme ceci :
En effet, il ne faut pas ajouter 15 fois la même chose pour tous les cas ou le nombre de fenêtres ouvertes et visibles est inférieur à 16...
Utilises trois cas :
Case Is < 16
Case 16 To 24
Case Else
Comme ceci :
Sub MaMacro() ' ' Runs the executable exectuable.exe, which is the ' Graphic version of the Monprogram program ' Macro written ****** ' Dim i As Long, Base As Workbook, newbook As Workbook, workingdir$ For i = 1 To 450 x = 0 EnumWindows AddressOf EnumWindowsProc, 0 Select Case x Case Is < 16 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Case 16 To 24 Application.Wait (Now + TimeValue("0:02:00")) Case Else MsgBox "le traitement n'a pas pu avoir lieu" End Select Next i End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 14:40
17 août 2012 à 14:40
Je n'ai pas essayé de te faire changer le code qui, comme tu l'as dit précédemment, n'est pas de toi, mais bon...
Eviter au maximum (tout le temps même) les :
- .Select
- Selection
- ActiveMachin
- Activate
etc...
par exemple :
peut être avantageusement remplacé par :
Si vous souhaitez "sélectionner" la première ligne vide de votre feuille, utilisez :
peut être avantageusement remplacé par :
Etc etc... ça aura le mérite d'alléger ton code...
Eviter au maximum (tout le temps même) les :
- .Select
- Selection
- ActiveMachin
- Activate
etc...
par exemple :
Range("J12:Q19").Select Selection.Copy
peut être avantageusement remplacé par :
Range("J12:Q19").Copy
Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select
Si vous souhaitez "sélectionner" la première ligne vide de votre feuille, utilisez :
Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy
peut être avantageusement remplacé par :
Range("B27:I" & Range("E13").Value + 26).Copy
Etc etc... ça aura le mérite d'alléger ton code...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
13 août 2012 à 18:03
13 août 2012 à 18:03
Bonjour,
Pour rester généraliste :
Pour rester généraliste :
If Application.Windows.Count = 7 Then ... End If
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
14 août 2012 à 09:05
14 août 2012 à 09:05
Merci, c'est précisément ce dont j'avais besoin!
Est il possible pour que si une fenetre s'ouvre dans un programme qui n'est pas excel, avec le VBA je demande de répondre automatiquement Oui ou Non?
Est il possible pour que si une fenetre s'ouvre dans un programme qui n'est pas excel, avec le VBA je demande de répondre automatiquement Oui ou Non?
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
14 août 2012 à 23:10
14 août 2012 à 23:10
Re,
Tu peux utiliser l'API Windows, regarde cette fonction :
http://docvb.free.fr/apidetail.php?idapi=79
Tu peux utiliser l'API Windows, regarde cette fonction :
http://docvb.free.fr/apidetail.php?idapi=79
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
16 août 2012 à 11:20
16 août 2012 à 11:20
Re,
Et déjà, Merci beaucoup Patrice! Je sent que je tiens quelque chose qui peut m'aider, malheureusement, je ne comprend absolument pas ce texte je crois que je n'ai pas le vocabulaire nécessaire... je ne comprend quasiment rien de ce site que tu m'as donnée, juste que ça permet d'agir sur les fenetres windows directement...
merci
Cordialement,
Aquhydro
Et déjà, Merci beaucoup Patrice! Je sent que je tiens quelque chose qui peut m'aider, malheureusement, je ne comprend absolument pas ce texte je crois que je n'ai pas le vocabulaire nécessaire... je ne comprend quasiment rien de ce site que tu m'as donnée, juste que ça permet d'agir sur les fenetres windows directement...
merci
Cordialement,
Aquhydro
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 778
16 août 2012 à 13:57
16 août 2012 à 13:57
Quelques notion sur l'API Windows :
http://www.siteduzero.com/tutoriel-3-8778-apprentissage-de-l-api-windows.html
http://www.siteduzero.com/tutoriel-3-8778-apprentissage-de-l-api-windows.html
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 09:29
17 août 2012 à 09:29
Oui, c'est gentil, sauf que je cherche pas ça.
Je cherche à ENUMERER, a COMPTER, le nombre de fenetre, il m'es absolument inutile : 1) D'avoir une msgbox qui me dit quelles sont les fenetres, 2) d'avoir une liste de ces fenetres.
Je veux juste dire à excel que "si il y a 3 fenetre, il faut agir ainsi, si il y en a 5, agir ainsi, et si il y en a 6, agir ainsi."
Donc, j'ai besoin de quelque chose qui compte, qui énumère, et non pas qui liste.
Cordialement,
Aquhydro.
Je cherche à ENUMERER, a COMPTER, le nombre de fenetre, il m'es absolument inutile : 1) D'avoir une msgbox qui me dit quelles sont les fenetres, 2) d'avoir une liste de ces fenetres.
Je veux juste dire à excel que "si il y a 3 fenetre, il faut agir ainsi, si il y en a 5, agir ainsi, et si il y en a 6, agir ainsi."
Donc, j'ai besoin de quelque chose qui compte, qui énumère, et non pas qui liste.
Cordialement,
Aquhydro.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 09:31
17 août 2012 à 09:31
toi tu n'as pas essayé mon code...........................................................................................
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 11:11
17 août 2012 à 11:11
Attention c'est long, je te souhaite que l'erreur soit au début...
Merci encore
Aquhydro
Merci encore
Option Explicit 'sources : https://www.generation-nt.com/reponses/vba-avoir-liste-fenetre-windows-ouvertes-entraide-298662.html Private Declare Function GetWindowTextLength Lib "user32.dll" Alias _ "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function GetWindowText Lib "user32.dll" Alias _ "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String _ , ByVal nMaxCount As Long) As Long Private Declare Function EnumWindows Lib "user32.dll" _ (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function IsWindowVisible Lib "user32" _ (ByVal hwnd As Long) As Long Private x&, y&, z& Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&) Dim SLength&, Buffer As String, RetVal& SLength = GetWindowTextLength(hwnd) + 1 If SLength > 1 Then Buffer = Space(SLength) RetVal = GetWindowText(hwnd, Buffer, SLength) z = z + 1 If CBool(IsWindowVisible(hwnd)) = True Then x = x + 1 If CBool(IsWindowVisible(hwnd)) = False Then y = y + 1 End If EnumWindowsProc = 1 End Function Sub MaMacro() ' ' Runs the executable exectuable.exe, which is the ' Graphic version of the Monprogram program ' Macro written ****** ' ' For i = 1 To 450 x = 0 EnumWindows AddressOf EnumWindowsProc, 0 Select Case x Case 1 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 2 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 3 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 4 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 5 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 6 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 7 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 8 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 9 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 10 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 11 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 12 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 13 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 14 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 15 Application.Run "'Monfichier.xls'!Copiercoller" Set Base = ActiveWorkbook workingdir = Range("h24") ChDir (workingdir) Range("J12:Q19").Select Selection.Copy Set newbook = Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate If Range("e13").Value > 0 Then Range("b27").Select Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Selection.End(xlDown).Offset(1, 0).Select Base.Activate End If Range("B33:I33").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy newbook.Activate Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV Application.DisplayAlerts = True ActiveWorkbook.Close SaveChanges:=False Base.Activate Range("a1").Select Shell ("gcontrol.bat") Application.Wait (Now + TimeValue("0:00:10")) Next i Case 16 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 17 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 18 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 19 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 20 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 21 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 22 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 23 Application.Wait (Now + TimeValue("0:02:00")) Next i Case 24 Application.Wait (Now + TimeValue("0:02:00")) Next i End Select End Sub
Aquhydro
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
17 août 2012 à 11:20
17 août 2012 à 11:20
Et oui!
Tu t'es fait piéger par la première ligne du code que je t'ai donné...
Alors comme ça Monsieur voulait réussir un rapport de stage avec une macro sans déclarer les variables!!!!!
Pas bon ça.
La première ligne : Option Explicit, t'oblige à déclarer toutes les variables utilisées dans ton code. Donc, sous la ligne Sub Mamacro(), ajoute :
Dim i As Long, Base As Workbook, newbook As Workbook, workingdir$
Et voili voilou.
Bon sinon, le reste de ton code c'est de la m*rde en tube... Veux tu continuer à l'améliorer ou on laisse béton???
Tu t'es fait piéger par la première ligne du code que je t'ai donné...
Alors comme ça Monsieur voulait réussir un rapport de stage avec une macro sans déclarer les variables!!!!!
Pas bon ça.
La première ligne : Option Explicit, t'oblige à déclarer toutes les variables utilisées dans ton code. Donc, sous la ligne Sub Mamacro(), ajoute :
Dim i As Long, Base As Workbook, newbook As Workbook, workingdir$
Et voili voilou.
Bon sinon, le reste de ton code c'est de la m*rde en tube... Veux tu continuer à l'améliorer ou on laisse béton???
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 11:39
17 août 2012 à 11:39
Bha alors moi les choses qui, je pense, pourrais aider, serait de, plutot que de déclarer tout les cas 1, 2, 3, ..., 16, identique, de dire cas x>16 et cas x<16
Si c'est possible ok, après pour ce qui est de :
Set Base = ActiveWorkbook
workingdir = Range("h24")
ChDir (workingdir)
Range("J12:Q19").Select
Selection.Copy
Set newbook = Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues
Selection.End(xlDown).Offset(1, 0).Select
Base.Activate
If Range("e13").Value > 0 Then
Range("b27").Select
Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select
Selection.Copy
newbook.Activate
Selection.PasteSpecial Paste:=xlPasteValues
Selection.End(xlDown).Offset(1, 0).Select
Base.Activate
End If
Range("B33:I33").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
newbook.Activate
Selection.PasteSpecial Paste:=xlPasteValues
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=False
Base.Activate
Range("a1").Select
Shell ("gcontrol.bat")
Je craint un peu d'y toucher vu que c'est la structure du logiciel que j'utilise, et que c'est pas de moi...
Si c'est possible ok, après pour ce qui est de :
Set Base = ActiveWorkbook
workingdir = Range("h24")
ChDir (workingdir)
Range("J12:Q19").Select
Selection.Copy
Set newbook = Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues
Selection.End(xlDown).Offset(1, 0).Select
Base.Activate
If Range("e13").Value > 0 Then
Range("b27").Select
Range(ActiveCell, ActiveCell.Offset(Range("e13").Value - 1, 7)).Select
Selection.Copy
newbook.Activate
Selection.PasteSpecial Paste:=xlPasteValues
Selection.End(xlDown).Offset(1, 0).Select
Base.Activate
End If
Range("B33:I33").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
newbook.Activate
Selection.PasteSpecial Paste:=xlPasteValues
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="lefichier.csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
ActiveWorkbook.Close SaveChanges:=False
Base.Activate
Range("a1").Select
Shell ("gcontrol.bat")
Je craint un peu d'y toucher vu que c'est la structure du logiciel que j'utilise, et que c'est pas de moi...
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 11:43
17 août 2012 à 11:43
Surtout qu'a présent que j'ai rajouté cette ligne que tu me conseille il me dit "Next sans for" pour le premier Next i. De plus, si j'ai d'autres macro en dessous, pour que chacun d'eux fonctionne je vais devoir a chaque fois ajouter chacune des fonctions en première ligne?
Aquhydro
Messages postés
172
Date d'inscription
mercredi 8 août 2012
Statut
Membre
Dernière intervention
26 mai 2020
2
17 août 2012 à 14:23
17 août 2012 à 14:23
Merci beaucoup! Vraiment !