Code imcomplet

Résolu/Fermé
VDB.57 - Modifié par NHenry le 18/07/2016 à 18:46
 VDB.57 - 21 juil. 2016 à 00:06
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.
A voir également:

13 réponses

thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
19 juil. 2016 à 19:05
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
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
thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
Modifié par thev le 19/07/2016 à 22:51
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
19 juil. 2016 à 22:55
ajouter

Dim xl as Excel.Application 


0
toujours le même message!
0
thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
19 juil. 2016 à 23:21
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
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
thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
20 juil. 2016 à 15:28
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
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
thev Messages postés 1882 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 26 octobre 2024 689
Modifié par thev le 20/07/2016 à 21:36
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
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
Je viens de régler mon problème d'onglet.

Mille fois merci pour votre aide.
0