Code imcomplet

Résolu
Bonjour !

C'est encore moi, j'ai encore un petit soucis de collage de cellules vides que je voudrai éviter.
Je vous joins mon code, il n'est pas très pro ,mais il fonctionne.
Seul hic, la remonter dans mes onglets "saisie" et "mouvement caisse" de cellules vides que je ne veux pas.
Un grand merci pour votre collaboration.

Sub encaissé1()

Sheets("mouvement caisse").Visible = True
   Sheets("mouvement caisse").Select
    ActiveSheet.Unprotect
    
 Sheets("saisie").Visible = True
   Sheets("saisie").Select
    ActiveSheet.Unprotect
    
    Dim plage_à_copier, première_cellule_vide, plage_collée As Range
    
 With Sheets("caisse")
        Set plage_à_copier = Range(.[AA2], .[AH:AH].Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious))
        End With
        
plage_à_copier.Copy
        
 With Sheets("mouvement caisse")
         
Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        End With
        première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False
       
        plage_à_copier.Copy
        

        With Sheets("SAISIE")
            Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        End With
        première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False
        
        

    Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)

    Sheets("mouvement caisse").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A1").Select
   Sheets("mouvement caisse").Visible = False

    Sheets("saisie").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Range("A1").Select
    Sheets("saisie").Visible = False

    
    
    Sheets("caisse").Select
    Range("AB2:AB36,AD2:AD36,AF2:AF36,AI2:AI36").Select
    Range("AD2").Activate
    Selection.ClearContents
    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A1").Select

 Sheets("saisie").Visible = True
    Sheets("saisie").Select
    
     Range("A1:h6000").Select
    Selection.Copy
    Range("L1").Select


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

