Macro pour déplacer données dans onglets

biafox

XLDnaute Nouveau
Bonjour !
Etant incapable de créer une macro, par manque de connaissances, j’en fait appel à l’un d’entre vous pour m’aider à en créer une qui permet de générer des déplacements de données en colonnes dans deux deux onglets différents.
Je pense que pour une personne maitraisant VBA, ça ne doit pas être compliqué.
Ma demande est la suivante :
Après avoir fait des saisies sur l’onglet principal, que je puisse de manière automatique envoyer les colonnes ( HV11 :HV29 ) (HX11 : HX29) (HZ11 :HZ29 )….jusqu’à la dernière colonne QJ11 :QJ39 dans l’onglet nommé « colonnes ».
Dans l’onglet colonnes, il faut placer la première colonne déplacée (hv11 :hv29) à K11 :K30, laisser une cellule vide et placer la colonne suivante en dessous, laisser une cellule vide et placer la colonne suivante en dessous et ainsi de suite.
La cellule K1 dans l’onglet « colonnes » définit la date de saisie des données et chaque fois que l’on active la macro, il faut mettre les colonnes au même endroit et déplacer les précédentes vers la colonne de droite.
Dans le même temps, déplacer dans l’onglet « couples », selon le même principe, la première valeur de la colonne HV10 avec HV11, laisser deux cellules vides, ensuite HV10 avec HV12, laisser deux cellules vides, ensuite HV10 avec HV13 etc…en formant les couples possibles de l’ensemble du tableau allant de HV10 à QJ29. Arrivé au dernier couple HV10 et Qj29, on recommence en partant de HV12 avec HV13 et ainsi de suite…
Dans le fichier joint, j’ai préparé les premiers emplacement pour les différents déplacements.

Merci d’avance à toute personne pouvant m’aider à avancer.
 

Pièces jointes

  • 01-SAISIE DONNEES TABLEAUX.xlsx
    146.1 KB · Affichages: 106

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Bonjour biafox, le forum,

J'ai réalisé 2 macros, 1 pour les colonnes et 1 pour les couples.
Les 2 peuvent être réunies en une seule évidemment.
Je pense que la première correspond à ta demande.
Par contre, pour la seconde j'ai un doute. Je ne suis pas certain que toutes les données soient bien mises en couple.
A toi de vérifier.

A te relire

Martial
 

Pièces jointes

  • 01-SAISIE DONNEES TABLEAUX.xlsm
    174.5 KB · Affichages: 186
  • 01-SAISIE DONNEES TABLEAUX.xlsm
    174.5 KB · Affichages: 161
  • 01-SAISIE DONNEES TABLEAUX.xlsm
    174.5 KB · Affichages: 173

biafox

XLDnaute Nouveau
Re : Macro pour déplacer données dans onglets

Salut yahoo !
Je te remercie d'avoir pris la peine de regarder ma demande et d'y avoir apporté une réponse.
Pour la première partie tout semble convenir et correspond exactement à mon attente.
Pour la partie couplés, tu as bien compris le principe, mais il fallait en fait juste continuer à former des couples comme si toutes les colonnes étaient en file...c'est à dire que lorsqu'on marie la première cellule avec les suivantes jusqu'à la dernière cellule de la dernière colonne...de la seconde cellule de la première colonne jusqu'à la dernière cellule de la dernière colonne, et ainsi de suite, en continu d'une colonne à l'autre. Pour économiser des cellules en affichage dans l'onglet colonne, on peut se contenter de ne laisser qu'une cellule vide de séparation entre chaque couples.
Franchement tu m'aides beaucoup et je t'en remercie beaucoup.
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Salut,

Ce n'est pas yahoo mais yaloo, en ce moment yahoo ne se porte pas très bien, je ne voudrais pas être associé à une entreprise que risque de déposer le bilan dans peu de temps !!!!!:eek:

Bon concernant ton fichier et la seconde partie, c'est bien ce qu'il me semblait. Je ne faisais que des couples par colonnes et pas pour toutes les colonnes.

Je suis en train de travailler dessus, si j'y arrive je te poste le résultat.

A+
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Re,

Bon, j'ai laissé en 2 macros.

La première, je n'y ai pas touché, puisqu'elle répondait à ta demande.

La seconde m'a posé pas mal de souci. Pour finir, j'ai utilisé les array, mais comme je les découvre en ce moment, ce n'est peut être (surement) pas optimisé au maximum.

Sur mon PC il faut environ 2 minutes pour faire les couples. J'ai mis un bip à la fin de la procédure cela permet d'aller prendre le café, on est prévenu quand ça bip :D ;)

Comme il y a près de 4 million de données (séparées de 2 lignes) et qu'Excel ne compte que 1048576 lignes, j'ai été obligé de mettre les données sur plusieurs colonnes.

J'espère avoir répondu à ta demande.

Si une personne pense qu'il y a moyen d'améliorer (et il y a surement), de raccourcir le code ou son temps d'exécution, surtout qu'elle n'hésite pas à me faire part de ses idées.

A te relire

Martial
 

Pièces jointes

  • 01-SAISIE DONNEES TABLEAUX.xlsm
    183.3 KB · Affichages: 98
  • 01-SAISIE DONNEES TABLEAUX.xlsm
    183.3 KB · Affichages: 104
  • 01-SAISIE DONNEES TABLEAUX.xlsm
    183.3 KB · Affichages: 101

biafox

XLDnaute Nouveau
Re : Macro pour déplacer données dans onglets

Re,

Je ne sais pas ce que tu as comme ordi, mais alors le miens à mis au moins 15 min pour donner le résultat.

Effectivement, le nombre de couples générés est assez important.
Le fait d'avoir un affichage réparti sur plusieurs colonnes n'est pas adéquat pour mes besoins d'autant plus que j'ai un temps d'attente en terme de calcul d'environ 15 min, j'ai seulement le temps de boire un café mais aussi d'aller faire mes courses ! :)
Du coup, la seule solution est de me restreindre et de rester sur la première ébauche que tu as fait en tenant compte simplement des colonnes une à une.
Je suis pas très calé en informatique, d'où ma présence ici sur ce site, mais je me demandais s'il était possible d'envoyer les données dans une base de données qui pourrait intégrer l'ensemble des couples sans avoir le soucis de limitation comme sur excel et dont l'index principal serait la date.

Mais, en tout cas, je te remercie pour ton aide.
Heureusement qu'il y a encore des gens qui comme toi, donne un coup de main aux uns et aux autres !
Encore merci
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Re,

Mon PC n'a que 3 mois donc il a ce qu'il faut là où il faut. :eek:

Pour ce qui est d'envoyer dans une base de données, je ne vois pas trop, peut être Access mais alors je n'y connais rien du tout.
Ou alors peut être envoyer dans un fichier txt, mais là cela risque de ne pas être trop "lisible", sachant qu'environ 4 million de données, je ne suis pas sur que cela soit très lisible.

Peut être qu'un autre XLDien va venir à la rescousse avec une macro plus rapide. Il y a des Kadors sur le forum, donc il ne faut pas désespérer.

A plus, si j'ai une illumination je te fais signe.

Martial
 

biafox

XLDnaute Nouveau
Re : Macro pour déplacer données dans onglets

