Macro Excel

Résolu
Evedll Messages postés 79 Statut Membre -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
J'ai besoin de copier automatiquement dans une plage de cellules précises (A22:H33) les lignes non vides et non la totalité de la plage. Je n'arrive pas à trouver la méthode et l'enregistreur de macro ne me permet pas de le faire.
Je pense qu'il doit y avoir une possibilité. Je remercie d'avance les personnes qui pourront me guider à trouver la solution.
A bientôt de vous lire.
Merci
Evelyne

4 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Si j'ai bien compris, tu veux copier les lignes non vide de la plage A22:H33 mais de quelle feuille et vers quelle feuille !
    et cette copie doit elle se mettre à la suite de données déjà existantes !
    0
    1. Evedll Messages postés 79 Statut Membre
       
      Bonsoir, oui c'est ça.
      Mes données sont dans la plage A22:H33 de la feuille "ventilation" et elles doivent être collées dans la feuille "Inscriptions" à la suite de données existantes.
      Ce qu'il me manque c'est de faire la sélection automatiquement.
      Je sais comment faire le transfert (car je récupère des lignes de code quand je les comprends) mais je ne sais pas comment sélectionner la plage de cellules dont j'ai besoin.
      Merci pour ton aide
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Un petit code basique avec quelques explications pour suivre et comprendre l'action à copier dans un module, ou à intégrer dans les propriétés d'un bouton activeX

    Sub Test()
    Application.ScreenUpdating = False 'évite le déplacement pendant l'exécution du code
    Sheets("ventilation").Activate 'sélectionne la feuille
    Range("A22", Range("H33")).Select 'sélectionne la plage
    Selection.AutoFilter Field:=1, Criteria1:="<>" 'filtre la plage et sélectionne les cellules non vide
    Selection.Copy
    Sheets("Inscriptions").Activate 'sélectionne la feuille du transfert
    Range("A65000").End(xlUp).Offset(1).Select 'recherche la première cellule vide
    ActiveSheet.Paste 'copie les données
    Sheets("ventilation").Activate 'reviens sur la feuille de départ
    Application.CutCopyMode = False 'désactive le mode Copier
    Selection.AutoFilter 'désactive le filtre
    Range("A1").Select
    Application.ScreenUpdating = True 'rétabli les fonctions Excel
    End Sub

    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Un exemple de ce que tu pourrais faire :
    Sub copier()
        Dim lig As Long
        For lig = 22 To 33
            If Application.CountA(Cells(lig, 1).Resize(1, 8)) > 0 Then
                Cells(lig, 1).Resize(1, 8).Copy Destination:=Worksheets("Feuil2").[A65536].End(xlUp).Offset(1, 0)
            End If
        Next lig
    End Sub
    

    Il faudra peut-être changer le test du if si tu as des formules et de ce que tu considères comme étant une cellule vide.
    eric
    0
  4. Evedll Messages postés 79 Statut Membre
     
    Bonjour Mike et Eric,
    Je vous remercie de vos réponses.
    Pour mon cas de figure, c'est la réponse de Mike qui correspond à mes besoins car le filtre définit exactement les cellules non vides. Mes manipulations précédentes font que les cellules non vides ne sont pas considérées comme telles et c'est ce qui me bloquait. Toutes les méthodes de sélection les prenaient quand même en compte.
    Donc cette methode est super (dommage de ne pas y avoir pensé avant).
    De plus les explications de chaque ligne de code sont intéressantes pour celles et ceux qui n'ont aucune connaissance en macro.
    En ce qui concerne la macro d'Eric, j'essayerai de l'utiliser pour d'autres manipulations en temps voulu (ne serait que pour la tester car elle semble être très rapide mais il faut que je l'analyse pour la comprendre).
    Je vous remercie beaucoup car je me creuse les méninges avec les macros (que j'adore) mais j'ai encore un grand chemin à faire pour être autonome.
    C'est sympa de savoir qu'il y a toujours des personnes qui aident.
    Encore Merci
    Evelyne
    0
    1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Re,

      Après avoir lu ta demande, j'ai écrit un code très basique qu'il est possible d'écrire de façon plus technique comme celui d'Eriiic que je salue.
      Si ton bouton de déclenchement du code est sur la feuille "ventilation", tu peux supprimer cette première ligne
      Sheets("ventilation").Activate 'sélectionne la feuille

      cordialement
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Re tout le monde :-)

      En fait je n'avais même pas vu que tu avais répondu mike...
      Je ne suis pas bien réveillé ;-)
      eric
      0
    3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Salut Eriiic,

      Mais il n'y a pas de mal, bien au contraire cela permet d'échanger des codes dans l'intérêt de tous et de se croiser.
      vu les explications d'Evedll, je n'ai pas voulu le perdre dans un code trop technique et lui ai posté un code tout à fait basique afin qu'il puisse facilement le reproduire et avec le tien il à de quoi jouer s'il veut progresser.

      Cordialement
      bon dimanche
      0