13 réponses

  1. Bonjour,

    Tout d'abord une remarque. Il manque la fin du code ou alors c'est un extrait et ces lignes me paraissent superflues

    ActiveWindow.ScrollColumn = 20
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
     

    Ton problème est-il relatif à des cellules vides à l'intérieur d'une ligne ou à des lignes entièrement vides ?
    0
    1. Bonsoir thev !

      Avant tout merci de prendre en compte mon problème.

      Mes lignes à copier vont de AB à AH. Dans les colonnes AE,AG,AH j’ai des formules qui prennent en compte les valeurs des colonnes adjacentes. Même vides ces lignes de AB à AH sont copiées et collées sans les formules. Je le remarque lorsque je fais des tris sur mes onglets de destination.
      0
      1. Bonsoir,

        ce code modifié vous évitera de copier les lignes vides de la plage utilisée des colonnes AB à AH


        Sub encaissé1()

        Sheets("mouvement caisse").Visible = True
        Sheets("mouvement caisse").Select
        ActiveSheet.Unprotect

        Sheets("saisie").Visible = True
        Sheets("saisie").Select
        ActiveSheet.Unprotect

        Dim plage_à_copier As Range, première_cellule_vide As Range, plage_collée As Range

        Set xl = Excel.Application 'application Excel
        For Each ligne In Sheets("caisse").UsedRange.Columns("AB:AH").Rows 'plage des lignes utilisées dans les colonnes AB à AH
        If Join(xl.Transpose(xl.Transpose(ligne.Value)), "") <> Empty _
        And ligne.Row <> 1 Then 'si la ligne n'est pas vide et n'est pas la première
        'stockage des lignes à copier
        If plage_à_copier Is Nothing Then Set plage_à_copier = ligne _
        Else Set plage_à_copier = Union(plage_à_copier, ligne)
        Next ligne

        plage_à_copier.Copy
        With Sheets("mouvement caisse")
        Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
        End With
        première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

        plage_à_copier.Copy
        With Sheets("SAISIE")
        Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
        End With
        première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False
        Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)

        Sheets("mouvement caisse").Select
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        Range("A1").Select
        Sheets("mouvement caisse").Visible = False

        Sheets("saisie").Select
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        Range("A1").Select
        Sheets("saisie").Visible = False

        Sheets("caisse").Select
        Range("AB2:AB36,AD2:AD36,AF2:AF36,AI2:AI36").Select
        Range("AD2").Activate
        Selection.ClearContents

        Sheets("saisie").Visible = True
        Sheets("saisie").Select

        Range("A1:h6000").Select
        Selection.Copy
        Range("L1").Select

        End Sub

        --
         
        0
        1. Merci pour le temps que vous me consacrez

          Mais j'ai le message "erreur de compilation variable non définie" qui arrive à la ligne:
          Set xl = Excel.Application

          Prenez votre temps pour me répondre, demain sera un autre jour.

          Merci
          0
          1. ajouter

            Dim xl as Excel.Application 


            0
            1. ajouter la définition de ligne

                 Dim xl As Excel.Application
              Dim ligne As Range, plage_à_copier As Range, première_cellule_vide As Range, plage_collée As Range

              0
              1. Merci pour ton aide, surtout à des heures aussi tardives,

                Ci-dessous le code modifié. Mais maintenant j'ai le message" Next sans For" qui apparait à la ligne Next ligne du code.

                Sheets("mouvement caisse").Visible = True
                Sheets("mouvement caisse").Select
                ActiveSheet.Unprotect

                Sheets("saisie").Visible = True
                Sheets("saisie").Select
                ActiveSheet.Unprotect

                Dim xl As Excel.Application
                Dim ligne As Range, plage_à_copier As Range, première_cellule_vide As Range, plage_collée As Range

                Set xl = Excel.Application 'application Excel
                If Join(xl.Transpose(xl.Transpose(ligne.Value)), "") <> Empty Then 'si la ligne n'est pas vide
                'stockage des lignes à copier
                If plage_à_copier Is Nothing Then Set plage_à_copier = ligne _
                Else Set plage_à_copier = Union(plage_à_copier, ligne)
                End If
                Next ligne

                plage_à_copier.Copy
                With Sheets("mouvement caisse")
                Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
                If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
                End With
                première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

                plage_à_copier.Copy
                With Sheets("SAISIE")
                Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
                If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
                End With
                première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

                Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)

                Sheets("mouvement caisse").Select
                ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                Range("A1").Select
                Sheets("mouvement caisse").Visible = False

                Sheets("saisie").Select
                ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                Range("A1").Select
                Sheets("saisie").Visible = False

                Sheets("caisse").Select
                Range("AB2:AB36,AD2:AD36,AF2:AF36,AI2:AI36").Select
                Range("AD2").Activate
                Selection.ClearContents

                Sheets("saisie").Visible = True
                Sheets("saisie").Select

                Range("A1:h6000").Select
                Selection.Copy
                Range("L1").Select
                0
                1. ci-joint code corrigé

                  Sub encaissé1()

                  Sheets("mouvement caisse").Visible = True
                  Sheets("mouvement caisse").Select
                  ActiveSheet.Unprotect

                  Sheets("saisie").Visible = True
                  Sheets("saisie").Select
                  ActiveSheet.Unprotect

                  Dim xl As Excel.Application
                  Dim ligne As Range, plage_à_copier As Range, première_cellule_vide As Range, plage_collée As Range

                  Set xl = Excel.Application 'application Excel
                  For Each ligne In Sheets("caisse").UsedRange.Columns("AB:AH").Rows 'plage des lignes utilisées dans les colonnes AB à AH
                  If Join(xl.Transpose(xl.Transpose(ligne.Value)), "") <> Empty _
                  And ligne.Row <> 1 Then 'si la ligne n'est pas vide et n'est pas la première
                  'stockage des lignes à copier
                  If plage_à_copier Is Nothing Then Set plage_à_copier = ligne _
                  Else Set plage_à_copier = Union(plage_à_copier, ligne)
                  End If
                  Next ligne

                  plage_à_copier.Copy
                  With Sheets("mouvement caisse")
                  Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
                  If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
                  End With
                  première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False

                  plage_à_copier.Copy
                  With Sheets("SAISIE")
                  Set première_cellule_vide = .[A:A].Find("", SearchOrder:=xlByRows, SearchDirection:=xlNext)
                  If première_cellule_vide Is Nothing Then Set première_cellule_vide = .[A1]
                  End With
                  première_cellule_vide.PasteSpecial Paste:=xlPasteValues, Transpose:=False
                  Set plage_collée = première_cellule_vide.Resize(plage_à_copier.Rows.Count, plage_à_copier.Columns.Count)

                  Sheets("mouvement caisse").Select
                  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                  Range("A1").Select
                  Sheets("mouvement caisse").Visible = False

                  Sheets("saisie").Select
                  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                  Range("A1").Select
                  Sheets("saisie").Visible = False

                  Sheets("caisse").Select
                  Range("AB2:AB36,AD2:AD36,AF2:AF36,AI2:AI36").Select
                  Range("AD2").Activate
                  Selection.ClearContents

                  Sheets("saisie").Visible = True
                  Sheets("saisie").Select

                  Range("A1:h6000").Select
                  Selection.Copy
                  Range("L1").Select

                  End Sub


                  0
                  1. Bonjour thev,

                    Je ne sais comment te remercier tout fonctionne à merveille.

                    Il me manque encore une formule pour finaliser le petit outil de gestion de ma nouvelle association. Je me permets de te la soumettre en espérant ne pas trop abuser.

                    Il s’agit de la formule « sommeproduit » avec 2 conditions.
                    En cellule G16 je saisi une date.
                    En colonne A j’ai toutes mes dates
                    En colonne E j’ai le chiffre 0
                    Si la date en G16 est trouvée dans la colonne A et que le chiffre 0 en colonne E correspond, alors en multiplie les chiffres des colonnes D et F correspondants.
                    Résultat, somme de tous les produits trouvés à cette date.
                    0
                    1. Essayer cette formule matricielle
                      {=SOMMEPROD(ABS(A:A=G16);ABS(NON(E:E));D:D;F:F)}

                      rappel : pour entrer une formule matricielle, SHIFT + CRTL + ENTREE

                      0
                      1. Bonsoir thev,

                        Ta formule fonctionne, mais j'ai omis de dire que toutes mes colonnes sauf la cellule G16 se trouve sur un autre onglet nommé "mouvement caisse".
                        Et je suis tellement nul que je n'arrive pas à intégrer ce nom dans la formule.
                        0
                        1. Je viens de régler mon problème d'onglet.

                          Mille fois merci pour votre aide.
                          0