Salut Yaloo
Je reviens un peu vers toi pour un complément d’aide, enfin si cela est dans tes cordes et dans la mesure de tes disponibilités bien sûr…
Avant de poster ce message, j’ai bien essayé ici et là à travers des tutos pour programmer en VBA mais sans succès, c’est plutôt frustrant de s’en remettre aux autres, je trouve.
Du coup, je t’expose ce dont j’ai besoin :
Dans l’onglet colonnes, je voudrais avoir le nombre de cellules coloriées en partant de la cellule L10 jusqu’à la cellule UA10, pour chacune des lignes générées par la macro des tableaux. Sur le fichier joint en exemple, j’ai supprimé toutes les lignes volontairement pour alléger le fichier car il dépasse largement les 10Mo.
Dans l’onglet « couples », je voudrais connaître l’état du couple en fonction du fait qu’il soit colorié ou pas, en gros par exemple si le couple n’est pas colorié, l’état sera de « 0 », si l’un des deux est colorié, l’état sera de « 1 », et si les deux sont coloriés l’état sera de « 2 », le tout en partant de la ligne L13 jusqu’à la ligne UA13 et pour tous les couples générés par la macro « couples ».
Ces états de couples faudrait qu’ils soient indiqués dans les cellules de la colonne H, pour le plus petit état de la ligne et la cellule « I », pour le plus grand état de la ligne.
Ces états peuvent varier chaque fois que je génère de nouveaux couples, donc soit les états se mettent à jour automatiquement chaque fois que de nouvelles cellules sont coloriées, soit par activation d’une macro.
Pour quelqu’un qui maitrise la programmation VBA, ça doit être aussi simple que de jouer à la marelle, ce qui est loin d’être mon cas…mais ce qui pourrait peut- être compliquer les choses, c’est que je voudrais une fois les états définis pour l’ensemble des couples, pouvoir récupérer sur un onglet « Listes états01 », tous les couples de la colonne K, qui ont pour caractéristiques d’êtres soit à l’état 0 ou à l’état 1.
Par exemple, si l’on prend le premier couple de la colonne K qui est 1-2, l’état précédent était de 0 mini et de 2 maxi, donc correspond pas à l’état 0 ou 1, ce couple on le retiens pas…le couple suivant 2-8, précédemment il avait pour état 0-1, il correspond à l’état que nous cherchons, donc on le retiens et on l’envoie dans l’onglet « Liste des états01 »…et ainsi de suite.

je serai vraiment comblé de recevoir un peu d'aide d'un connaisseur...
 

Pièces jointes

  • A-01-SAISIE DONNEES TABLEAUX.xlsm
    161.8 KB · Affichages: 106

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Bonjour biafox, le forum,

Tu ne devrais pas uniquement me relancer, tout le monde peut t'aider, c'est le but des forums ;).
Attention, ce n'est pas une critique négative, il faut bien apprendre, je pourrais très bien ne pas être présent et si qq'un passe par ton post, il ne pourrait pas réagir car tu t'adresse à moi, donc en faisant cela, tu ne t'aide pas toi-même.
De plus, je peux te fournir une solution, mais elle ne sera pas forcément la meilleure ou pas celle qui te conviendra.

En ce qui concerne ton problème, pour l'onglet "colonne" :
1 - Est-ce toi qui rentre les données en ligne 4, 5 et 6 ?
2 - Ces données sont-elles toujours les mêmes et toujours 1, 2 et 3 ?

idem pour l'onglet "couple"

A te relire

Martial
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Re,

Voila déjà pour l'onglet "Colonne" :

VB:
Sub Colonne()
WsCl.Activate
Dim DerL As Long, DerC As Long, c As Long, i As Long, t As Long
DerL = Cells(Rows.Count, 11).End(xlUp).Row
DerC = Cells(4, Columns.Count).End(xlToLeft).Column
For i = 10 To DerL
  For c = 11 To DerC
    If Cells(i, c) = Cells(4, c) Or _
        Cells(i, c) = Cells(5, c) Or _
        Cells(i, c) = Cells(6, c) Then t = t + 1
  Next c
  Cells(i, 9) = t
  t = 0
Next i
End Sub

A+
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Re,

Voila déjà pour l'onglet "Couple" :

VB:
Sub couple()
WsCp.Activate
Dim DerL As Long, DerC As Long, c As Long, i As Long, t As Long, u As Long
DerL = Cells(Rows.Count, 11).End(xlUp).Row
DerC = Cells(4, Columns.Count).End(xlToLeft).Column
For c = 11 To DerC
  For i = 11 To DerL Step 4
    If Cells(i, c) = Cells(4, c) Or _
        Cells(i, c) = Cells(5, c) Or _
        Cells(i, c) = Cells(6, c) Then t = 1
    If Cells(i + 1, c) = Cells(4, c) Or _
        Cells(i + 1, c) = Cells(5, c) Or _
        Cells(i + 1, c) = Cells(6, c) Then u = 1
  Cells(i + 2, c) = t + u
  t = 0: u = 0
  Next i
Next c
End Sub

Je vois pour le dernier point

A+
 

biafox

