trier des donnees par colonne a l'ouverture d'un classeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

rainbow69006

XLDnaute Occasionnel
Bonjour

J'ai un petit souci.

(voir fichier joint)

J'ai un tableau qui est comme le tableau vert. mes cellules sont soit "vides" (de la forme =IF(AO7="","",AO7)) soit il y a quelque chose d'ecrit a l'interieur.

Je souhaiterais obtenir ce qu'il y a dans mon tableau jaune.
C'est a dire avoir un tri par colonne (avoir au debut tout ce qui est ecrit) qui soit remis a jour a l'ouverture de mon classeur.

Merci de votre aide
 

Pièces jointes

Re : trier des donnees par colonne a l'ouverture d'un classeur

Bonsoir,
pas facile de déterminer une solution fiable avec ton exemple...
Sur ton fichier, un tri sur la colonne AO suffirait, mais je subodore que ce ne peut être une solution qui marcherait à tous les coups
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

RE

En fait je souhaite que le tableau vert reste comme il est. mais qu'il y est un tableau jaune qui soit cree.

En ce qui concerne les formules celle ci doivent rester dans le tableau vert..

Je vais donner un exemple:
imaginon qu'en A05 j'ecrive "super" alors ce super est ecrit dans la cellule AP5.

Il devra avoir a chaque ouverture du classeur une mise a jours du tableau jaune
le mot "super" devra ce retrouver dans la premiere colonne de mon tableau jaune (Mais il ne devra pas y avoir de cellules vides avant)

N'hesitez pas a me reposer des questions si ce n'est pas clair
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

Salut Rainbow69006,

Essaye ce code :
Code:
Private Sub Workbook_Open()
  Dim Col As Integer, Lig As Long, DerLig As Long
  For Col = 1 To 33
    For Lig = 2 To 595
      ' Colonne AP = 42 ème / G = 7ème
      If Cells(Lig, 41 + Col) <> "" Then
        DerLig = Cells(Rows.Count, 6 + Col).End(xlUp).Row
        Cells(DerLig + 1, 6 + Col) = Cells(Lig, 41 + Col)
      End If
    Next Lig
  Next Col
End Sub

Et dis moi 😉
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

Bonjour

Ci joint le fichier avec une macro pour copier les données du tableau vert dans le tableau jaune.
La macro recherche la colonne.
Une fois transférées les données sont triées.

JP
 

Pièces jointes

Re : trier des donnees par colonne a l'ouverture d'un classeur

Bonjour Bruno

Ton code me parait parfais et surtout simplifie au maximum

Cependant j'ai 2 soucis:
- Il faudrait que le tableau jaune (G2:AM595) soit vider avant que ton code demarre. En effet sinon a chaque fois que l'on ouvre le fichier on a les donnees precedentes et la mise a jour qui viens ce rajouter (moi je ne veu que la mise a jour).

- apres j'ai un autre petit souci c'est que avant ton code j'ai cela:

Private Sub Workbook_Open()
Sheets("DONNEE").PivotTables("tcd").PivotCache.Refresh
End Sub

Je souhaiterais faire qu'une fois que l'action ci dessus est realiser sa demarre ton code.

Mais je ne peu pas ecrire cela: alors que puis ecrire?

Private Sub Workbook_Open()
Sheets("DONNEE").PivotTables("tcd").PivotCache.Refresh
End Sub

Private Sub Workbook_Open()
Dim Col As Integer, Lig As Long, DerLig As Long
For Col = 1 To 33
For Lig = 2 To 595
' Colonne AP = 42 ème / G = 7ème
If Cells(Lig, 41 + Col) <> "" Then
DerLig = Cells(Rows.Count, 6 + Col).End(xlUp).Row
Cells(DerLig + 1, 6 + Col) = Cells(Lig, 41 + Col)
End If
Next Lig
Next Col
End Sub



Merci de ton aide
 
Dernière édition:
Re : trier des donnees par colonne a l'ouverture d'un classeur

Bonsoir

Si on efface le tableau vert, le tableau jaune sera vide !

Concernant le code envoyé il suffit de le mettre dans un module avec un autre nom
et faire un call sur cette procédure.

JP
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

Re bonsoir.

Juste une question comment on fais un call?

J'ai fais cela mais c'est pas ca!!

Dans le module1 j'ai ecrit:
Private Sub Creationliens()
Sheets("DONNEE").Range("G2:AM595").ClearContents
Dim Col As Integer, Lig As Long, DerLig As Long
For Col = 1 To 33
For Lig = 2 To 595
' Colonne AP = 42 ème / G = 7ème
If Cells(Lig, 41 + Col) <> "" Then
DerLig = Cells(Rows.Count, 6 + Col).End(xlUp).Row
Cells(DerLig + 1, 6 + Col) = Cells(Lig, 41 + Col)
End If
Next Lig
Next Col
End Sub

Dans this workbook j'ai ecrit:
Private Sub Workbook_Open()
Sheets("DONNEE").PivotTables("tcd").PivotCache.Refresh

Creationliens

End Sub
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

Bonjour rainbow69006


Il faut supprimer private si la macro n'est pas dans le même module.

Private Sub Creationliens()
Sub Creationliens()

et écrire dans la macro
Call Creationliens , à préférer à Creationliens
L'ajout de call permet d'attirer l'attention lors de la lecture de la macro.
Si on passe des arguments il faut impérativement Call

JP
 
Re : trier des donnees par colonne a l'ouverture d'un classeur

Re bonjour JP14

Eh bien ecoute cela marche si quand j'ouvre mon fichier je me retoruve sur la page donnee.

Mais si j'ouvre mon fichier et que je me retrouve sur une autre page et bien cela ne met pas a jours.

Cela lance bien ce qui est en gras mais

Private Sub Workbook_Open()
Sheets("DONNEE").PivotTables("tcd").PivotCache.Refresh

Call Creationliens

End Sub

mais le macro creationsliens n'est pas lancer

(module1)


Sub Creationliens()
Sheets("DONNEE").Range("G2:AM595").ClearContents
Dim Col As Integer, Lig As Long, DerliG As Long
For Col = 1 To 33
For Lig = 2 To 595
' Colonne AP = 42 ème / G = 7ème
If Cells(Lig, 41 + Col) <> "" Then
DerliG = Cells(Rows.Count, 6 + Col).End(xlUp).Row
Cells(DerliG + 1, 6 + Col) = Cells(Lig, 41 + Col)
End If
Next Lig
Next Col
End Sub
 
Dernière édition:
Re : trier des donnees par colonne a l'ouverture d'un classeur

mm non mais en fait le probleme viens de ce code:

En effet si j'ecris ce qu'il y a ci dessous eh bien quand j'ouvre le classeur si je me retrouve sur la page Donnee sa marche mais si je ne me retrouve pas sur la page donnee sa ne marche pas. bizarre. Pareil si j'essai de lancer le code manuellement en me trouvant sur la page donnee sa marche mais si je suis sur une autre page cela ne marche pas.

A tu une solution? merci

Private Sub Workbook_Open()

Sheets("DONNEE").Range("G2:AM595").ClearContents
Dim Col As Integer, Lig As Long, DerliG As Long
For Col = 1 To 33
For Lig = 2 To 595
' Colonne AP = 42 ème / G = 7ème
If Cells(Lig, 41 + Col) <> "" Then
DerliG = Cells(Rows.Count, 6 + Col).End(xlUp).Row
Cells(DerliG + 1, 6 + Col) = Cells(Lig, 41 + Col)
End If
Next Lig
Next Col

End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour