Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro éxécutant une autre macro

7 réponses
Avatar
DC
Bonjour à tous,

J'ai 2 macros qui fonctionne trés bien en les éxécutants individuellement,
l'une après l'autre,

Aussi j'aimerais bien pouvoir éxécuter la première et que la deuxième
s'éxécute automatiquement à la suite,

J'ai donc inclus en fin de la première macro : Call test_tva

le nom " test_tva " étant le nom de la deuxième macro

Une fenêtre VB s'ouvre : Erreur d'éxécution '6'
Dépassement de capacité........et au Débogage, la ligne ci-dessous de la
2ème macro, est en surbrillance,

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

Voici la 1ère Macro :
'-----------------------------------
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
DerMois = Range("A1").Value
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x & Chr(10)
& "Entrez le numéro de la feuille de destination", "Sélection", DerMois))
If mois < 1 Or mois > i - 1 Then Exit Sub
Range("A1").Value = mois
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row + 1
Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[HT].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[TTC].Value
Call test_tva
End Sub
'-----------------------

Voici la 2ème Macro

'-----------------------
Sub test_tva()
'
Dim x As Single, Ligne As Long

Ligne = ActiveCell.Row
' Ligne ci-dessous en surbrillance

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

If x >= 19 Then
Range("F" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("G" & Ligne) = ""
ElseIf x <= 6 Then
Range("G" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("F" & Ligne) = ""
Else
Range("G" & Ligne) = ""
Range("F" & Ligne) = ""
MsgBox "TVA de " & x & "% inconnue"
End If

End Sub
'--------------------------------

Salutations!........Merci d'avance............DC

7 réponses

Avatar
Jacky
Re...
Essaie avec
Call test_tva(mois) *Sub Récap()
et
Ligne = Workbooks("Récap.xls").Sheets(mois).Range("h65536").End(3).Row
*Sub test_tva()


Bon courage
JJ

"DC" a écrit dans le message de
news:43429ba3$0$27421$
Bonjour à tous,

J'ai 2 macros qui fonctionne trés bien en les éxécutants individuellement,
l'une après l'autre,

Aussi j'aimerais bien pouvoir éxécuter la première et que la deuxième
s'éxécute automatiquement à la suite,

J'ai donc inclus en fin de la première macro : Call test_tva

le nom " test_tva " étant le nom de la deuxième macro

Une fenêtre VB s'ouvre : Erreur d'éxécution '6'
Dépassement de capacité........et au Débogage, la ligne ci-dessous de la
2ème macro, est en surbrillance,

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

Voici la 1ère Macro :
'-----------------------------------
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
DerMois = Range("A1").Value
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x &
Chr(10)

& "Entrez le numéro de la feuille de destination", "Sélection", DerMois))
If mois < 1 Or mois > i - 1 Then Exit Sub
Range("A1").Value = mois
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row + 1
Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) > Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) > Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) > Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) > Workbooks("facture.xls").Sheets("Feuil3").[HT].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) > Workbooks("facture.xls").Sheets("Feuil3").[TTC].Value
Call test_tva
End Sub
'-----------------------

Voici la 2ème Macro

'-----------------------
Sub test_tva()
'
Dim x As Single, Ligne As Long

Ligne = ActiveCell.Row
' Ligne ci-dessous en surbrillance

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

If x >= 19 Then
Range("F" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("G" & Ligne) = ""
ElseIf x <= 6 Then
Range("G" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("F" & Ligne) = ""
Else
Range("G" & Ligne) = ""
Range("F" & Ligne) = ""
MsgBox "TVA de " & x & "% inconnue"
End If

End Sub
'--------------------------------

Salutations!........Merci d'avance............DC




Avatar
Jacky
RE RE....
A modifier aussi
Sub test_tva(mois)
JJ

"Jacky" a écrit dans le message de
news:%
Re...
Essaie avec
Call test_tva(mois) *Sub Récap()
et
Ligne = Workbooks("Récap.xls").Sheets(mois).Range("h65536").End(3).Row
*Sub test_tva()


Bon courage
JJ

"DC" a écrit dans le message de
news:43429ba3$0$27421$
Bonjour à tous,

J'ai 2 macros qui fonctionne trés bien en les éxécutants
individuellement,


l'une après l'autre,

Aussi j'aimerais bien pouvoir éxécuter la première et que la deuxième
s'éxécute automatiquement à la suite,

J'ai donc inclus en fin de la première macro : Call test_tva

le nom " test_tva " étant le nom de la deuxième macro

Une fenêtre VB s'ouvre : Erreur d'éxécution '6'
Dépassement de capacité........et au Débogage, la ligne ci-dessous de la
2ème macro, est en surbrillance,

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

Voici la 1ère Macro :
'-----------------------------------
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
DerMois = Range("A1").Value
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x &
Chr(10)

& "Entrez le numéro de la feuille de destination", "Sélection",
DerMois))