XLDnaute Nouveau
Re : Macro pour déplacer données dans onglets

Salut yaloo !
En effet, tu as raison, je devrais plutôt m’adresser à tous et non pas juste à toi, mais comme tu avais saisi ce que je cherchais à faire, je m’étais dit que tu étais plus apte à me répondre et en l’occurrence tes réponses ont étés plutôt satisfaisantes.
Il s’avère juste que la macro « couples », étant donné que j’ai 10..15…20 colonnes et bien plus au fil du temps à traiter met chez moi plusieurs heures…ben oui, mon ordi commence à se faire un peu vieux ! lol
Pour pallier à ce problème de temps de calcul et ne pas être contraint de refaire les calculs sur l’ensemble des colonnes qui vont s’accumuler au fil du temps, j’ai pensé qu’il serait judicieux de rajouter une macro qui ne traite que la dernière colonne à savoir « K ».
Pour ce qui est de la dernière partie que tu as, à priori pas compris, j’ai joint un fichier exemple pour essayer de faire comprendre le principe de ce que je souhaite obtenir comme résultat.
En espérant ne pas trop abuser de ta gentillesse, je te remercie pour tes réponses qui me sont assez utiles pour avancer dans mon projet.
 

Pièces jointes

  • Exemple01.xlsx
    20.2 KB · Affichages: 108
  • Exemple01.xlsx
    20.2 KB · Affichages: 112

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Bonsoir Biafox, le forum,

Voici pour la macro "Couple" uniquement sur la colonne K

VB:
Sub couple()
Dim DerL As Long, i As Long, t As Long, u As Long
 WsCP.Activate
 DerL = Cells(Rows.Count, 11).End(xlUp).Row
   For i = 11 To DerL Step 4
     If Cells(i, 11) = Cells(4, 11) Or _
         Cells(i, 11) = Cells(5, 11) Or _
         Cells(i, 11) = Cells(6, 11) Then t = 1
     If Cells(i + 1, 11) = Cells(4, 11) Or _
         Cells(i + 1, 11) = Cells(5, 11) Or _
         Cells(i + 1, 11) = Cells(6, 11) Then u = 1
   Cells(i + 2, 11) = t + u
   t = 0: u = 0
   Next i
End Sub

Pour le second point, je pense qu'il faut passer par un tableau de façon à voir les couples déjà existant.

Il est un peu tard, je verrai ça demain si personne n'a répondu entre-temps.

A+

Martial
 

Yaloo

XLDnaute Barbatruc
Re : Macro pour déplacer données dans onglets

Bonjour à tous,

Vois avec cette macro à mettre dans un module standard.

VB:
Sub Liste_Couple()
Dim Tablo() As Variant, MonDico As Object
Dim f As Integer, c As Long, DerL As Long, t As String

Application.ScreenUpdating = False
  
  WsLC.Cells.ClearContents
  WsCP.Activate
  Set MonDico = CreateObject("Scripting.Dictionary")

  DerL = Cells(Rows.Count, 6).End(xlUp).Row
  With WsCP
    For c = 13 To DerL Step 4
      If Cells(c, 6) = 0 And Cells(c, 7) = 1 Then
      t = Cells(c, 6).Offset(-2, 5).Value & ";" & Cells(c, 6).Offset(-1, 5).Value
        If Not MonDico.Exists(t) Then
        MonDico.Add t, t
        f = f + 1
        ReDim Preserve Tablo(1 To 2, 1 To f)
        Tablo(1, f) = Cells(c, 6).Offset(-2, 5).Value
        Tablo(2, f) = Cells(c, 6).Offset(-1, 5).Value
        End If
      End If
    Next c
  End With
  WsLC.Activate
  WsLC.Range(Cells(5, 4), Cells(f + 4, 5)).Value = Application.WorksheetFunction.Transpose(Tablo)

Application.ScreenUpdating = True
End Sub

Chez moi, ça fonctionne avec ce que j'ai compris.

A te relire

Martial
 

Discussions similaires

Réponses
2
Affichages
563

Statistiques des forums

Discussions
312 251
Messages
2 086 623
Membres
103 268
dernier inscrit
gille deleuze