Macro Excel

Résolu/Fermé
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023 - 19 mars 2011 à 19:42
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 20 mars 2011 à 13:52
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


A voir également:

4 réponses

Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
19 mars 2011 à 19:51
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
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023
19 mars 2011 à 19:56
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 mars 2011 à 10:54
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
20 mars 2011 à 11:39
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
Evedll Messages postés 74 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 26 septembre 2023
20 mars 2011 à 12:41
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 mars 2011 à 12:55
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
20 mars 2011 à 13:26
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 mars 2011 à 13:52
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