Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Un "call" de macro ne fonctionne pas

R1-

XLDnaute Junior
VB:
Sub MEF()
Dim f As Variant

f = Array("FRANCE", "CORDON", "PORTUGAL", _
                              "BELGIQUE", "ESPAGNE", "SUISSE", _
                              "ITALIE", "HS_CORDON")
Application.ScreenUpdating = False

    For Each Feuille In f
        With Worksheets(Feuille)
            If .[C1] <> vbNullString Then .[A:A,C:H,J:P].Delete shift:=xlToLeft
        End With
    Next
 
If Sheets("portefeuille").[C1] <> vbNullString Then Sheets("portefeuille").Range("A:G,J:L").Delete shift:=xlToLeft
 
Call CONSO

End Sub

Sub CONSO()

Dim fichier As String

fichier = ActiveWorkbook.Path & "\[" & ActiveWorkbook.Name & "]"

Dim slct As String

slct = "R1C1:R1000C2"

Sheets("CPA").Range("A1").Consolidate Sources:=Array("'" & fichier & "FRANCE'!" & slct, _
                                "'" & fichier & "CORDON'!" & slct, _
                                "'" & fichier & "PORTUGAL'!" & slct, _
                                "'" & fichier & "ESPAGNE'!" & slct, _
                                "'" & fichier & "BELGIQUE'!" & slct, _
                                "'" & fichier & "SUISSE'!" & slct, _
                                "'" & fichier & "ITALIE'!" & slct, _
                                "'" & fichier & "HS_CORDON'!" & slct), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False
                                
Sheets("PPA").Range("A1").Consolidate Sources:=Array("'" & fichier & "Portefeuille'!" & slct), Function:=xlSum, TopRow:=True, LeftColumn:=True, CreateLinks:=False

Call portefeuille

MsgBox "done"

End Sub

Sub portefeuille()

Dim L As Integer, Plage As Range

    L = 2
    Set Plage = Sheets("PPA").Range("A2:B" & Range("A65500").End(xlUp).Row) 'définir la plage de A2 a B de la dernière ligne
    
    With Sheets("CPA")
        While Sheets("CPA").Cells(L, "A") <> "" 'tant que A n'est pas vide
            On Error Resume Next
            Sheets("CPA").Cells(L, "C") = Sheets("CPA").Cells(L, "B") - Application.VLookup(Sheets("CPA").Cells(L, "A"), Plage, 2, 0)
            L = L + 1
        Wend
    End With
    
End Sub

Bonjour, ci dessus vous trouverez un code qui me pose un problème sur lequel je m'arrache les cheveux. En effet, la macro "portefeuille" qui est call par la macro "CONSO" ne marche pas lorsque'elle est call mais marche très bien lorsqu'elle est exécuté seule.

Avez vous une idée quant a l'origine du problème.
merci par avance pour vos réponses.
 

cp4

XLDnaute Barbatruc
Bonjour,

Exécute en mode pas à pas (touche F), tu comprendras le pourquoi du call non fonctionnel.
Sans ton fichier, pas possible de te proposer quoi que ce soit.
 

R1-

XLDnaute Junior
Bonjour R1,
Il y a de fortes chances que votre call ne s'exécute pas car le VBA a trouvé une erreur avant ce call, donc il sort.
Avez vous essayé de faire du pas à pas ?
Ou fournissez un petit fichier test.
Non il n'y a pas d'erreur avant et les macro sont relativement indépendantes. Je m'occupe de vous envoyer le fichier.
 

R1-

XLDnaute Junior
Bon, je pense avoir trouver le problème, sur ma page menu j'ai masqué quasiment tout les cellules, ne laissant de la place que pour la petite interface (seul la plage de A1 à H20 est visible), lorsque je suis sur cette page et que je lance le code, Excel refuse de taper dans des cellules masquées. Et a mon avis le logiciel ne fait pas la différence entre les feuilles lorsqu'il s'agit de cellules masquées, il se contente de prendre seulement en compte la feuille active et d'extrapoler le masquage de cellules à toutes les autres feuilles.
 

R1-

XLDnaute Junior
Après plus de simulations, je suis à présent convaincu de la corrélation entre le masquage et le refus du logiciel d'exécuter la macro. C'est a mon avis lié au "while", il s'arrête de fonctionner lorsque la ligne (variable L) dépasse 20, ce qui correspond exactement à la ligne à partir de laquelle toutes les autres cellules de la page 1 sont masquées. Ce qui explique pourquoi le pas à pas marche même si la page 1 est sélectionnée, la page Excel n'étant pas active (étant sur l'éditeur de macro), la feuille 1 ne l'ai pas non plus.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour R1,
Vraiment désolé, mais une simulation du fichier en post #5 sur mon PC ne donne aucun souci.
Dans le GIF ci dessous on est sur la feuille Menu et on lance MEF avec arrêt sur la dernière ligne de Portefeuille. Et on voit qu'à la fin Ligne=339, ce qui est bien la première ligne vide de CPA colonne A.
Donc si on ne peut reproduire le souci, cela va être difficile de vous aider.
Est ce que le fichier du post #5 est bien représentatif de votre fichier de travail ?

 

R1-

XLDnaute Junior
Merci pour votre aide, j'ai trouvé la solution en activant simplement une page sans cellules masqué avant de réactiver le menu, le problème est maintenant résolu.
VB:
Worksheets("CPA").Activate

Call portefeuille

Worksheets("Menu").Activate
C'est un problème propre à l'ordinateur sur lequel je travail que je n'explique toujours pas. Enfin bon parfois Excel a ses raisons que la raison ignore.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…