Problème SkipBlanks

foxbox545

XLDnaute Nouveau
Bonjour à tous et merci de votre aide,

Je vous expose mon problème:

Je travail sur un fichier regroupant des informations classées par mois sur différents onglets. Dans un dernier onglet, nommé DB, je souhaite que l'ensemble des informations présentes dans les autres onglets soient restituées. Pour cela, je m'aide de la formule Skipblanks pour pouvoir selectionner des plages de données larges, pour que je n'ai pas à les redéfinir à chaque fois que j'ajoute des informations dans un onglet "mois". Problème, la macro skipblanks me joue des tours entre le mois de novembre et le mois de décembre. Voici ma macro:

Sub Base_données()
'
' Base_données Macro
' Macro enregistrée le 10/10/2008 par JFM
'
' Touche de raccourci du clavier: Ctrl+Maj+M
'
Sheets("Jan").Select
Range("B12:S59").Select
Selection.Copy
Sheets("DB").Select
Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Fév").Select
Range("B13:S59").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
ActiveWindow.SmallScroll Down:=27
Range("A56").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=51
Sheets("Mar").Select
Range("B13:S60").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Range("A103").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=48
Range("A151").Select
Sheets("Avr").Select
Range("B13:S59").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Mai").Select
Range("B13:S60").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
ActiveWindow.SmallScroll Down:=51
Range("A198").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=42
Sheets("Jun").Select
Range("B13:S59").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Range("A246").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=39
Sheets("Jul").Select
Range("B13:S58").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Range("A293").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=45
Sheets("Aou").Select
Range("B13:S58").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Range("A339").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Sep").Select
Range("B13:S59").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
ActiveWindow.SmallScroll Down:=45
Range("A385").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=30
Sheets("Oct").Select
Range("B13:S58").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
ActiveWindow.SmallScroll Down:=18
Range("A432").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=51
Sheets("Nov").Select
Range("B13:S58").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
Range("A478").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Nov").Select
Selection.Copy
Sheets("DB").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Déc").Select
Range("B13:S59").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DB").Select
ActiveWindow.SmallScroll Down:=48
Range("A524").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Application.ScreenUpdating = False
Dim l As Integer
For l = Cells(65256, 8).End(xlUp).Row To 8 Step -1
If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
Next l

End Sub


Merci d'avance pour votre aide.
 

Gorfael

XLDnaute Barbatruc
Re : Problème SkipBlanks

