selectionner une zone variable en vba

pascal21

XLDnaute Barbatruc
bonjour le forum
anVBA j'ai toujours un problème pour la syntaxe quand il y a des variables
donc ce que je cherche à faire c'est sélectionner une zone de tableau variable pour la retranscrire dans une feuille de sauvegarde (recopie des valeurs et du format avec l'enregistreur de macro)
sélectionner la première ligne vide de ma feuille de sauvegarde et retranscrire (recopie des valeurs et du format avec l'enregistreur de macro), ça je sais faire
ce qui me pose soucis, c'est de sélectionner la zone de mon tableau ("B1:I50")
dans ce tableau,il y a des lignes avec des formules jusque sur la ligne 50 qui ne sont pas "renseignées" jusqu'a la dernière ligne (50) (pas de zone vide au milieu du tableau)
ce que je cherche c'est comment sélectionner uniquement les lignes renseignées pour ne pas avoir de zone vide dans la feuille de sauvegarde
pour être plus clair il faut que ça sélectionne de la cellule B1 à la dernière ligne renseignée
merci de votre aide
edit: dans l'ancienne version du forum (il y a longtemps que je n'étais pas revenu) il y avait en bas de chaque post, les demandes equivalentes au post , ça n'existe plus?
 

mutzik

XLDnaute Barbatruc
bonjour et bonne année

un apercu xlsx de ton fichier et ca sera bon
sinon :
- que renvoie ta formule si la ligne n'est pas renseignée ?
- si 0, tu peux compter le nombre de ligne >0 par la formule =nb.si(B1:B50;">0") et ajuster en fonction de ton tableau
- ton nbsi (en cellule H4 par exemple) te renvoie 16 => de la ligne 17 à 50 non renseignées

ensuite en vba
=range("B1:B" & range("H4").copy ... . select ...
 

pascal21

XLDnaute Barbatruc
bonjour
le fichier exemple (les formules font reférences au classeur souche) donc ne pas tenir compte de la formulation)
en colonne B c'est une formule de recopie de la liste d'une autre feuille
 

Pièces jointes

  • selection zone variable.xlsx
    14.2 KB · Affichages: 35

job75

XLDnaute Barbatruc
Bonsoir Pascal, mutzik, Eric,

Ton fichier est assez vicieux !
Code:
Sub Copier()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Sauvegarde").Delete
With Feuil1 'CodeName de la feuille source
  .Copy After:=Sheets(.Index) 'pour les dimensions des lignes et colonnes
  ActiveSheet.Name = "Sauvegarde"
  ActiveSheet.Cells.Clear 'RAZ
  With .Range("B1:I" & .[A:I].Find("?*", , xlValues, , xlByRows, xlPrevious).Row)
    ActiveSheet.Range(.Address) = .Value
    .Copy
  End With
  ActiveSheet.[B1].PasteSpecial xlPasteFormats
  ActiveSheet.[A1].Select
  .Activate 'facultatif
End With
Application.CutCopyMode = 0
End Sub
A+
 

job75

XLDnaute Barbatruc
Re,

Ceci est beaucoup mieux :
Code:
Sub Copier()
Dim P As Range
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Sauvegarde").Delete
With Feuil1 'CodeName de la feuille source
  .Copy After:=Sheets(.Index) 'pour les dimensions des lignes et colonnes
  ActiveSheet.Name = "Sauvegarde"
  ActiveSheet.Cells.Clear 'RAZ
  Set P = Intersect(.[A:I], .UsedRange)
  ActiveSheet.Range(P.Address) = P.Value
  Set P = Intersect(ActiveSheet.[A:I], ActiveSheet.UsedRange)
  .Range(P.Address).Copy
  P.PasteSpecial xlPasteFormats
  Application.Goto ActiveSheet.[A1], True 'cadrage
  .Activate 'facultatif
End With
Application.CutCopyMode = 0
End Sub
Bonne nuit.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16