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

  • Initiateur de la discussion Initiateur de la discussion beja
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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
 
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
 
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:
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"
 
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,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
235
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Réponses
3
Affichages
582
Retour