XL 2019 Memoire declarée PUBLIC non reconnue dès la fin de la procédure qui la gère

chris4785478547

XLDnaute Junior
Bonjour le fil,
Je croyais savoir que pour qu'une variable soit globale, c'est à dire reconnue par tous les modules, il fallait qu'elle soit déclarée PUBLIC avant la 1ere déclaration de procédure.
C'est ce que j'ai fait, pourtant dès que je sors de ma procédure, le mode debug affiche en face de la variable: "hors contexte" .
Savez vous pourquoi ?
Merci par avance
 

chris4785478547

XLDnaute Junior
Bonjour Chris,

Oui, j'en suis persuadé mais je vais revérifier...
C'est fait, j'ai vérifié à nouveau et je confirme: je n'ai qu'une seule zone où je déclare des variables, en tout début de module et elles sont toutes en PUBLIC
Je te joins à tout hasard mes macros des fois que tu voies quelque chose...
VB:
Public DateEnCours, DateDebut, DateFin, DateDebutBanque, DateFinBanque, Sélection_dates, DateLueSource  As String
Public erreur As Boolean
Public a, b As Range
Public LigneECSource, LigneECCible As Long
Public NbreDeLignesAEffacer, NbreDeLignesDansLaVersion, DerniereLigneOccuppee, rep, LigneDebutSource, LigneDebutCible, NbreDeLignesAInserer, L As Long



Sub ValidationDates()


  
    rep = MsgBox("Votre banque vous propose l'importation de vos opérations entre le" & DateDebut & " et le " & DateFin & " Ces dates vous conviennent-elles ?", vbYesNo, Sélection_dates)

    If rep = vbNo Then
        erreur = True
        While erreur
        erreur = False
            
            'Sheets("Feuil8").Activate
            
             DateDebut = InputBox("Choisissez votre date de DEBUT importation au format jj/mm/aa entre le " & DateDebutBanque & " et le " & DateFinBanque)
           ' Range("C1") = "Choisissez votre date de DEBUT importation entre le " & DateDebutBanque & " et le " & DateFinBanque
           ' DateDebut = Range("B2")
            If Int(CDate(DateDebut)) < Int(CDate(DateDebutBanque)) Or Int(CDate(DateDebut)) > Int(CDate(DateFinBanque)) Then
                erreur = True
            End If
        Wend
        
        erreur = True
        While erreur
            erreur = False
           ' Sheets("Feuil9").Activate
            
            DateFin = InputBox("Choisissez votre date de FIN importation au format jj/mm/aa entre le " & DateDebut & " et le " & DateFinBanque)
         '   Range("C1") = "Choisissez votre date de FIN importation entre le " & DateDebut & " et le " & DateFinBanque
          '  DateFin = Range("B2")
            If Int(CDate(DateFin)) < Int(CDate(DateDebutBanque)) Or Int(CDate(DateFin)) > Int(CDate(DateFinBanque)) Or Int(CDate(DateFin)) < Int(CDate(DateDebut)) Then
                erreur = True
            End If
        Wend
    End If
        
  
    If rep = vbYes Then
    
    Exit Sub
   ' en développement
    End If
  
End Sub





Sub ComptageNbreDeLignesAInserer()

    
    Workbooks.Open Filename:="C:\Users\Utilisateur\Desktop\Banque.xlsx"
 
    Dim DateLueSource As Date, LigneEnCours%, NbreDeLignesAInserer%
  
    For LigneEnCours = 3 To 100
       DateLueSource = Range("A" & LigneEnCours).Value
        
       If DateLueSource >= DateDebut And DateLueSource <= DateFin Then
           NbreDeLignesAInserer = NbreDeLignesAInserer + 1
        End If
    Next LigneEnCours
 

End Sub



'Sub Test_ComptageLignes()
 '   ComptageLignes #12/12/2020#
'End Sub



'Private Sub ComptageLignes(vDate As Date)

 '   Workbooks.Open Filename:="C:\Users\Utilisateur\Desktop\Banque.xlsx"
    
  '  MsgBox Application.CountIf(Range("A:A"), vDate)

'End Sub


Sub EffacerLignes()

NbreLignesEffacees = 0
While NbreLignesEffacees <> NbreLignesAEffacer
    Call SupprimerUneLigne
    NbreLignesEffacees = NbreLignesEffacees + 1
Wend

End Sub

Sub SupprimerUneLigne()
    Range("I6") = Range("I6") - Range("B7") + Range("C7")
    Range("A7:H7").ClearContents
    Call classer_lignes
End Sub




