J'aurais besoin qu'on m'aide à concevoir un code VBA afin de permettre la copie de données de différentes feuilles dans une seule feuille.
Dans fichier ci-joint (Exemple 1.xlsm), pour chaque feuille visible (nom et nombre variés : 001, 002,...XX) contenant les caractères "ID :" en "B8" et des caractères différents de "xx" en "C8", copier toutes les valeurs (même nulles) des cellules "AI2 à AK2", de la première feuille (à gauche) dans les cellules "E10 à QG10" de la feuille BDIST. Répéter les mêmes étages pour la deuxième feuille en copiant les cellules "AI2 à AK2" à la suite de la plage "E10 à QG10" soit dans les cellules "E11 à QG11" de la feuille BDIST et ainsi de suite jusqu'à la dernière feuille contenant les caractères "ID :" en "B8" et des caractères différents de "xx" en "C8".
Une fois toutes les données copiées, des filtres devront être appliqués dans les cellules "E9 à QG9" de la feuille BDIST afin de trier ou rechercher des données précises.
En vous remerciant par avance pour votre précieuse aide.
Bonjour Renaud,
Un essai avec ce que j'ai compris :
VB:
Sub Consolide()
Dim Nom$, F, L%
Nom = ActiveSheet.Name
L = 10
[E10:QG1000].ClearContents
For Each F In Worksheets
If F.Name <> Nom Then
With Sheets(F.Name)
If .[C7] <> "" And .[B8] <> "ID" And .[C8] <> "" Then
Range(Cells(L, "E"), Cells(L, "QG")) = .Range("AI2:RK2").Value
L = L + 1
End If
End With
End If
Next F
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Range("E6:QG" & [E60000].End(xlUp).Row).AutoFilter
End Sub
Merci beaucoup pour votre aide. J'ai changé la ligne : "If .[C7] <> "" And .[B8] <> "ID" And .[C8] <> "" Then" pour : " If .[B8] = "ID :" And .[C8] <> "xx" Then" afin de tenir compte de mes contraintes. Tout fonctionne donc à merveille.
Bonjour Renaud,
Un essai avec ce que j'ai compris :
VB:
Sub Consolide()
Dim Nom$, F, L%
Nom = ActiveSheet.Name
L = 10
[E10:QG1000].ClearContents
For Each F In Worksheets
If F.Name <> Nom Then
With Sheets(F.Name)
If .[C7] <> "" And .[B8] <> "ID" And .[C8] <> "" Then
Range(Cells(L, "E"), Cells(L, "QG")) = .Range("AI2:RK2").Value
L = L + 1
End If
End With
End If
Next F
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Range("E6:QG" & [E60000].End(xlUp).Row).AutoFilter
End Sub
Il y a un mois, vous aviez conçu, pour moi, une macro permettant de copier, dans une seule feuille récapitulative (BDREE), des données provenant de différentes feuilles de données. J'ai modifié légèrement le code VBA afin de l'adapter à mes besoins. Tout fonctionne très bien.
Maintenant, je veux augmenter le nombre de lignes de données par feuille. Je joins le fichier Exemple_1.zip dans lequel j'ai un nombre quelconque de feuilles de données (dans ce cas : 4 : 001_ACEP, 002_ACEP, 003_INTCM & 004_PCONA). Quand j'exécute la macro " BDREE", celle-ci ne tient compte uniquement de la plage AJ27 à CA27 pour chacune des feuilles de données. Le résultat est représenté dans la feuille "BDREE".
Je voudrais que, dans une feuille de données :
si AR27 égale "0" la copie de la plage AJ27 à CA27 ne soit pas effectuée et on passe à la feuille suivante ;
si AR39 égale "0" la copie de la plage AJ27 à CA27 soit effectuée et on passe à la feuille suivante ;
si AR51 égale "0" la copie des plages AJ27 à CA27 et AJ39 à CA39 soit effectuée et on passe à la feuille suivante ;
si AR63 égale "0" la copie des plages AJ27 à CA27, AJ39 à CA39 et AJ51 à CA51 soit effectuée et on passe à la feuille suivante ;
etc....
Donc, la condition pour laquelle la copie change de feuille, est si les cellules AR27, ou AR39, AR51, AR63,... égale "0". Le nombre de feuilles de données est variable ainsi que le nombre de lignes de données par feuille de données.
J'ai représenté dans la feuille "BDREE_DESIRE", le résultat désiré (exemple avec 4 feuilles de données).
Si vous pourriez modifier la macro " BDREE" afin qu'elle puisse remplir les nouvelles exigences, cela serait très apprécié.
En vous remerciant par avance pour votre précieuse aide.
Bonsoir Renaud,
Un essai en PJ si j'ai bien tout compris.
NB: J'ai enregistré en xlsb qui est de taille beaucoup plus petite.
C'est idem que xlsm mais n'est pas compatible d'Android.
Il vous suffit de le ré enregistrer en xlsm.
L'avantage c'est qu'on peut le poster sans le zipper. 228ko au lieu de 1250ko.