Copie plage plusieurs feuilles compilées sur une feuille
Bonjour à tous,
J'ai une difficulté que je n'arrive pas à surmonter qui est celle de sélectionner une plage de cellules de plusieurs feuilles à recopier sur une seule feuille.
J'ai plusieurs feuilles de différents frais budgétés que je veux centraliser sur une feuille pour réaliser un contrôle budgétaire.
Dans l'exemple joint j'ai une feuille "Frais généraux" et une feuille "Frais variable" dont les données sont à regrouper dans une feuille "Ctrl_budgetaire".
J'ai passé mon après-midi à chercher comment en vBA je pouvais sélectionner une plage pour la copier et la coller sur une autre feuille.
J'ai essayé du moins tenté d'utiliser la fonction suivante, mais j'ai une erreur au lancement de la procédure au niveau de la sélection de la plage de cellule.
Sheets("Frais généraux").Activate
Sheets("Frais généraux").Range("G11").Select
' Sheets("Frais généraux ").Range ("G11:N11" & Sheets("Frais généraux").Range("D65536").End(xlUp).Row)
Sheets("Frais généraux").Range(Range("G11"), Range("N11").End(xlDown)).Select
Selection.Copy
Ce que je ne sais pas faire :
- Sélectionner une plage jusqu'à la dernière ligne
Sélectionner une plage non contiguë (Voir la feuille frais variable). Si nécessaire ou compliqué, je déplacerai les colonnes
Coller à la première ligne libre du tableau au fur et à mesure des tableaux successifs
Je saurai trier pour que l'affichage soit cohérent.
Si vous pouviez m'orienter, je saurai me débrouiller ensuite.
Un adhérant m'avait déjà fourni une solution par extraction sélective pour un autre sujet, mais je n'arrive pas à m'inspirer de la syntaxe qui est trop complexe pour moi.
Je vous joins un extrait du fichier pour appréhender ma difficulté.
Merci par avance
Bonjour à tous
J'ai trouvé partiellement une solution ci-dessous :
Sub Import_Cpte_Budget()
Dim DerLigneFg As Integer, DerLigneAC As Integer, DerLigneAM As Integer, DerLigneFc As Integer
Dim i As Integer, L1 As Integer, C1 As String, L2 As Integer, C2 As String
Dim DerLigneCtrlBudget As Integer
Dim MontantN1 As Double, MontantN As Double
If MsgBox("Etes-vous certain de vouloir effacer l'ensemble du contenu et refaire la mise à jour." & Chr(10) & Chr(10) & _
"Si des comptes ont été ajoutés dans les différents tableaux à importer, les valeurs de la balance saisies peuvent être décalées", vbYesNo, "Demande de confirmation") = vbYes Then
Efface_Cpte_Budget
Else:
Exit Sub
End If
'On désactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = False
'On appelle la procédure permettant d'effacer les données
Efface_Cpte_Budget
'**********************
'FRAIS GENERAUX
'**********************
'On sélectionne la feuille frais généraux
Sheets("Frais généraux").Select
'On se positionne sur la dernière ligne non vide
DerLigneFg = Range("G146").End(xlUp).Row
'On parcours tout le tableau à partir de la ligne pour copier chacune des lignes
For i = 11 To DerLigneFg
Sheets("Frais généraux").Select
'on sélectionne la première ligne
C1 = "G"
L1 = i
C2 = "N"
L2 = i
Range(C1 & L1 & ":" & C2 & L2).Select
Selection.Copy
'Selection de la feuille de de controle
Sheets("Ctrl_Budgetaire").Select
'Il faut trouver la dernière ligne non vide de la feuille contrôle budgétaire
DerLigneCtrlBudget = Range("G180").End(xlUp).Row + 1
'On sélectionne la cellule vide et la première colonne
Cells(DerLigneCtrlBudget, 7).Select
'Une fois positionné, on colle les données
ActiveSheet.Paste
Next i
Bonjour
Dommage que tu n'aies pas rempli à titre d'exemple ce que tu comptes obtenir sur ta feuille "Ctrl_Budgetaire"
à partir des 2 autres feuilles...
Bye !
Bonjour,
J'ai manqué de temps, pour reprendre mon classeur initial et générer à nouveau pour l'exemple.
Je serai plus précis la prochaine fois, et je fais avec mes faibles connaissance, du moins je bidouille au mieux.
Mes lignes de code ne sont surement pas très propre ou optimisées
Cordialement