[Résolu]Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

beja

XLDnaute Nouveau
Bonjour à la communauté,

je tente de mettre au point une macro qui
1) recherche une plage au moyen de la valeur de de deux combobox2 contenant des dates
2) la copie dans la feuille "feuil1"
3) après la copie de cette plage, ajouter sur la première cellule en dessous de la plage le mot "Test"

Tout se passe sauf si je veux ajouter le point 3, j'ai beau tenter des méthodes variées (utilisation de variables, de boucles, de "cherche la première/dernières non vide", les conditionnelles...), le mot "test" se positionne dans la feuille contenant la base de données, et non pas la feuille où ont été copiées les données.

Private Sub CommandButton11_Click()

Dim i As Integer
Dim j As Integer
Dim MyCell As Range
Dim MyCell2 As Range


Sheets(ComboBox3.Value).Activate
' on active la feuille portant le nom du gestionnaire qui a été sélectionné
For i = 3 To 360 ' définition des paramètres de la boucle i (on commence en A3 et on prévoit jusqu'à 357 dates rentrées)
If Range("A" & i).Value = CDate(ComboBox1.Value) Then ' cherche la cellule en A qui contient la date de début de recherche
Range("A" & i).Select ' selectionne la cellule
Set MyCell = Range("A" & i) ' cette cellule est maintenant appelée "MyCell"
For j = 3 To 360 ' définition des paramètres de la boucle j (on commence en A3 et on prévoit jusqu'à 357 dates rentrées)
If Range("A" & j).Value = CDate(ComboBox2.Value) Then ' si la cellule en A portant le numéro j contient la date de fin de l'extraction
Range("A" & j).Select ' alors on sélectionne la cellule (possibilité de l'appeler MyCell2 comme pour MyCell)
Sheets("feuil1").Range("A3", "H" & (j - i) + 3).Value = Range(MyCell, ActiveCell.Offset(0, 7)).Value ' on transfère les données de la plage dans la feuil1 en "réservant" les deux premières lignes
Sheets("feuil1").Range("A1", "H2").Value = Sheets(ComboBox3.Value).Range("A1", "H2").Value ' on rempli les deux premières lignes avec les 2 premières lignes de la base de données (Titres = plage sans donnée)
End If
Next j
End If
Next i

'------------------------TOUT EST OK JUSQUE LA-------------------------------

For i = 1 To 700 ' définition des paramètres de la boucle i ( on balaye de A1 à A700 pour avoir jusqu'à 700 dates extraites de la base de données )
If Sheets("feuil1").Range("A" & i) Is Nothing Then ' si la cellule en A portant le numéro de ligne i est vide
Sheets("feuil1").Range("A" & i).Select ' alors on la sélectionne
End If
Next i

ActiveCell = "test"
' la cellule active prend la valeur "test"

End Sub


J'ai recréé le plus simplement possible les conditions d'utilisation dans le fichier ci-joint

- 1 userform
- 1 bouton sur feuil1
- une feuille "Armelle" contenant des données

Merci par avance à celui qui se penchera sur cette problématique ; également aux autres, toute critique constructive d'optimisation de ce code est également la bienvenue en ces lieux, je suis très très jeune utilisateur du VBA)
 

Pièces jointes

  • Test.xls
    67.5 KB · Affichages: 41
  • Test.xls
    67.5 KB · Affichages: 42
  • Test.xls
    67.5 KB · Affichages: 44
Dernière édition:

laurent950

XLDnaute Accro
Re : Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

Bonsoir beja,

Remplacer :
ActiveCell = "test" ' la cellule active prend la valeur "test"

par cela :
DerLign = Sheets("feuil1").Range("A65536").End(xlUp).Row + 1
Sheets("feuil1").Cells(DerLign, 1) = "test"

et cela fonctionne.

laurent
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

Bonjour beja, laurent,

tu peux remplacer tout ce code :
Code:
'------------------------TOUT EST OK JUSQUE LA-------------------------------  
  
  For i = 1 To 700                                          '  définition des paramètres de la boucle i ( on balaye de A1 à A700 pour  avoir jusqu'à 700 dates extraites de la base de données )
      If Sheets("feuil1").Range("A" & i) Is Nothing Then     ' si la cellule en A portant le numéro de ligne i est vide
          Sheets("feuil1").Range("A" & i).Select           ' alors on la sélectionne
      End If
    Next i

ActiveCell = "test"                                          ' la cellule active prend la valeur "test"


par cette ligne unique:
Code:
Sheets("feuil1").Range("A" & Sheets("feuil1").Range("A65535").End(xlUp).Row + 1) = "test"
à+
Philippe
 

beja

XLDnaute Nouveau
Re : Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

Merci pour la suggestion phlaurent55, je vais voir si ça ne perturbe pas les "après" de cette macro (userform, listview etc...).

Edit : Après test, ça fonctionne très bien, et ça améliore la visibilité de mes macros de débutant !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [Résolu]Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

Bonsoir les aminches

Personnellement, je me contente de ;)
Code:
Sheets("feuil1").Range("A65536").End(xlUp)(2) = "test"
et les nuits sans lune de
Code:
Sheets(1).[A65536].End(xlUp)(2) = "test"
 

beja

XLDnaute Nouveau
Re : [Résolu]Problème d'ajout de ligne à la fin d'une plage (à dimension variable)

On devient trop technique pour "mes petites mains actuelles" ;)

Je ne préfère pas le manipuler tout de suite, faut pas aller trop vite.

Aussi je conserve cette possibilité en commentaire de ma macro, pour un futur que j'espère proche

Cordialement,
 

Discussions similaires

Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine