Sauter une ligne et reprendre le code VBA
Bonjour, je veins vers vous car j'ai un souci de code VBA
Dans mon document il y a des lignes vides et lorsque que la boucle tombe sur sur une ligne elle se termine...
Sauf que le groupe de lignes concernées n'est pas complet.
Est ce qu'il faut mettre dans mon code de la ligne n° X à la ligne n°Y ou est ce que l'on peut reprendre une boucle après une ligne vide?
Sub Printbeau()
' Printbeau Macro
'Dim Ligne As Long
Dim F1 As Worksheet
Set F1 = Sheets("DONNEES variables")
Ligne = 8
With Sheets("Feuille mensuelle")
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'.PrintPreview ' Pour les tests
Ligne = Ligne + 1
Wend
End With
End Subet moi j'ai essayé ce qui suit...
Sub Printbeau()
' Printbeau Macro
'Dim Ligne As Long
Dim F1 As Worksheet
Set F1 = Sheets("DONNEES variables")
Ligne = 8
With Sheets("Feuille mensuelle")
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'.PrintPreview ' Pour les tests
Ligne = Ligne + 1
Wend
End With
Set F1 = Sheets("DONNEES variables")
Ligne = 17
With Sheets("Feuille mensuelle")
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'.PrintPreview ' Pour les tests
Ligne = Ligne + 1
Wend
End With
Set F1 = Sheets("DONNEES variables")
Ligne = 24
With Sheets("Feuille mensuelle")
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'.PrintPreview ' Pour les tests
Ligne = Ligne + 1
Wend
End With
End SubSans grand résultat...
Merci
Leakim
Salut,
n'ayant ni ton fichier ni d'imprimante, je ne peux tester mais essaye ce code, à tout hasard...
Sub Printbeau()
Dim F1 As Worksheet, derLig As Long
derLig = Range("Q" & Rows.Count).End(xlUp).Row
Range("A8").Select
On Error Resume Next
For a = 8 To derLig
If Not IsEmpty(ActiveCell) Then
Sheets("Feuille mensuelle").PrintOut Copies:=1, Collate:=True
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Next a
End SubMerci pour cet essai. Il fonctionne le nombre de ligne est le bon, mais il ce code ne change pas la valeur de la cellule qui génère le changement de nom pour chaque document.
Je me demandai si avec une condition: si le numéro de ligne égale 24 alors fin...
A traduire en code VBA comme si dessous ???
Sub Printbeau()
' Printbeau Macro
'Dim Ligne As Long
Dim F1 As Worksheet
Set F1 = Sheets("DONNEES variables")
Ligne = 8
With Sheets("Feuille mensuelle")
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'.PrintPreview ' Pour les tests
Ligne = Ligne + 1
IF Ligne = 24 then end
Wend
End With
End Subdonc si j'ai bien compris, dans ta cellule Q3, tu inscris le No de la dernière ligne, c'est ça ?
Il suffit de changer le code comme suit :
Sub Printbeau()
Dim F1 As Worksheet, derLig As Long
derLig = Range("Q3") 'changement
Range("A8").Select
On Error Resume Next
For a = 8 To derLig
If Not IsEmpty(ActiveCell) Then
Sheets("Feuille mensuelle").PrintOut Copies:=1, Collate:=True
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Next a
End SubEt bien non en fait en Q3 c'est une référence de fonction recherche.
C'est Banzai64 qui m'a fait çà au petit oignon...
While F1.Cells(Ligne, "A") <> ""
.Range("Q3") = F1.Cells(Ligne, "A")La valeur de A dans la ligne de ma base de donnée est reporté dans la cellule Q3.
et c'est dans ma base de données que j'ai des lignes vides.
Donc il faudrait que que dans le code cette action de incrémentation de la cellule Q3 reste et que lors d'une ligne vide le code continu...
Je ne sais si je suis clair.
Merci de ta sollicitude en tout les cas.
Pour répondre à ta question
Game Over a écrit :donc si j'ai bien compris, dans ta cellule Q3, tu inscris le No de la dernière ligne, c'est ça ?
Non ,dans la cellule Q3 c'est la référence de la base de données.
Leakim
Si tu peux joindre un fichier, ce sera plus concrêt et ça ne devrait pas etre trop difficile à résoudre.
Insomnie quand tu nous tiens !!!
Il faut que je bosse sur le doc pour l'anonymer ...
Je pense que pour l'instant je vais mettre une valeur dans la cellule A dans des lignes vides, ce qui me générera une impression.
Même si la rechercheV est fausse au moins je n'aurai plus de rupture dans mon code.
Je pense aussi que c'est une bricole ... Cela en dit long de mon autonomie en code VBA
Bref, merci je vais clôturer ce post pour en reformuler un avec un fichier.
Merci, Leakim