XL 2016 syntaxe vba excel

rheslot

XLDnaute Nouveau
Bonjour au forum,
Je n'ai pas trouvé réponse à mon interrogation dans les différents sujets traités ou j'ai mal cherché !!! J'ai un mon problème de syntaxe dans une commande qui me permet de définir la cellule active d'une colonne qui doit etre la 1ère vide avant une cellule total qui est sur une ligne dont le numéro varie ; il peut y avoir 10 ou 20 ou 30 ligne entre la 1ère cellule vide et la dernière ligne utiisée. J'au un code qui fonctionne qui prend en compte les coordonnéees de l'adressage et je voudrais que ces coordonnées soient remplacées par des variable : 1ère cellule de la plage = A4 soit Dim PremCell as Integer
dernière cellule utilisée de la colonne = A325 soit Dim DernCell As Integer
J'utilise le code suivant pour me positionner sur la 1ère cellule vide de macolonne "A" :
Set cel = [A4:A325].Find("", , , xlByColumns, xlNext)
Je souhaiterai remplacer [A4] et [A325] par mes variables :
PremCell = Range("A4").Address
DernCell =Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
C'est sans doute très simple mais mes bases VBA sont lointaines.
Merci de votre aide et contribution.
Renaud
 

rheslot

XLDnaute Nouveau
Merci du retour. Cette solution fonctionne et redimensionne mon tableau ; néanmoins étany curieux j'aurais aimé connaitre la syntaxe correspondant à ma demade initiale, à savoir substituer les adresse de coordonnées d'une plage par des variables préalablement définies.
Cdt,
renaud
 

Dranreb

XLDnaute Barbatruc
Sinon, il fut un temps où j'utilisais beaucoup ces deux fonctions, qui travaillaient aussi avec Find … Previous :
VB:
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing, _
   Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
   Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
   On Error GoTo RienTrouvé
   If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
   LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
   CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
   On Error GoTo 0
   NbL = LMax - PlageDép.Row + 1: If NbL < LMin Then NbL = LMin
   NbC = CMax - PlageDép.Column + 1: If NbC < CMin Then NbC = CMin
   If NbL < 1 Or NbC < 1 Then GoTo CEstToutVide
   Set PlgUti = PlageDép.Resize(NbL, NbC)
   Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
   End Function
Function ColUti(ByVal PlageDép As Range, Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
   Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn), LMin, CMin)
   End Function
Mais avec les tableaux ça a beaucoup perdu de son intérêt.

Et celle ci qui procède différemment :
Code:
Function PlageÀPartirDe(ByVal CelDéb As Range) As Range
Rem. ——— Plage utilisée à partir de CelDéb.
   Dim NbrLig As Long, NBrCol As Long
   With CelDéb.Worksheet.UsedRange:
      NbrLig = .Row + .Rows.Count - CelDéb.Row
      NBrCol = .Column + .Columns.Count - CelDéb.Column
      If NbrLig <= 0 Or NBrCol <= 0 Then Exit Function
      End With
   Set PlageÀPartirDe = CelDéb.Resize(NbrLig, NBrCol)
   End Function
 

rheslot

XLDnaute Nouveau
Bonjour à tous,
Je n'ai toujours pas trouvé la solution à mon problème initial, donc plutot que de faire un long duscours je joins un fichier qui pourra peut-être clarifier ma demande. S'il faut ouvrier une nouvelle discussion merci de me l'indiquer.
Cdt
Renaud
 

Pièces jointes

  • Suivi_operation.xlsm
    195.1 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonjour.
Quitte à noter quelque chose, il vaut toujours mieux noter par des Set les objets eux mêmes dans des variable de leurs bon type d'objet plutôt que leurs référence dans des String, ce qui oblige, pour les utiliser, à les reconstituer, avec des risques d'erreurs.
Notez par exemple Set Wsh = ActiveSheet plutôt que NomFeuii = ActiveSheet.Name
et notez Set Rng = Find(etc. …) plutôt que Adr = Find(etc. …).Address.
 

Discussions similaires

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123