Code VBA pour recherchev sur des gros fichiers

Re mafraise,

Désolée j'avais pas vu votre message avant.

Oui j'ai voulu ces codes car c'est pour l'analyse de mes dossiers. Je m'explique.

Pour certain dossiers il me faut plusieurs recherchev d'où la demande de cette macro:

image

Mais ça voudra dire que pour ces dossiers j'aurais besoin de la macro pour la somme mais, il faudra que les valeur soit sur la ligne 31 pour la somme de la ligne 11 à la ligne 9. et je veux que la somme de la ligne 21 à la ligne 29 soit sur la ligne 32.

Mais pour 2 autres dossiers j'aurais besoin de cette macro ou la somme soit sur la ligne 21:

image

désolée pour la confusion.

OUI

Il y a un autre code ?

EDIT : ah oui je vois la demande somme : je laisse mafraise répondre, sinon je m'y attèlerai (j'ai aussi apprécié cette collaboration )

Par curiosité à quoi servent ces feuilles de plus de 15000 colonnes ?

Re 78chris,

J'ai aussi beaucoup aimé cette collaboration, vous êtes très fort tous les 2 et encore je vous remercie.

Alors mon travail dans ses fichiers consiste à faire beaucoup de saisie et mettre à jour des données.

Ensuite, dès que j'ai finit je les envoie à mon frère et par contre je ne sais pas comment il interprète les nombres.

Je sais juste que je dois les faire toutes les semaines, je n'ai pas plus d'infos malheureusement.

Re Lilie3887 , bonsoir 78chris ,

Je crois avoir compris mais pas sûr. En fait il y aura plusieurs dossiers.

  1. Pour certains dossiers, les classeurs auront tous des données entre la ligne 11 et la ligne 19 et les sommes (par colonne) de ces lignes devront être placées sur la ligne 31.
  2. Pour d'autres dossiers, les classeurs auront tous des données entre la ligne 21 et la ligne 29 et les sommes (par colonne) de ces lignes devront être placées sur la ligne 32.

Une petite question : y-a-t-il un 3° cas où le classeur aurait les deux blocs présents simultanément (lignes 11 à 19 et lignes 21 à 29) et dans ce cas, il faudrait faire deux sommes distinctes à mettre sur la ligne 31 pour le premier bloc et sur la ligne 32 pour le second bloc ?

Oui mafraise, tu as tout compris,

Il y aura effectivement le 3e cas où le classeur aura les deux blocs présents simultanément (lignes 11 à 19 et lignes 21 à 29), et il faudrait faire deux sommes distinctes à mettre sur la ligne 31 pour le premier bloc et sur la ligne 32 pour le second bloc

Re,

Je vais aller me coucher car il commence à se faire tard en métropole (1h30 du lundi de Pâques ). En plus avec le passage à l'heure d'été ici en métropole, nous avons perdu une heure de sommeil la nuit passée. Morphée m'appelle . Je m'y remettrai demain. Bonsoir .

Le changement d'horaire a été fait ce week-end?

Merci pour l'info, nous avons 6h de décalage maintenant.

Je vous souhaite une bonne nuit à demain.

Re,

Un essai pour sommer les blocs sur les classeurs.

  • Si le classeur comporte des données sur les lignes 11 à 19, on calcule la somme en ligne 31 sinon on efface la ligne 31.
  • Si le classeur comporte des données sur les lignes 21 à 29, on calcule la somme en ligne 32 sinon on efface la ligne 32.

Re, super ça fonctionne

Je suis très contente que vous aillez trouvé,

Il me reste plus que 2 demande à vous faire et après promis je vous embête plus

Est ce que dans le même principe vous savez comment supprimer toutes les données sauf les premières feuilles de chaque fichier, donc supprimer chaque valeur pour qu'il ne reste que les données de la ligne 1 à 9 de chaque fichier s'il vous plaît, le but et de recommencer avec de nouvelle donnée?

Re,

supprimer toutes les données sauf les premières feuilles de chaque fichier, donc supprimer chaque valeur pour qu'il ne reste que les données de la ligne 1 à 9 de chaque fichier

Tester le fichier joint...

Merci mafraise, pour tous.

N'étant pas à la maison je vous recontacte demain, je vous souhaite de passer un très bon lundi de pâques et encore merci pour tous

Bonsoir tous le monde,

Me revoilà pour énième demande

J'ai ce code VBA, il fonctionne mais il est tellement lent:

Sub CopierCollerMultiDestinations()
Dim fso As Object
Dim sourceFolder As String
Dim destinationFolder As String
Dim sourceFileName As String
Dim destinationFileName As String
Dim sourceWorkbook As Workbook
Dim destinationWorkbook As Workbook
Dim sourceWorksheet As Worksheet
Dim destinationWorksheet As Worksheet
Dim sourceSheetName As String
Dim destinationFilePath As String

