De l'aide pour une macro boucle

titi7500

XLDnaute Junior
Bonjour j'ai un petit soucis, ne sachant pas utiliser la fonction vba d'excel, je n'arrive pas à créer une macro répondant à mon problèmes.

Je vous explique rapidement.

J'ai un fichier excel avec dedans un onglet qui me sert d'extraction et j'ai plusieurs onglet . Chaque onglet porte le code que l'on peut trouver dans la colonne B de l'onglet extraction.

Ce que je souhaite c'est que les donnés de l'extraction se copie colle de la ligne A à la ligne D dans l'onglet en fonction de la colonne B et que la macro boucle se stop quand je n'ai plus rien dans la colonne B.

Il y a une extraction mensuelle on peut atteindre facilement les 10k lignes dans l'extraction

Ci joint un extrait de mon fichier excel.

Une petite aide de votre part serait très apprécié.

Merci par avance.
 

Pièces jointes

  • test.xlsx
    12.2 KB · Affichages: 34

titi7500

XLDnaute Junior
Merci beaucoup je peux le regarder que demain et oui je vais faire comme tu as dit et je vais réussir à progresser :).

Par contre j'ai une question sur la macro dispatch2 quand tu le lance il faisait plusieurs copie des lignes pour quelle raison? Parce que normalement la macro doit s'arrêter quand ya plus de ligne à copier
 

Calvus

XLDnaute Barbatruc
Bonjour,

Voici qui devrait résoudre ton problème.
Dis moi.
VB:
Sub Dispatch3()
Dim i As Integer, j As Integer, k As Integer, l As Integer, derligne As Range 'Déclaration des variables
Set derligne = Feuil1.Range("B" & Rows.Count).End(3).Rows
If MsgBox("Voulez vous lancer la macro ?", vbYesNo) = vbNo Then Exit Sub 'Si la réponse est non, on sort de la procédure
For i = 2 To Sheets.Count 'Pour i= 2 jusqu'au nombre de feuilles du classeur
Sheets(i).[A9].CurrentRegion.Clear  'Pour chaque feuille, on supprime tout ce qu'il y a autour de la cellule A9
        For l = 2 To derligne.Row
        If Cells(l, 2) Like Sheets(i).Name Then 'si la cellule (i,2), donc B2 est égale au nom de la feuille, alors
            For j = l To Range("B" & Rows.Count).End(3).Row 'pour j=1 jusqu'à la dernière ligne vide en remontant du bas
                If Cells(j, 2) Like Sheets(i).Name Then 'si la cellule (j,2), donc A2 est égale au nom de la feuille, alors
                    If Sheets(i).Range("A9") = "" Then 'si sur la feuille concernée la cellule A9 est vide alors
                        Sheets(i).Range("A9") = Cells(j, 1) 'on écrit les données de la 1ère feuille en A9
                            For k = 1 To 26 'pour k de 1 à 26
                                Sheets(i).Range("A" & Rows.Count).End(3).Rows(1).Offset(, k) = Cells(j, k + 1) 'on écrit la suite sur les 26 colonnes
                            Next
                    Else 'sinon
                        Sheets(i).Range("A" & Rows.Count).End(3).Rows(2) = Cells(j, 1) 'on écrit à partir de la dernière cellule vide trouvée
                            For k = 1 To 26
                                Sheets(i).Range("A" & Rows.Count).End(3).Rows(1).Offset(, k) = Cells(j, k + 1)
                            Next
                    End If
               End If
            Exit For
            Next
        End If
        Next l
Next 'et on recommence pour la ligne suivante
MsgBox "Opération terminée"
End Sub

A+
 

titi7500

XLDnaute Junior
Hello :) alors j'ai testé sur mon fichier test que j'avais mis sur ce site et ca marche. Par contre que je le test sur un autre fichier j'ai un message de débogage qui vient pour la ligne "Set derligne = Feuil1.Range("B" & Rows.Count).End(3).Rows" En fait je comprends pas pourquoi dès le moment ou j'importe la macro sur un autre fichier cette derniere ne fonctionne pas ...
 

ChTi160

