Salut. Tu es sûr que range("a1").currentregion va jusque F1? Attention que sans préfixe, Range("a1") pointe vers la feuille de calcul active.
Version imprimable
Salut. Tu es sûr que range("a1").currentregion va jusque F1? Attention que sans préfixe, Range("a1") pointe vers la feuille de calcul active.
Oui pas de soucis !
Pièce jointe 480395
Au départ de cette horrible erreur de conception, il n'y aura pas grand chose à faire pour te satisfaire sans usine à gaz. La sagesse voudrait que tu mettes tout à plat et que nous dise ce que tu souhaite faire sur le plan fonctionnel (pas dire "je veux copier a1 de la feuille 2 sur la feuill3, mais expliquer ce que "l'application" doit permettre de réaliser).
Continuer à monter du code sur ce brol, c'est édifier un château de cartes par grand vent.
Je vois ce que tu veux dire !
Mais l'idée c'est que j'ai dans un premier onglet toutes les entreprise repertoriés (qu'elles soient retenues ou pas).
Dans le deuxième onglet normalement je suis censé retrouvé toutes mes entreprises retenues.
Dans le 3ème onglet je veux juste recopié le nom le corps d'état et le nom des entreprise RETENUES pour pouvoir gerer enuite les date de devis etc
Même chose pour le 4ème onglet, je veux recopier ces mêmes infos pour calculer les données "économiques" du coup
Salut,
tes onglets 2 3 et 4 peuvent très bien se faire avec un simple tableau croisé dynamique filtré chacun :)
Voici en pièce jointe.
Il y avait un problème avec les cellules fusionnées en ligne 1.
J'ai changé les paramètres de Range.Sort
Pièce jointe 480417
Salut JP, tu vas bien? ;)
C'était un peu le but de mon intervention: voir ce que devait faire l'appli pour proposer une autre conception. Je n'ai pas regardé le fichier, ceci dit, mais une construction à coup de =feuil1!a1, c'est le casse-pipe assuré.
Si Walido souhaite une aide, il va falloir qu'il explique ce qu'il veut obtenir comme traitement de données.
Salut :coucou:,
j'ai fini un mandat la semaine dernière, j'attends des opportunités pour une nouvelle affectation :)
Oui, il faudra simplifier l'approche pour utiliser au minimum un code VBA dont la plus-value, à ce stade de ce qu'on sait du projet, ne semble que très limitée.
Bonjour Allan 06,
Je te remercie car grace a toi je n'ai plus de problème de bug de lenteur et mon classeur fonctionne parfaitement .
Sauf que j'ai un petit problème,
Qaund je met une MFC du genre
tous les cellules du classeur soient en bordure avec la formule =ESTTEXTE($A3) (comme ca des que y'a un nouveau lot j'ai automatiquement une ligne avec bordure sauf que quand j'apuie sur le bouton affecté a ta bordure cette MFC change directement et commence a ESTTEXTE($A100001) ?
Merci d'avance
Comme tu utilises une référence mixte (absolue sur la colonne et relative sur la ligne), Excel comprend ta formule de la même manière et interprète donc la mise en forme conditionnelle en utilisant un décalage de lignes relatif à la cellule active au moment de la création de la MFC.
Si, lorsque tu utilises ta formule =ESTTEXTE($A3) pour créer la mfc, ta cellule active est sur la ligne 20 par exemple, cela signifie qu'Excel doit tester la cellule en colonne A 17 lignes plus haut... Tu dois donc être très attentif à la cellule active au moment de la création de la mfc si tu utilises des références relatives.
Oui effectivement je l'ai déja fait sur une autre feuille et cela foncitonne parfaitement !
la j'ai la mfc qui se supprime complètement des que j'appuie sur Valider j'ai essayé plusieurs fois je suis sur, ce n'est pas une question de mauvaise formule , je crains que ce soit une ligne affecté à la macro de Allan06,
C'est bon une simple boucle imbriqué suffisait .
En tout cas merci a vous !Code:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Option Compare Text Sub Valider_Cliquer() Application.ScreenUpdating = False Dim NbYes As Integer Dim Debut, Fin As Long Sheets("ENT_BET").Activate NbYes = Application.WorksheetFunction.CountIf(Columns("F"), "Oui") Select Case NbYes Case Is > 0 'On nettoie la feuille retenue Sheets("Retenue").Activate Range("A3", "D1000").Clear Sheets("ENT_BET").Activate 'On demande un tri sur la colonne F Range("A2", Cells(Range("A2").End(xlDown).Row, "G").Address).Sort _ key1:=Range("F2"), order1:=xlDescending, dataoption1:=xlSortNormal, Header:=xlYes Debut = Columns("F").Find("Oui", , xlValues, xlWhole).Row Fin = Debut + NbYes - 1 Union(Range(Cells(Debut, 1).Address, Cells(Fin, 3).Address), Range(Cells(Debut, 7).Address, Cells(Fin, 7).Address)).Copy Sheets("Retenue").Activate Range("A3").PasteSpecial xlPasteValues End Select With Range("A3:D150") .HorizontalAlignment = xlHAlignCenter 'ou xlHAlignLeft ou xlHAlignRight .VerticalAlignment = xlVAlignCenter 'ou xlVAlignTop ou xlVAlignBottom End With For i = 3 To 100 'Pour bordure If Not IsEmpty(Cells(i, 1)) Then For j = 1 To 4 'Colonne Cells(i, j).Borders(xlEdgeLeft).LineStyle = xlContinuous Cells(i, j).Borders(xlEdgeRight).LineStyle = xlContinuous Cells(i, j).Borders(xlEdgeTop).LineStyle = xlContinuous Cells(i, j).Borders(xlEdgeBottom).LineStyle = xlContinuous Next End If Next End Sub
il serait tout de même pertinent, à mon avis, de travailler avec des tables de données. Elles permettent notamment de définir proprement les plages utilisées.
Le code Range("A3", "D100000").ClearContents laisse penser qu'on a placé la MFC sur 100000 lignes "pour avoir de la réserve"... Or, une MFC sur 100000 lignes, c'est 100000 calculs pour Excel. Si le tableau fait 5000 lignes, c'est 95000 calculs de trop... Inévitablement, ça ralentit le classeur. C'est notamment pour cela que je demandais d'en savoir plus sur la conception du classeur ;)
Comme je l'explique dans mon tuto, la MFC s'adapte à l'ajout et la suppression de lignes dans la table.
Le code Range("A3", "D100000").ClearContents sert uniquement à effacer le contenu d'une plage, il ne touche en rien à la mise en forme.
A voir sur la MFC saute en lançant le code.
- Suppression = .Delete
 - Effacement de tout = .Clear
 - Effacement du contenu = .ClearContents
 
Bonne journée :)
Ok. Mais de toute façon, l'utilisation d'une table de données permet d'en supprimer les lignes (et uniquement les lignes) sans avoir besoin prévoir "de la réserve". L'utilisation des tables de données a plus que largement simplifié la manipulation des données avec Excel et VBA. Dès lors, pourquoi s'en priver? ;)
Sur VBA, un tableau de données (Ctrl + L) est un objet.
Je ne voulais pas compliquer le code et éviter toute source d'erreur :)
Après, je suis d'accord avec toi, c'est une manière plus simple de travailler.
Une plage aussi. Je ne comprends pas bien ton argument :koi:
L'utilisation d'un listobject simplifie le code plutôt que le compliquer, et évite les erreurs ;)
C'est LA manière de travailler les données avec les versions actuelles d'Excel. On m'accusera de pensée unique mais je m'en fous. Travailler les données et les stocker autrement que dans des tables de données est un aujourd'hui une ineptie ;)
Si le tableau structuré venait à être transformé en plage de données, l'objet ne serait plus le même ?
.Showalldata ne fontionne pas avec les tableaux structurés :)
Complétement d'accord :) Je ne voulais juste pas mettre le fichier de walido en tableau structuré, j'aide, je ne fais pas :p