' Create a FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")

' Specify the source and destination folders
sourceFolder = "C:\Users\POUR LES COPIER\SOURCE\"
destinationFolder = "C:\Users\POUR LES COLLER\DESTINATION\"

' Get the list of files in the source folder
Dim sourceFiles As Object
Set sourceFiles = fso.GetFolder(sourceFolder).Files

' Loop through the source files
For Each sourceFile In sourceFiles
If LCase(Right(sourceFile.Name, 5)) = ".xlsx" Then ' Check if it's an Excel file
' Open the source workbook
Set sourceWorkbook = Workbooks.Open(sourceFile.Path)

' Loop through the sheets in the source workbook
For Each sourceWorksheet In sourceWorkbook.Sheets
sourceSheetName = sourceWorksheet.Name

' Reset the destination file name
destinationFileName = Dir(destinationFolder & "*.xlsx")

' Loop through the destination files
Do While destinationFileName <> ""
' Open the destination workbook
destinationFilePath = destinationFolder & destinationFileName
Set destinationWorkbook = Workbooks.Open(destinationFilePath)

' Check if the sheet exists in the destination workbook
If WorksheetExists(destinationWorkbook, sourceSheetName) Then
' Copy values from source sheet and paste into destination sheet
sourceWorksheet.Rows("71:76").Copy
Set destinationWorksheet = destinationWorkbook.Sheets(sourceSheetName)
destinationWorksheet.Rows("20:26").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If

' Close the destination workbook
destinationWorkbook.Close SaveChanges:=True

' Get the next destination file
destinationFileName = Dir
Loop
Next sourceWorksheet

' Close the source workbook
sourceWorkbook.Close SaveChanges:=False
End If
Next sourceFile

' Clean up
Set fso = Nothing
End Sub

Function WorksheetExists(Workbook As Workbook, worksheetName As String) As Boolean
Dim ws As Worksheet
WorksheetExists = False
For Each ws In Workbook.Sheets
If ws.Name = worksheetName Then
WorksheetExists = True
Exit Function
End If
Next ws
End Function

Ce code, va copier les lignes de 71 à 76 dans les fichiers d'un dossier mais elle ne va pas copier la première feuille de chaque fichier ( elle va sauter chaque première feuille de chaque fichier), et elle va coller au fur et à mesure respectivement dans les feuilles de chaque fichier d'un autre dossier dans les lignes 20 à 26.

Je vous remercie énormément pour votre aide

Bonjour Lilie3887,

  • Je crois bien ne pas avoir vu votre réponse concernant le dernier code posté (celui pour la suppression des lignes). Est-il efficace ?
  • J'ai une interrogation sournoise qui s'immisce en moi et me tarabusque : Les codes que vous nous demandez de modifier, ne proviendraient-ils pas d'une AI comme ChatGPT par exemple (en tout cas ça y ressemble bigrement) ?

...

Votre dernière demande n'est pas claire pour moi. Que désirez-vous faire exactement ? Ceci :

  • on a dossier d1 avec n1 classeurs (dossier source)
  • on a un dossier d2 avec n2 classeurs (dossier destination)
  • on va considérer chaque classeur c1 du dossier d1. Pour chaque classeur c1, on va considérer chacune de ses feuille f1 (sauf la première).
  • pour chacune des feuilles f1, on va copier les lignes 71 à 76 qu'on va coller dans chacun des classeurs c2 du dossier destination.

Est-ce bien cela ?

Si oui, alors les copies successives vont écraser les copies faites précédentes et il suffira de copier les données d'un dernier classeur du dossier source. Les copies depuis les classeurs précédents sont inutiles puisqu’elles seront écrasées par les suivantes.

Par la suite d'autres questions viendront sans doute du style :

  • Dans quelle(s) feuille(s) d'un classeur destination va-t-on recopier les lignes ? une seule feuille (et donc comment savoir laquelle), dans toutes les feuilles (y compris la première ?), etc.
  • Recopie-t-on en valeurs, en formules, avec ou sans les formats ?

Bizarrerie : On copie 6 lignes (71 à 76) pour les copier dans 7 lignes (20 à 26) ??

Bonjour mafraise,

Tout d'abord merci pour le fichier de suppression, il fonctionne très bien

Effectivement, c'est un code qui vient de chat GPT car ne sachant pas comment faire auparavant je demandais à chat GPT les macro mais ce n'est pas aussi efficace que vos codes à vous, et j'ai mis le code pour que vous comprenez ma demande à partir de cette macro