Salut foxbox545 et le forum
Code:
Pour cela, je m'aide de la formule Skipblanks
Je ne comprends pas ce que tu veux dire : Skipblanks est systématiquement à faux dans toutes tes formules => pas actif!!!
Code:
Dim X As Long
Application.ScreenUpdating = False
Sheets("Jan").Range("B12:S59").Copy
Sheets("DB").Range("A8").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A8").PasteSpecial Paste:=xlPasteFormats
Sheets("Fév").Range("B13:S59").Copy
Sheets("DB").Range("A56").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A56").PasteSpecial Paste:=xlPasteFormats
Sheets("Mar").Range("B13:S60").Copy
Sheets("DB").Range("A103").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A103").PasteSpecial Paste:=xlPasteFormats
Sheets("Avr").Range("B13:S59").Copy
Sheets("DB").Range("A151").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A151").PasteSpecial Paste:=xlPasteFormats
Sheets("Mai").Range("B13:S60").Copy
Sheets("DB").Range("A198").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A198").PasteSpecial Paste:=xlPasteFormats
Sheets("Jun").Range("B13:S59").Copy
Sheets("DB").Range("A246").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A246").PasteSpecial Paste:=xlPasteFormats
Sheets("Jul").Range("B13:S58").Copy
Sheets("DB").Range("A293").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A293").PasteSpecial Paste:=xlPasteFormats
Sheets("Aou").Range("B13:S58").Copy
Sheets("DB").Range("A339").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A339").PasteSpecial Paste:=xlPasteFormats
Sheets("Sep").Range("B13:S59").Copy
Sheets("DB").Range("A385").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A385").PasteSpecial Paste:=xlPasteFormats
Sheets("Oct").Range("B13:S58").Copy
Sheets("DB").Range("A432").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A432").PasteSpecial Paste:=xlPasteFormats
Sheets("Nov").Range("B13:S58").Copy
Sheets("DB").Range("A478").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A478").PasteSpecial Paste:=xlPasteFormats
Sheets("Déc").Range("B13:S59").Copy
Sheets("DB").Range("A524").PasteSpecial Paste:=xlPasteValues
Sheets("DB").Range("A524").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
For X = Cells(65256, "H").End(xlUp).Row To 8 Step -1
If Cells(X, "A") = "" Then Rows (X)
Next X
End Sub
Ton code "remanié" : effectivement, ton code était bizarre pour l'onglet Nov. Et la syntaxe que tu utilises rend ton code illisible. Le but d'épurer un code n'est pas de diminuer le nombre de lignes, ce n'est qu'un corollaire, le but est de rendre compréhensible et lisible facilement de sorte que les différences (surtout dans un cas répétitif, comme ici) ressortent mieux.
En admettant que la feuille Jan soit la première et Déc la 12ème, on pourrait simplifier avec une macro du style
Code:
Sub Base_données()
Dim X As Long, F As Integer
Application.ScreenUpdating = False
For F = 1 To 12
    Sheets(1).Range("B12:S59").Copy
    
    Sheets(F).Range("A" & (8 + (48 * F))).PasteSpecial Paste:=xlPasteValues
    Sheets(F).Range("A" & (8 + (48 * F))).PasteSpecial Paste:=xlPasteFormats
Next F
Application.CutCopyMode = False
For X = Cells(65256, "H").End(xlUp).Row To 8 Step -1
If Cells(X, "A") = "" Then Rows (X)
Next X
End Sub
Ça me semble plus lisible, mais comme je n'ai essayé aucune des macros, je me suis juste inspiré du code.

Remarques :
- Je déclare toujours une variable dans le format qui ne me renverra pas d'erreur : Integer n'allant que jusqu'à 32767 et les lignes pouvant atteindre 65536 (éh oui, un espace en ligne 65536 peut arriver), mes variables lignes sont toujours déclarées en Long : Le gain de 2 octets ne justifie pas de risquer une erreur.
-On peut agrémenter ma macro d'un Select Case Sheets(F).Name, en mettant, ces adresses de copies dans chaque "Case", mais ça ne me semble pas se justifier.
- L'instruction Application.CutCopyMode = False ne sert qu'à enlever les tirets clignotants suite à une copy : une seule fois suffit, et même, comme on fait des actions après, l'omettre ne change rien.
- L'instruction Skipblanks:=True risque d'avoir des répecutions inattendues : tu aurais des décalages à chaque case vide. Pas glop, pas glop!
-Pense à utiliser les balises de code (icone #)
A+
 

Dull

XLDnaute Barbatruc
Re : Problème SkipBlanks

Salut foxbox545, Gorfael:), le Forum

n'apporterienàladiscution...
Juste pour faire un coucou a l'ami dragon :) lui dire qu'il se fait rare sur ce forum et qu'il nous manque beaucoup.

Bonne Journée
 

foxbox545

XLDnaute Nouveau
Re : Problème SkipBlanks

J'ai essayé d'intégrer tes code sur le fichier mais, étant très mauvais en macro, je n'y arrive pas car un certain nombre de chose m'échappe.
Que signifie les inconnues entre parenthèse (X, "A") et (X):
If Cells(X, "A") = "" Then Rows (X)
Et par quoi dois je les remplacer si je veux que le code fonctionne ? Merci
 

Discussions similaires

Réponses
2
Affichages
158
Réponses
5
Affichages
178

Statistiques des forums

Discussions
312 520
Messages
2 089 286
Membres
104 084
dernier inscrit
dadap