Sub Prélevement_auto()
 


    Call classer_lignes
    Sheets("SAISIE_COMPTES").Select
    DerniereLigneOccupee = Range("O1007")
    NombreDeLignesAEffacer = Range("P2") - (Range("Q2") - DerniereLigneOccupee)
    If (NombreDeLignesAEffacer > 0) Then
        For i = 7 To 7 + NombreDeLignesAEffacer - 1
        SupprimerUneLigne
        Next i
    End If
    
    
    Sheets("PRELEVEMENTS AUTO").Select
    Range("A1:E" & Range("F25")).Copy
  
    Sheets("SAISIE_COMPTES").Select
    Range("A7").End(xlDown).Offset(1, 0).Select
    
    Set Dest = Selection
    
    Dest.PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False
    
End Sub

Sub classer_lignes()

    
Worksheets("SAISIE_COMPTES").Range("A7:H" & Range("Q3")).Sort Key1:=Range("A7"), Order1:=xlAscending, dataoption1:=xlSortNormal, Header:=xlNo


End Sub




Sub ComptageNbreDeLignesAEffacer()

NbreDeLignesDansLaVersion = Workbooks("essai.xlsm").Worksheets("SAISIE_COMPTES").Range("Q2").Value
DerniereLigneOccuppee = Workbooks("essai.xlsm").Worksheets("SAISIE_COMPTES").Range("O1007").Value
NbreDeLignesAEffacer = NbreDeLignesAInserer - (NbreDeLignesDansLaVersion - DerniereLigneOccuppee)

End Sub

Sub ImporterCompteBancaire()

    Workbooks.Open Filename:="C:\Users\Utilisateur\Desktop\Banque.xlsx"
     'ActiveWorkbook.SaveAs Filename:="C:\Users\Utilisateur\Desktop\Banque.xlsx"
    
    
    DateDebutBanque = Workbooks("Banque.xlsx").Worksheets("Banque").Range("B1").Value
    DateFinBanque = Workbooks("Banque.xlsx").Worksheets("Banque").Range("C1").Value
    SélectionDates = "Sélection_dates"
    
    DateDebut = DateDebutBanque
    DateFin = DateFinBanque
  
  
    
    
    Call ValidationDates
    Call ComptageNbreDeLignesAInserer
    Call ComptageNbreDeLignesAEffacer
    Call EffacerLignes
    
    LigneECCible = Workbooks("essai.xlsm").Sheets("SAISIE_COMPTES").Range("O1007").Value + 1
    LigneECSource = 3
    Call ImporterLignes
    
    'Workbooks.Close Filename:="C:\Users\Utilisateur\Desktop\Banque.csv"
    'Workbooks.Close Filename:="C:\Users\Utilisateur\Desktop\Banque.xlsx"
  
End Sub


Sub ImporterLignes()

DateLue = Workbooks("Banque.xlsx").Sheets("Banque").Range("A" & LigneECSource).Value
While (Int(CDate(DateFin)) >= Int(CDate(DateLue)) >= Int(CDate(DateDebut)))
  
    Range("A" & LigneECCible) = Range("A" & LigneECSource) 'Importation date
    
    Range("F" & LigneECCible) = Range("B" & LigneECSource) 'Importation libellés
    
    If Workbooks("Banque.xlsx").Worksheets("Banque").Range("C" & LigneECSource).Value >= 0 Then
        Workbooks("essai.xlsm").Worksheets("Banque").Range("C" & LigneECCible).Value = Workbooks("Banque.xlsx").Worksheets("Banque").Range("C" & LigneECSource).Value
    Else
        Workbooks("essai.xlsm").Worksheets("Banque").Range("B" & LigneECCible).Value = -Workbooks("Banque.xlsx").Worksheets("Banque").Range("C" & LigneECSource).Value
    End If
    
    LigneECSource = LigneECSource + 1
    LigneECCible = LigneECCible + 1
    DateLue = Workbooks("Banque.xlsx").Worksheets("Banque").Range("A" & LigneECSource).Value
Wend
  
End Sub
 
Dernière édition:

tbft

XLDnaute Accro
Bonjour.

Serait-il possible d'avoir un screen shot de la fenetre debug, s'il vous plait?
C'est peut être du au fait que la fenêtre debug affiche la variable pour une fonction (ou sub) spécifique alors que vous êtes en train d'en debugger une autre???
 

chris

XLDnaute Barbatruc
RE

Attention à tes déclarations : seule la dernière variable de chaque ligne est typée

Le debug affiche bien hors contexte : essaye de repositionner l'espion sur la proc en cours ou sur toutes
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

=>chris (le demandeur)
C'est bien de poser tout plein de question ;)
C'est mieux de faire un petit feedback dans la précédente avant de créér la nouvelle ;)
J'attends tes commentaires sur mes derniers bout de code.
Et apparemment, tu préféres conserver la boucle ...
 

Statistiques des forums

Discussions
312 250
Messages
2 086 614
Membres
103 263
dernier inscrit
zarroug