XLDnaute Barbatruc
bonsoir titi7500
peut etre un probleme de nom de feuille “Feuil1” CodeName apparemment qui n existe peut etre pas dans le nouveau fichier ou dont les donnees ne correspondent pas a ce que recherche la macro , dans le nouveau fichier.
bonne fin de journee
Amicalement
jean marie
 

Staple1600

XLDnaute Barbatruc
Re

Comme spécifié dans mon précédent message
C'est une macro à vocation illustrative
En régle générale, derligne est une variable qui sert à renvoyer un numéro de ligne et pas une plage de cellule.

Je laisse Calvus confirmer mon propos.

NB: Débutant ou pas l'important, est d'être curieux et de savoir lire ;)
Ensuite une habile utilsation des moteurs de recherche (du forum et du web) te permettra de rapidement progresser en VBA.
 

Staple1600

XLDnaute Barbatruc
Re

relire mon précédent message (je l'ai édité)
hello :) c'est ce que je me suis dit mais dans le fichier test il n'y a pas non plus de feuil1 (ils sont tous renommés) et pourtant sur le fichier test il fonctionne ...

Feuil1 dans le code VBA, correspond au codename de la feuille.
(mais cela on te l'a déjà dit par conséquent tu aurais te précipiter dans un moteur de recherche pour comprendre ce qu'est le codename d'une feuille Excel)
 
Dernière édition:

cp4

XLDnaute Barbatruc
d'accord par contre je ne comprend pas pourquoi la macro fonctionne sur le fichier test mais ne fonctionne pas sur le fichier réel
Bonsoir, titi7500, calvus, staple1600:)

C'est parce que nos amis n'ont pas une boule de cristal pour deviner comment est constitué ton fichier réel
Je suis sûr que tu vas trouver la faille avec un peu de persévérance.
CodeName.jpg

à 2 jours près, bonne année!;)
 

Calvus

XLDnaute Barbatruc
Bonsoir à tous,

Je laisse Calvus confirmer mon propos.

Mon ami Staple me fait beaucoup trop d'honneurs.
Non seulement je confirme son propos, mais je le remercie également de sa remarque fort pertinente.

Bien qu'ayant beaucoup progressé dans les déclarations, ces dernières restent parfois un mystère. De moins en moins obscur tout de même.

PS: Je me souviens du temps (pas si lointain) où les réponses des forumers ne m'étaient que du chinois mêlé à de l'austro-hongrois ! :D J'imagine que c'est le cas de titi7500.
 

titi7500

XLDnaute Junior
oui j'ai trouvé mon code name hahah c'etait la 365 lol. Par contre ayant changé cela j'ai eu le meme probleme. puis j'ai fais comme staple et j'ai eu un bug " erreur de compilation qualificateur incorrect" j'ai ajouté ceci :
Sub dispatch3()
Dim i As Integer, j As Integer, k As Integer, l As Integer, derligne As Long 'Déclaration des variables
derligne = Feuil365.Range("B" & Rows.Count).End(3).Rows
If MsgBox("Voulez vous lancer la macro ?", vbYesNo) = vbNo Then Exit Sub 'Si la réponse est non, on sort de la procédure
For i = 2 To Sheets.Count 'Pour i= 2 jusqu'au nombre de feuilles du classeur
Sheets(i).[A10].CurrentRegion.Clear 'Pour chaque feuille, on supprime tout ce qu'il y a autour de la cellule A9
For l = 2 To derligne.Row

j'ai changé le titre aussi comme sur la réponse de staple le probleme est le meme. et j'ai l'impression que j'ai un soucis au niveau de ce que j'ai mis en gras.
 

Staple1600

XLDnaute Barbatruc
Re
Bonsoir cp4, Calvus

Ne cherche plus dans le moteur, la réponse* se trouve dans la photo affichée par le phtographe cp4 dans le message#42 confirmant mes propos du message#41
mais subséquemment infirmant les siens ;)
Je suis sûr que tu vas trouver la faille avec un peu de persévérance.
(car avec l'ima


(* propos du codename)
 

Discussions similaires

Réponses
12
Affichages
242
Réponses
3
Affichages
421
Réponses
21
Affichages
283

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16