If mois < 1 Or mois > i - 1 Then Exit Sub
Range("A1").Value = mois
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row +
1


Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) > > Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) > > Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) > > Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) > > Workbooks("facture.xls").Sheets("Feuil3").[HT].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) > > Workbooks("facture.xls").Sheets("Feuil3").[TTC].Value
Call test_tva
End Sub
'-----------------------

Voici la 2ème Macro

'-----------------------
Sub test_tva()
'
Dim x As Single, Ligne As Long

Ligne = ActiveCell.Row
' Ligne ci-dessous en surbrillance

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

If x >= 19 Then
Range("F" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("G" & Ligne) = ""
ElseIf x <= 6 Then
Range("G" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("F" & Ligne) = ""
Else
Range("G" & Ligne) = ""
Range("F" & Ligne) = ""
MsgBox "TVA de " & x & "% inconnue"
End If

End Sub
'--------------------------------

Salutations!........Merci d'avance............DC








Avatar
DC
Bonsoir à tous.................Bonsoir Jacky,

Enfin, çà fonctionne comme je l'espérais, mais j'ai eu du mal à adapter,
j'ai un peu bidouillé à ma façon, mais bon.....ceci parait positif,

Je te joints les codes des 2 macros qui posaient problème, et qui maintenant
fonctionnent, la 1ère éxécutant la 2éme,

Seul petit inconvénient,

L'obligation, manuellement de bien positionner le cuseur dans le fichier
"Récap"

L'idéal serait qu'au lancement de la macro, le curseur aille se placer en
colonne" A " en dernière ligne écrite + 1 et ceci automatiquement, je pense
que pour toi, c'est dans t'es cordes...Merci.!!

'--------------------------
Public mois
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x & Chr(10)
& "Entrez le numéro de la feuille de destination", "Sélection", mois))
If mois < 1 Or mois > i - 1 Then Exit Sub
Windows("Récap.xls").Activate
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row + 1
Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[HT].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) =
Workbooks("facture.xls").Sheets("Feuil3").[TTC].Value
Call test_tva

End Sub
'-----------

Sub test_tva()
'
Dim x As Single, Ligne As Long
Ligne = ActiveCell.Row
x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100
If x >= 19 Then
Range("F" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("G" & Ligne) = ""
ElseIf x <= 6 Then
Range("G" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("F" & Ligne) = ""
Else
Range("G" & Ligne) = ""
Range("F" & Ligne) = ""
MsgBox "TVA de " & x & "% inconnue"
End If
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
'--------------------------------

Salutation!...........Merci d'avance..............DC


"Jacky" a écrit dans le message de news:

RE RE....
A modifier aussi
Sub test_tva(mois)
JJ

"Jacky" a écrit dans le message de
news:%
Re...
Essaie avec
Call test_tva(mois) *Sub Récap()
et
Ligne = Workbooks("Récap.xls").Sheets(mois).Range("h65536").End(3).Row
*Sub test_tva()


Bon courage
JJ

"DC" a écrit dans le message de
news:43429ba3$0$27421$
Bonjour à tous,

J'ai 2 macros qui fonctionne trés bien en les éxécutants
individuellement,


l'une après l'autre,

Aussi j'aimerais bien pouvoir éxécuter la première et que la deuxième
s'éxécute automatiquement à la suite,

J'ai donc inclus en fin de la première macro : Call test_tva

le nom " test_tva " étant le nom de la deuxième macro

Une fenêtre VB s'ouvre : Erreur d'éxécution '6'
Dépassement de capacité........et au Débogage, la ligne ci-dessous de
la
2ème macro, est en surbrillance,

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

Voici la 1ère Macro :
'-----------------------------------
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
DerMois = Range("A1").Value
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x &
Chr(10)

& "Entrez le numéro de la feuille de destination", "Sélection",
DerMois))


If mois < 1 Or mois > i - 1 Then Exit Sub
Range("A1").Value = mois
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row
+
1


Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) >> > Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) >> > Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) >> > Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) >> > Workbooks("facture.xls").Sheets("Feuil3").[HT].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) >> > Workbooks("facture.xls").Sheets("Feuil3").[TTC].Value
Call test_tva
End Sub
'-----------------------

Voici la 2ème Macro

'-----------------------
Sub test_tva()
'
Dim x As Single, Ligne As Long

Ligne = ActiveCell.Row
' Ligne ci-dessous en surbrillance

x = (Range("H" & Ligne) / Range("E" & Ligne) - 1) * 100

