VBA - Augmenter une sélection

Bonjour,

Je rencontre un pb dans le codage d'une macro qui me semble insoluble.

Je recherche à copier une sélection. Jusque là, rien de bien compliqué.

Pour cela, je sélection une case (identique dans tous les onglets où je veux faire cette copie), j'étend la sélection jusqu'au bout à droite, avec CTRL SHIFT C, et idem en bas.

Mon problème survient que dans certains onglet, je n'ai qu'une ligne!

Ainsi m'a manip va bien sélectionner toutes les données de gauche à droite, seulement de haut en bas elle va sélectionner jusqu'au bat de l'onglet, rendant la copie impossible!

J'ai beau chercher, impossible de résoudre ce problème!

Auriez vous une idée de comment gérer ce genre de sélection dans une macro, afin qu'elle puisse prendre en compte de manière efficace, une sélection de plusieurs ligne, comme une sélection d'une seule ligne?

Je vous précise également que d'un mois à l'autre les données changent et c'est pourquoi j'ai besoin que la macro s'adapte à ces deux cas de figure.

Merci d'avance pour votre aide.

Bonjour,

Si possible

Bonjour, ou minimum ; si il ne fait pas 3 kilomètres de long ; une copie du code de la macro.

Curieux de voir comment vous copiez plusieurs onglets en même temps.

Bonjour à tous,

Essayez avec :

range("A1").currentregion

Vous aurez le même problème si A1 n'a pas de région courante.

Donc il vaut mieux réfléchir à une solution durable, comme des tableaux structurés par exemple, sachant que, sauf cas rares, on ne sélectionne pas les cellules avec VBA.

Cdlt,

Bonsoir,
Une piste !?

Dim ACell      As Range
    Set ACell = ActiveCell
    ACell.CurrentRegion.Copy

Voila dans l'idée ce que j'aimerais faire.

En fait il s'agit d'agréger dans un onglet de synthèse les infos des autres onglets

Et je me suis certainement mal exprimé, mais je ne copie pas tous les onglets en même temps, mais les uns après les autres.

J'espère que mon cas est à présent plus clair pour vous.

Merci

Une proposition de synthèse avec PowerQuery

16effectif-test.zip (152.52 Ko)

Re bonjour, vu l'exemple par macro c'est une boucle d'onglet en onglet pour copie.

Cependant si la macro a pour but d'être lancée plusieurs fois il faudra penser à vider l'onglet qui accueil les infos pour ne pas avoir de doublons

de copie.

Sub Macro1()
'
Dim Ws As Worksheet
Dim derligne As Long
For Each Ws In ThisWorkbook.Worksheets

If Ws.Name <> "ENTREES_SORTIES" Then
derligne = Worksheets(Ws.Name).Range("B65536").End(xlUp).Row

Worksheets(Ws.Name).Range("B3:O" & derligne).Copy Destination:=Worksheets("ENTREES_SORTIES").Range("A" & Worksheets("ENTREES_SORTIES").Range("A65536").End(xlUp).Row + 1)
End If
Next

End Sub

Bonjour, et merci pour vos réponses.

la deuxième solution, proposée par Xmenpl est pas mal. A un détails prés, c'est qu'elle copie d'un bloc les "entrées" et les "sorties" de chaque onglet, ce qui fait que ca ne marche pas dans le cas où un onglet présentera moins de sorties que d'entrées (j'ai remis le fichier avec ce cas de figure)

Dans l'idée j'aimerais appliquer cette solution, mais séparément pour les entrées, et les sorties.

A savoir dans un premier temps copier toutes les lignes avec des infos de B3 à F3, et de les coller dans la synthèse.

Puis faire de même de H3 à O3.

par contre j'avoue ne pas être capable de modifier ce code en ce sens

Et d'ailleurs, afin d'enrichir mes compétences en VBA, j'aimerais bien une "traduction" de ce code si vous avez le temps?!

Merci

Bonjour,

N'ayant tjrs pas trouver la solution à mon problème (pour l'instant je copie manuellement les infos), je me permet de vous relancer.

Voici le fichier dans sa dernière version.

Et je vous ajoute également qu'avant de faire mon copier coller, j'aimerais trier sur la caractéristique "CHAUFFEUR".

Merci pour vos lumières.

Bonjour, il suffisait de doubler les variables dernières lignes puisqu'elles sont différents pour entrées et sorties.

Sub Macro1()
'Déclaration de la variable Ws (feuille ) 
Dim Ws As Worksheet
'déclaration des variables dernière ligne non vide
Dim derligne1 As Long
Dim derlinge2 As Long

'Début de boucle pour tester les feuilles
For Each Ws In ThisWorkbook.Worksheets

'Condition si Nom de feuille différent de "ENTREES_SORTIES" alors lancera copie copie
If Ws.Name <> "ENTREES_SORTIES" Then
derligne1 = Worksheets(Ws.Name).Range("B65536").End(xlUp).Row
derligne2 = Worksheets(Ws.Name).Range("H65536").End(xlUp).Row

Worksheets(Ws.Name).Range("B3:F" & derligne1).Copy Destination:=Worksheets("ENTREES_SORTIES").Range("A" & Worksheets("ENTREES_SORTIES").Range("A65536").End(xlUp).Row + 1)
Worksheets(Ws.Name).Range("H3:O" & derligne2).Copy Destination:=Worksheets("ENTREES_SORTIES").Range("G" & Worksheets("ENTREES_SORTIES").Range("G65536").End(xlUp).Row + 1)
End If
'Ensuite test de la feuille suivante
Next

End Sub

Excellent Xmenpl!

Ce nouveau code marche bien. Si ce n'est que dans mon fichier, j'ai d'autres onglets que ceux que je vous ai présenté dans le fichier d'exemple.

Mais je pense que je peux m'en tirer en reprenant ce code sur chacun des onglets où j'ai les données à copier.

par contre, comment intégrer la fait de trier la colonne "AGEN" (les colonnes B et J) sur un critère (ce critère sera "CHAUFFEUR")?

Par curiosité, j'ai tenté de multiplier les exceptions dans la sélection des onglets, sans succès.

Est ce possible d'en mettre plusieurs?

J'ai tenté de rajouter des terme après le IF avec un point virgule, ou un AND :

If Ws.Name <> "ENTREES_SORTIES" ; <> "Test" Then

ou

If Ws.Name <> "ENTREES_SORTIES" And "Test" Then

Et j'ai aussi essayé de rajouter une exception complète après le THEN :

If Ws.Name <> "ENTREES_SORTIES" Then

If Ws.Name <> "Test" Then

Il faut répéter en entier les conditions

IF Ws.Name <> "ENTREES_SORTIES" And Ws.Name <>"Test" Then

Concernant le tri personnellement je ne vois pas trop l'intérêt à partir de votre onglet récapitulatif total vous pouvez trés bien

créer un TCD tableau croisé dynamique qui vous ressortira les résultats comme vous souhaitez , par date ou par chauffeur.

En effet, je peux procéder de la sorte!

Cela me parait tout parfait, je vais tester tout cela.

Merci bcp pour le coup de main.

Rechercher des sujets similaires à "vba augmenter selection"