Valeur des noms de fichiers dans une cellule : comment créer une boucle
Bonjour à tous et à toutes,
J'ai adapté un programme à mes fichiers mais je n'arrive pas à définir une boucle . Je m'explique (enfin je vais essayer) J'ai un fichier source (tableau 2024). Si la colonne L contient une valeur, je copie les colonnes J à A , j'ouvre le fichier dont le nom se trouve sur la même ligne en colonne I et je copie les données. Je sauvegarde et ferme le fichier destination (Limoges). ... Bien sûr, il faut que le fichier destination soit fermé pour ne pas perdre les données si quelqu'un d'autre travaille dessus (msgbox fait manque la sortie sans effacer ) et qu'il soit dans le même répertoire que le fichier source (msgbox fait). Jusqu'ici tout va bien.
Bonjour Eosine et
Ou est ce fameux code dans lequel vous n'arrivez pas à définir une boucle
Je n'en vois pas dans lequel vous ouvrez le fichier de destination !?
Nota : Attention votre fichier 2024 semble corrompu, dans VBA Project il affiche des feuilles qui n'en sont pas...
A+
Bonjour BrunoM45,
J'ai repris le fichier TABLEAU 2024. J'ai tellement testé de possibilités que je n'avais pas remarqué les feuilles manquantes. Je suis repartie sur une base plus saine
Le programme en question est sur la feuille archive (Private Sub ENVOI_Click() ). Je n'arrive pas à boucler sur les 9 feuilles des villes mais juste sur une (fich1 = ActiveWorkbook.Name fich2 = "LIMOGES.xlsm") Comment déclarer la variable car elle est déterminer en fonction de la cellule J non vide.
Merci tout de même d'avoir pris la peine de regarder mon post.
@+
Oups avec le nouveau fichier c'est mieux. Non?
Bonjour à tous,
Bien, je pense que mon fichier est tellement nul que personne ne peut m'aider. Je viens de corriger des incohérences et continuer le programme.
Ce que j'aimerai faire :
- Vérifier si la colonne L est non vide, cela valide les données entrées dans les col de A à I (OK dans le code qui fonctionne)
- Prendre la valeur de L et filtrer les colonnes répondant aux conditions 1 et 2 'il ne prend qu'une ligne pas toutes celles répondant aux deux critères)
- Copier les colonnes et lignes filtrées J ai mis entirerow mais comme je ne veux pas qu il recopie L je vais devoir changer
- Prendre valeur I et ouvrir le classeur correspondant réussi pour un classeur mais pas pour tous
- Coller le tout sur la dernières lignes du classeur destination OK pour un classeur
- Sauvegarder et fermer le classeur destination OK pour un classeur
- Couper coller la ligne sur l'onglet archive du fichier source OK pour un classeur
- Recommencer l'opération tant qu'une cellule L est cochée sur tout les classeur destinations. pas encore fonctionnel
J'ai essayé de nettoyer encore les données pour rester dans la discrétion et certaines données étaient toujours erronées dans le code. J'ai rajouté la suppression des doublons (valeur col 1 à 3) dans le workbook.open du classeur de destination. Tous les classeurs destination sont identiques dans leur forme et code. J'ai également mis des commentaires dans le vba pour expliquer au maximum les lignes de code.
Voilà, j'espère que quelqu un pourra m'aider. Si le code est vraiment nul, dites le moi n'hésitez pas car on apprend de ces erreurs.
Je vous souhaite de bonnes fêtes
Eosine
Bonjour,
J'ai essayé de contourner mon problème de boucle est répétant le programme de transfert pour chaque classeur . J'aimerai qu'Excel teste si la cellule est non vide avant de le lancer mais il ne veut pas et lance quand même la Macro (feuille archive). Merci. Eosine
Sub CommandButton1_Click()Dim Cell As Range
Dim lig As Long
Dim col As String
Dim NbrLig As Long
Dim NumLig As Long
col = "L" ' colonne données non vides à tester'
NumLig = 1 'le N° de la 1er ligne de données en comptant la ligne 1 = 0
'Sélectionne l'onglet ARCHIVE
With Sheets("ARCHIVE") 'feuille source'
NbrLig = .Cells(65536, col).End(xlUp).Row
For lig = 2 To NbrLig 'n° de la 1ere ligne de données'
If .Cells(lig, col).Value <> "" Then 'ligne teste colonne L non vide c'est là que je m embrouille
NumLig = NumLig + 1
For Each Cell In Range("i2:i150")'colonne à tester
If Cell.Value = "LIMOGES" Then
Call LIMOGES
End If'
If Cell.Value = "PARIS" Then
Call PARIS
End If
If Cell.Value = "LONDRES" Then
Call LONDRES
End If
If Cell.Value = "MARSEILLE" Then
Call MARSEILLE
End If
Next Cell
NexT
End With
End sub