Autres Tableau vide

Calvus

XLDnaute Barbatruc
Bonjour le forum,

Pouvez vous me dire pourquoi ce code fonctionne dans un module, mais pas dans le code de ma feuille ?

VB:
Option Explicit

Private Sub CommandButton1_Click()
Dim t, i As Long
'Nouveau code le 5.08.19
            If Range("C83") = "" Then
            t = Range("B2:J63")
            ElseIf Range("C146") = "" Then
            t = Range("B2:J126")
            ElseIf Range("C209") = "" Then
            t = Range("B2:J189")
            ElseIf Range("C272") = "" Then
            t = Range("B2:J252")
            ElseIf Range("C334") = "" Then
            t = Range("B2:J315")
            ElseIf Range("C334") <> "" Then
            t = Range("B2:J378")
            End If
            
                    Dim LePath As String, LePath2 As String, LeNom As String, fichier As String, Dossier As String, Chemin As String
                        'On Error GoTo fin
                        'Enregistrement de la feuille
                        LePath = "C:\Users\XXX"
                            LePath2 = "C:\Users\XXX\"
            
            Workbooks.Add
            Application.DisplayAlerts = False
            For i = Sheets.Count To 2 Step -1
            Sheets(i).Delete
            Next i
            Application.DisplayAlerts = True
            
            Range("B2").Resize(UBound(t), 9) = t
            ActiveWindow.Zoom = 80


            If ThisWorkbook.ActiveSheet.[P9] = "" Then 'Si P9 = ""(1 seule facture)
                LeNom = [B12] & " Facture du " & Format([H5], "ddmmyyyy") & ".xlsx"
                    ActiveWorkbook.SaveAs LePath & LeNom
                        ActiveWorkbook.SaveAs LePath2 & LeNom
                ActiveWorkbook.Close
            Else 'Sinon numérotation avec 2 factures le même jour
                LeNom = [B12] & " Facture du " & Format([H5], "ddmmyyyy") & " " & [Q9] & ".xlsx"
                    ActiveWorkbook.SaveAs LePath & LeNom
                        ActiveWorkbook.SaveAs LePath2 & LeNom
                ActiveWorkbook.Close
            End If
            End Sub

Dans le code de la feuille le tableau est vide...
J'ai essayé plusieurs classeurs, plusieurs feuilles, et le résultat est le même.. sauf une fois bizarrement..

Merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Si la plage testée n'est pas sur la même feuille que la plage voulue, c'est peut-être normal.
Range(address) sans plus de précision se rapporte toujours à la feuille active ou la feuille du module de code qui contient la ligne de code.

Sinon, livrez nous un fichier exemple (ce que vous auriez du faire déjà) il y a tellement de circonstance qu'on ne peut deviner.

A+
 

Calvus

XLDnaute Barbatruc
Re,

C'est quoi votre problème @Roblochon ??

En effet je suis inscrit depuis 2008 et pas une fois je n'ai fait preuve d'impolitesse !

Alors le non n'était pas : "je ne fournis pas un fichier", mais : "non ce n'est pas la raison" !!
C'était dans le cours de la discussion, que je pensais poursuivre.

Alors si vous vous sentez vexé pour rien et ne me saluez pas, et bien soyez vexé et ne me saluez pas !
 

Calvus

XLDnaute Barbatruc
Re,

Mais vous êtes incroyable vous !

Alors voici le fichier, où les 2 codes sont strictement identiques, les appels se faisant sur la même page.
Le résultat est le même. Avec la déclaration de feuille ou pas. J'ai mis les 3 codes possibles (avec plage nommée).

Regardez le fichier si vous voulez, mais ne vous sentez nullement obligé.
C'est simplement pour vous montrer que ma demande initiale était très simple.

A+
 

Pièces jointes

  • Pour contenter roblochon.xlsm
    30 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Re,



Et bien ça va mieux. Déjà votre tableau t n'est pas vide. Si votre macro ne fonctionnait pas c'est que dans une module de code la feuille par défaut de l'objet range par défaut est la feuille dans laquelle est le code alors que dans un module c'est la feuille active.

Il faut donc explicitement indiquer sur quelle feuille vous vouliez coller vos données, ce qui était le sens de ma première réponse.

De plus nous ne pouvions constater avant d'avoir votre fichier que votre tableau en mémoire n'était pas vide, donc que le problème ne venait pas de là.

Ecrit comme ça, ça marche:
VB:
    Dim t, i As Long

    If Range("C83") = "" Then
        t = Range("B2:J63")
    ElseIf Range("C146") = "" Then
        t = Range("B2:J126")
    ElseIf Range("C209") = "" Then
        t = Range("B2:J189")
    ElseIf Range("C272") = "" Then
        t = Range("B2:J252")
    ElseIf Range("C334") = "" Then
        t = Range("B2:J315")
    ElseIf Range("C334") <> "" Then
        t = Range("B2:J378")
    End If


    With Workbooks.Add()
        Application.DisplayAlerts = False
        For i = .Sheets.Count To 2 Step -1
            .Sheets(i).Delete
        Next i
        Application.DisplayAlerts = True

        .Sheets(1).Range("B2").Resize(UBound(t), 9) = t
        ActiveWindow.Zoom = 80
    End With


End Sub
 

Pièces jointes

  • Pour contenter roblochon.xlsm
    27.3 KB · Affichages: 3
Dernière édition:

Statistiques des forums

Discussions
312 184
Messages
2 086 008
Membres
103 089
dernier inscrit
johnjohn1969