Je m'explique sur ce que je souhaite comme code:

Nous avons un dossier que je vais appeler "source" dans ce dossier j'ai pas mal de fichier et dans chaque fichier j'ai environ 20 feuilles et les premières feuilles de chaque fichier correspondant à des données qu'il faudra ignoré dans le code.

Ensuite j'ai un autre dossier que je vais appeler "destination" et dans ce dossier j'ai aussi plusieurs fichiers mais moins de fichiers que dans le dossier "source" car 1 fichier dans le dossier de "destination" peut regrouper les feuilles de 3 fichiers qui se trouve dans le dossier "source" (sauf la première feuilles de chaque fichier qui se trouve dans le dossier source qu'il faudra ignorer)

Le but est de copier les lignes de 71 à 76 à partir de la deuxième feuille de chaque fichier du dossier source et de coller dans les ligne de 20 à 25 dans toutes les feuilles des fichiers du dossier de destination .

J'espère que vous avez pu me comprendre

Re,

Oui c'est plus clair. Il y a encore des points à préciser.

dans chaque fichier j'ai environ 20 feuilles et les premières feuilles de chaque fichier correspondant à des données qu'il faudra ignorer dans le code.

C'est à dire qu'on ignore toutes les feuilles du classeur source sauf la dernière. On copie les lignes 71 à 76 de la dernière feuille.

Bon ! Mais où les coller ces lignes ? Dans quel(s) classeur(s) de destination ? sur quelle(s) feuilles() ?

Et quand on passera au second classeur, le collage écrasera les lignes précédemment copiées , non ?

A aucun moment vous n'évoquez de noms de feuilles (ni dans les classeurs source ni dans les classeurs destination) !

Voila des fichiers qui ressemble à mes fichier, les 4 fichiers ( essaie-2-valeurs, essaie-3-valeurs, essaie-4-valeurs, essaie-5-valeurs) sont dans un dossier appelé source.

le Fichier de "résultat -de-essaie2-a-5" se trouve dans un autre dossier appelé résultat.

Dans les fichiers essaie, il faut ignoré les feuilles appelé BASE et copié les lignes de 71 à 76 et les copié dans le fichier résultat dans les ligne 20 à 25.

les noms des feuilles dans les fichiers essaie correspondent au nom des feuille qui se trouve dans le fichier résultat.

Donc tous les fichiers à coller se suivent.

Est ce que avec ses fichiers mes explications sont plus clair?

11essaie-3-valeurs.zip (260.52 Ko)
17essaie-4-valeurs.zip (218.42 Ko)
12essaie-5-valeurs.xlsx (159.17 Ko)
12essaie-2-valeurs.zip (260.46 Ko)

Bonjour

Est-on encore sur une demande d'aide ou bien plutôt de prestation de service gratuite ?

Re,

Est ce que avec ses fichiers mes explications sont plus clair? 

Oui c'est plus clair.

Juste une dernière confirmation : il n'y a donc qu'un seul fichier résultat qui contient toutes les feuilles de mêmes noms que tous les des classeurs sources ?

un dernier cas : si la feuille du classeur source n'existe pas dans le classeur destination que fait-on ?

Il y a plusieurs fichiers dans résultats et d'autres fichier dans source,

Mais faut savoir que chaque feuille dans les fichiers résultats à sa correspondance dans les fichier source, et il se suivent c'est à dire que dans le fichier source:

- mon premier fichier s'appelle essai 2

- mon deuxième fichier s'appelle essai 3

- mon troisième fichier s'appelle essai 4

- mon quatrième fichier s'appelle essai 5

Dans mon classeur résultat, le premier fichier va s'appeler résultat 2 3 4 5 et vont correspondre à ses fichier

Ensuite dans mon dossier source:

- mon cinquième fichier s'appelle essai 6

- mon sixième fichier s'appelle essai 7

- mon septième fichier s'appelle essai 8

- mon huitième fichier s'appelle essai 9

Dans mon classeur résultat, le deuxième fichier va s'appeler résultat 6 7 8 9 et vont correspondre à ses fichier et ainsi de suite jusqu'à la fin.

Si la feuille du classeur source n'existe pas dans le classeur destination on passe à la feuille suivante ( mais j'aimerais que la macro soit rapide) donc vous décidez ce qui serait le mieux pour que ça puisse fonctionner, car en général dans le dossier source il n'y aura que les feuilles "BASE" (les premières feuilles de chaque fichier) qui n'existera pas dans le classeur destination

Re,

Bon, je dois avoir toutes les billes, je regarderai ce soir.

Rechercher des sujets similaires à "code vba recherchev gros fichiers"