Intégrer une macro dans une macro

Bonjour,

Je veux intégrer dans ma macro une autre macro

J'ai essayé 2 solutions :

- Call suivi du nom de la macro à la fin de ma macro

- application.run suivi du nom de la macro

Mais rien de fonction

Ah oui j'ai oublié de vous dire que la macro que veux exécuter dans la macro fonctionne sur un onglet différent.

Merci de votre aide

Bonjour as tu essayé

Call Feuil1.Mamacro ou bien sur Feuil1 est à remplacer par le nom de la feuille sur laquelle tu veux executer ta macro

Merci et je mets bien Call à la fin de ma macro ?

re

genre comme ça

Sub MaMacroPrincipale()
    ' Code de ta macro principale

    ' Appeler mamacrodans l'onglet Feuil1
    Call Feuil1.Mamacro
' Suite du code de la macro principale si il y en a un
End Sub

Bonsoir,

Petite précision : Une macro, appelée depuis un autre module, doit être déclarée "Public" dans le module où elle placée. Sinon une erreur est générée.

Par module on entend : Les modules de codes (standards ou de classes), appartenant à chaque Userform, à chaque Feuilles de calcul (et non onglets), etc.

Bonne soirée

Merci pour toutes ces infos

Je vais essayer cela lundi

Bon week-end

Bonjour,

Du coup je n'arrive pas à faire fonctionner la macro

Je ne sais pas comment rendre la macro inclu en "public"

Voici ma macro

Sub supprime()

Dim I As Intégrer

For I = 65 To 1 Step -1

If Ont Celles(I,1).Resize(1,9).Find("total")Is Nothing Then Rows(I).Delete

Next I

End Sub

Merci de votre aide

Bettina

edit : veillez à utiliser les balises de code en utilisant l'icone </>

Bonsoir

Tout simplement en précisant "Public" devant le Sub

Public Sub supprime() ' Public car utilisée par ...

Bonne soirée

bonjour le fil, on a la macro "MaMacroPrincipale"

14bettina.xlsm (22.23 Ko)

Bonjour,

En effet la méthode de BsAlv est la bonne solution. Dans mon post j'ai fait une confusion.

La procédure doit être déclarée Public s'il s'agit d'une procédure définie par défaut à Private.

Comme c'est le cas pour les procédures évènementielles des formulaires : exemple Private Sub CommandButton1_Click()

On peut avoir besoin d'exécuter la macro sans passer par le formulaire.

Personnellement je déclare toutes les procédures, placées dans un module de formulaire ou de feuille de calcul, comme Private (par sécurité) et je les passe à Public si j'ai besoin d'y faire appel dans un autre module (en ajoutant un commentaire). Le terme Public (pour les procédures non évènementielles) est inutile, mais sa présence permet de les cibler plus facilement.

D'où ma confusion

Bonne journée

Eric

Bonjour la macro fonctionne merci

J'ai une autre demande, pouvez m'expliquer ma macro pas à pas car j'aimerais changer quelque truc comme de plus supprimer par rapport au nom total mais par rapport à un résultat 0

Merci

Bonjour à tous,

     Dim I     As Integer
     With Sheets("blad1")
          For I = 65 To 1 Step -1
               If .Cells(I, 1).Resize(1, 9).Find("total") Is Nothing Then .Rows(I).Delete
          Next I
     End With

For I = 65 To 1 Step -1 Ici on décompte de 65 jusqu’à 1 par pas de 1

.Cells(I, 1).Resize(1, 9) On redimensionne la zone de recherche de la colonne 1 jusqu'à la colonne 9 de la même ligne I

.Cells(I, 1).Resize(1, 9).Find("total") Ici on recherche "total" dans la zone de recherche colonne 1 à 9 de la ligne I (Renvoie un objet Range si trouvé sinon Nothing)

If .Cells(I, 1).Resize(1, 9).Find("total") Is Nothing Then .Rows(I).Delete si on ne trouve pas total dans la zone de recherche alors on supprime la ligne

