Code imcomplet

Résolu
VDB.57 -  
 VDB.57 -
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. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
  2. VDB.57
     
    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
  3. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
  4. VDB.57
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    ajouter

    Dim xl as Excel.Application 


    0
  7. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
  8. VDB.57
     
    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
  9. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
  10. VDB.57
     
    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
  11. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
  12. VDB.57
     
    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
  13. VDB.57
     
    Je viens de régler mon problème d'onglet.

    Mille fois merci pour votre aide.
    0