If x >= 19 Then
Range("F" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("G" & Ligne) = ""
ElseIf x <= 6 Then
Range("G" & Ligne) = Range("H" & Ligne) - Range("E" & Ligne)
Range("F" & Ligne) = ""
Else
Range("G" & Ligne) = ""
Range("F" & Ligne) = ""
MsgBox "TVA de " & x & "% inconnue"
End If

End Sub
'--------------------------------

Salutations!........Merci d'avance............DC












Avatar
Jacky
RE..
L'idéal serait qu'au lancement de la macro, le curseur aille se placer en
colonne" A " en dernière ligne écrite + 1 et ceci automatiquement,
Bien que je ne saisisse pas tout a fait l'utilité de deux macro, mais bon...

Et à condition que 'Public mois' est bien en place.

Sub Récap()

Workbooks("Récap.xls").Activate
ligne = Sheets(mois).Range("A65536").End(3).Row + 1
--------
----
end sub

Pas tester
Salutations
JJ

Avatar
DC
Bonsoir à tous....................Bonsoir Jacky,

A l'éxécution, fenêtre VB.....Erreur d'éxécution :
L'indice n'appartient pas a la sélection,

et au débogage, la ligne ci-dessous est en surbrillance

ligne = Sheets(mois).Range("A65536").End(3).Row + 1

Ceci étant dit, je suis d'accord avec toi pour une seule macro,

Mais çà vient du fait que je pensais les choses, les unes après les autres
et le résultat c'est 2 macros,

A toi de voir le plus optimal.........Merci d'avance..!!

Salutations!.........encore Merci..!!...........DC

"Jacky" a écrit dans le message de news:
%
RE..
L'idéal serait qu'au lancement de la macro, le curseur aille se placer en
colonne" A " en dernière ligne écrite + 1 et ceci automatiquement,
Bien que je ne saisisse pas tout a fait l'utilité de deux macro, mais

bon...
Et à condition que 'Public mois' est bien en place.

Sub Récap()

Workbooks("Récap.xls").Activate
ligne = Sheets(mois).Range("A65536").End(3).Row + 1
--------
----
end sub

Pas tester
Salutations
JJ





Avatar
anonymousA
Bonjour,

à mon humble avis, mois ne doit pas être défini à une valeur telle que
sheets(mois) veuille dire quelque chose.

A+


Bonsoir à tous....................Bonsoir Jacky,

A l'éxécution, fenêtre VB.....Erreur d'éxécution :
L'indice n'appartient pas a la sélection,

et au débogage, la ligne ci-dessous est en surbrillance

ligne = Sheets(mois).Range("A65536").End(3).Row + 1

Ceci étant dit, je suis d'accord avec toi pour une seule macro,

Mais çà vient du fait que je pensais les choses, les unes après les autres
et le résultat c'est 2 macros,

A toi de voir le plus optimal.........Merci d'avance..!!

Salutations!.........encore Merci..!!...........DC

"Jacky" a écrit dans le message de news:
%

RE..

L'idéal serait qu'au lancement de la macro, le curseur aille se placer en
colonne" A " en dernière ligne écrite + 1 et ceci automatiquement,


Bien que je ne saisisse pas tout a fait l'utilité de deux macro, mais
bon...
Et à condition que 'Public mois' est bien en place.

Sub Récap()

Workbooks("Récap.xls").Activate
ligne = Sheets(mois).Range("A65536").End(3).Row + 1
--------
----
end sub

Pas tester
Salutations
JJ










Avatar
Jacky
Re....
Dernière version...en 1 macro

'---------
Public mois
_____________________
Sub Récap()
'
For i = 1 To Workbooks("Récap.xls").Sheets.Count
x = x & i & "...." & Workbooks("Récap.xls").Sheets(i).Name & Chr(10)
Next
mois = Val(InputBox("Feuilles disponibles" & Chr(10) & Chr(10) & x & Chr(10)
& "Entrez le numéro de la feuille de destination", "Sélection", mois))
If mois < 1 Or mois > i - 1 Then Exit Sub
derlg = Workbooks("Récap.xls").Sheets(mois).Range("A65536").End(3).Row + 1
Workbooks("Récap.xls").Sheets(mois).Range("a" & derlg) = _
Workbooks("facture.xls").Sheets("Feuil3").[Numéro].Value
Workbooks("Récap.xls").Sheets(mois).Range("c" & derlg) = _
Workbooks("facture.xls").Sheets("Feuil3").[Sit.].Value
Workbooks("Récap.xls").Sheets(mois).Range("d" & derlg) = _
Workbooks("facture.xls").Sheets("Feuil3").[Nom].Value
Workbooks("Récap.xls").Sheets(mois).Range("E" & derlg) = _
Workbooks("facture.xls").Sheets("Feuil3").[ht].Value
Workbooks("Récap.xls").Sheets(mois).Range("h" & derlg) = _
Workbooks("facture.xls").Sheets("Feuil3").[ttc].Value
'*************
Application.ScreenUpdating = False
Windows("Récap.xls").Activate
Sheets(mois).Activate
y = Int((Range("H" & derlg) / Range("E" & derlg) - 1) * 100)
If y = 19 Then
Range("F" & derlg) = Range("H" & derlg) - Range("E" & derlg)
Range("G" & derlg) = ""
ElseIf y = 5 Then
Range("G" & derlg) = Range("H" & derlg) - Range("E" & derlg)
Range("F" & derlg) = ""
Else
Range("G" & derlg) = ""
Range("F" & derlg) = ""
MsgBox "TVA de " & y & "% inconnue"
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Windows("facture.xls").Activate
Application.ScreenUpdating = True
End Sub
'----------
Salutations
JJ