Next I On passe à la ligne suivante

NB: Quand on supprime des lignes sur une feuille il faut toujours partir de la dernière ligne jusqu'à la première sinon cela fausse l'incrémentation du compteur ici I.

Tu devrait utiliser des tableaux structurés cela te faciliterais le travail et la compréhension.

Bonjour,

Désolée mais ça y est j'ai compris pourquoi ma macro ne fonctionne pas car le mot total viens d'un résultat d'une formule.

Donc comment dois je faire ?

Salut le fil,

Désolée mais ça y est j'ai compris pourquoi ma macro ne fonctionne pas car le mot total viens d'un résultat d'une formule.

Donc comment dois je faire ?

Comment tu dois faire quoi ? je serais tenter de dire.

Je parle de ma macro

Sub supprime()

Dim I As Intégrer

For I = 65 To 1 Step -1

If not Cells(I,1).Resize(1,9).Find("total")Is Nothing Then Rows(I).Delete

Next I

End Sub

Cette macro supprime les lignes qui contiennent "total" mais dans mon tableau cela ne fonctionne pas car le texte "total" est obtenue par une formule donc je suis coincée.

Pouvez vous m'aider

Bonne journée

Re,

Edit: je supprime car réponse trop rapide et fausse.

Bonne programmation.

re,

@Jean_Paul, je crains que vos conseils sont trompeurs concernant ce "Resize(I,9)", cela veut dire si I=65 qu'on vérifie la plage A65:I129 pour le mot "Total"

Ce n'est pas une réponse à la question, mais pour vite supprimer (jusqu'à 32.000 lignes en une fois), on peut utiliser ceci.

Sub Bettina()
     'fonctionne jusqu'à 32K lignes, autrement en plusieurs fois **********************************
     With ActiveSheet
          If .AutoFilterMode Then .AutoFilterMode = False     'désactiver les filtres
          If .FilterMode Then .ShowAllData

          With .Range("A1:I65")              'la plage à tester
               With .Cells(1, "AA").Resize(.Rows.Count, 1)    'dans une cellule hors vos données et calculations, sans danger de les endommager, vos 65 lignes
                    MsgBox .Address & " sera une plage auxiliaire pour détecter les lignes à supprimer"
                    .FormulaR1C1 = "=--(COUNTIF(RC1:RC9,""*total*"")>0)"     'formule pour détecter les lignes avec un "total"
                    .Value = .Value          'replacer la formule par le résultat
                    .AutoFilter 1, 1         'filtrer les lignes avec un "1" (donc qui contiennent "total")
                    If .SpecialCells(xlVisible).Count > 1 Then .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete     'supprimer toutes les lignes sauf la première qui contiennent "total" = les lignes visibles
                    .AutoFilter              'désactiver filtre
                    If .Cells(1).Value = 1 Then .Rows(1).Resize(.Rows.Count - 1).EntireRow.Delete     'si ligne 1 contient "total", supprimez la aussi
                    .ClearContents           'videz cette plage
               End With
          End With
     End With
End Sub

Re,

Oupss... autant pour moi trop rapide à répondre désolé.

Toujours dans la panade

Du coup j'ai décidé de faire autrement dans mon tableau toutes les quantités=0 seront =""

J'ai voulu supprimer les lignes qui contenaient rien en allant dans rechercher et sélectionner/sélectionner les cellules/cellules vides mais cela ne fonctionne pas.

Aidez moi !!!!

Re,

Cette macro supprime les lignes qui contiennent "total" mais dans mon tableau

Parle-tu ici d'un tableau structuré ? Si c'est le cas alors la démarche est différente.

If not Cells(I,1).Resize(1,9).Find("total")Is Nothing Then Rows(I).Delete

Ici tu n'as aucune référence de feuille, donc Cells fais référence à la feuille active lors de l'exécution de la macro, vérifie ce point.

Rechercher des sujets similaires à "integrer macro"