Mettre valeur les une sous les autres (par macro)

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 !

klorane

XLDnaute Occasionnel
Bonsoir à tous,

j'ai la macro suivante qui fonctionne bien mais je voudrais qu'au lieu qu'elle ecrase la valeur à mettre dans le tableau elle les mette les unes en dessous des autres (Pour ne pas les ecraser)

il faut je pense rajouter un truc genre : [Cells65536].End(xlUp).Offset(1, 0) = Range("L4")

tablo = Range("M7:AB8")
For n = LBound(tablo, 2) To UBound(tablo, 2)
If tablo(1, n) = Range("L2") And tablo(2, n) = Range("L3") Then
Cells(9, n + 12) = Range("L4")
End If
Next n

J'ai testé des trucs mais sans succès.

Si quelqu un a une idée, je suis preneur.

Klorane
 
Re : Mettre valeur les une sous les autres (par macro)

ci joint un fichier excel de démo!

Dans l'exemple, en cliquant sur le bouton "complète" la lettre K vient se positionner en M15. 'en raison du code des cellules J2 et J3

Il faudrait que si on re-clique de nouveau sur le bouton complète la Nouvelle lettre K viennent se positionner en M16 etc...

Klorane
 

Pièces jointes

Re : Mettre valeur les une sous les autres (par macro)

Bonsoir Klorane,

😱 ... Pas très claire, l'affaire!? Comme tu effaces chaque fois la plage L15:O15, au début de ton code, comment déterminer que d'une fois à l'autre, il faut recopier la valeur de T2 une ligne plus bas? Les données en J2:J3 changeront elles aussi? Si oui, à quelle hauteur faudra-t-il recopier le contenu de T2?

Il faudrait que tu expliques un minimum les tenants et aboutissants ... sinon, comment veux-tu qu'on arrive à te donner des pistes 😕
 
Re : Mettre valeur les une sous les autres (par macro)

bonsoir Modeste.

Entierement d'accord avec toi!
On peut supprimer le : Range("L15:O15") = ""

La lettre précédente restera ainsi en place.

La suivante viendra se mettre en L16:O16 (si L15:O15) est déjà occupé et ainsi de suite.

Klorane
 
Re : Mettre valeur les une sous les autres (par macro)

Re-bonsoir,

Oserais-je un discret "Hein!?" 😱
Ce sont les explications demandées ... ou bien tu as trouvé la solution tout(e) seul(e)?? ... parce que moi, je n'ai pas mieux compris 😕
 
Re : Mettre valeur les une sous les autres (par macro)

MDR Modeste!

La solution n'est toujours pas donnée.

Dans le fichier excel que j'ai joint dans le début du Post : Quand on clique sur le bouton "Complète" : La Lettre "K" vient se positionner en "M15" car "J2"=1 et "J3"=0

Il faudrait modifier un truc dans la macro de manière à se que:
Si dans l'exemple si dessus "M15" est déjà occupé par une lettre alors la nouvelle lettre vient se positionner en dessous. (Dans l'exemple ci dessus ça serait en "M16" et ainsi de suite M17, M18.....

Il faut que ça fonctionne aussi de la meme manière sur les autres cellules si le code J2 et J3 est changé.
Nouvel Ex : si J2=0 et J3=0 alors O15 = K. si on clique de nouveau sur "Complète " et que code J2=0 et J3=0 et que O15 est déjà occupé par lettre K alors O16= K etc...

(le fichier joint ici ne sert qu'à montrer comment les lettres devraient se mettre bout à bout en fonction du code J2, J3)

Klorane
 

Pièces jointes

Re : Mettre valeur les une sous les autres (par macro)

Bonsoir,

Peut être cette solution a amélioré ?

VB:
Sub complete()
Tsauv = Range("L15:O15")
Range("L15:O15") = ""
tablo = Range("L13:O14")
For n = LBound(tablo, 2) To UBound(tablo, 2)
  If tablo(1, n) = Range("J2") And tablo(2, n) = Range("J3") Then
    Cells(15, n + 11) = Range("T2")
    der = Cells(65536, n + 11).End(xlUp).Row + 1
    Cells(der, n + 11) = Tsauv(1, n)
  End If
  der = Empty
Next n
Erase Tsauv, tablo
End Sub

Laurent
 
Dernière édition:
Re : Mettre valeur les une sous les autres (par macro)

Bonsoir..

macro à remplacer comme ca:
Sub complete()
'Range("L15:O15") = ""
tablo = Range("L13:O14")
DerLig = Range("L13").CurrentRegion.Rows.Count + 12 'y a plus direct, mais je sais plus comment...


For n = LBound(tablo, 2) To UBound(tablo, 2)
If tablo(1, n) = Range("J2") And tablo(2, n) = Range("J3") Then
Cells(DerLig + 1, n + 11) = Range("T2")
End If
Next n
End Sub

Penser à effacer les lignes avant de commencer la première saisie..
ca peut etre une amélioration future
 
Re : Mettre valeur les une sous les autres (par macro)

Bousoir,

ou une autre variante,

VB:
Sub completeOu()
' sauvegarde de la ligne 15
Tsauv1 = Range("L15:O1200")

' Remise à zero de la ligne 15
Range("L15:O2000") = ""

' Tablo pour test du caractére a ranger dans le tableau
tablo = Range("L13:O14")

' Boucle
For n = LBound(tablo, 2) To UBound(tablo, 2)
  
  If tablo(1, n) = Range("J2") And tablo(2, n) = Range("J3") Then
    Cells(15, n + 11) = Range("T2")

' remplissage de l'ancienne sauvegarde
    Cells(16, 12).Resize(UBound(Tsauv1, 1), UBound(Tsauv1, 2)) = Tsauv1
  End If
Next n

' Remise a zero des tableau
Erase Tsauv1, tablo
End Sub

Ps : Tsauv1 = Range("L15:O1200") il faut changer cela est trouver la dernier cellule non vide de la matrice
c'est a dire rendre la derniere ligne variable pour trouver sa position.

Laurent
 
Dernière édition:
Re : Mettre valeur les une sous les autres (par macro)

Bonsoir à vous 2!

J'ai mis en place le code. L'idée est là mais soucis c'est que ça me fait des cellules vides quand les autres se remplissent.

J'ai intégré le code de Vgendron pour le bouton.

Sous le tableau se que fait la macro. Et en cellules U16 X20 tel qu'il faudrait que cela fonctionne.
(Seule la cellule "mise en mémoire se déplace vers le bas les autres ne bougent pas).

Klorane
 

Pièces jointes

Re : Mettre valeur les une sous les autres (par macro)

Bonsoir à tous


Abondance de biens ne nuit pas...
Une proposition de plus :​
VB:
Sub complete()
Dim c&, l&, m&, n&, Rslt$, cPlg As Range, oPlg As Range

    Set oPlg = Range("L13:O14")
    Set cPlg = Range("J2")
    Rslt = Range("T2")

    l = oPlg.Rows.Count - 1
    c = oPlg.Columns.Count - 1
    With oPlg.Cells(1, 1)
        For n = 0 To c
            For m = l To 0 Step -1
                If .Offset(m, n) <> cPlg.Offset(m, 0) Then Exit For
            Next
            If m = -1 Then Cells(Rows.Count, .Column + n).End(xlUp).Offset(1, 0) = Rslt
        Next n
    End With
End Sub

C'est très facilement adaptable : voir un autre exemple dans l'onglet Feuil2 du classeur joint.​



ROGER2327
#6340


Lundi 2 Décervelage 140 (Saints Hassassins, praticiens - fête Suprême Quarte)
10 Nivôse An CCXXI, 9,9973h - fléau
2012-W52-7T23:59:37Z
 

Pièces jointes

Re : Mettre valeur les une sous les autres (par macro)

Bonjour les nuitards ... et les autres,

Si abondance de biens ne nuit pas, poursuivons dans la même veine: j'avais mis ça sous le coude, en attendant la réponse de Klorane, hier soir ...

VB:
Sub complete()
    tablo = Range("L13:O14")
    For n = LBound(tablo, 2) To UBound(tablo, 2)
        If tablo(1, n) = Range("J2") And tablo(2, n) = Range("J3") Then
            Cells(100, n + 11).End(xlUp).Offset(1, 0) = Range("T2").Value
            Exit For
        End If
    Next n
End Sub

... moins "universel" que ROGER, j'en conviens (je veux dire: moins universel que -la proposition de- bien sûr 🙄)

PS: comme quoi, Klorane, avec des explications un tantinet plus fouillée, les propositions voient le jour (même la nuit)
 
- 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

Réponses
7
Affichages
829
Retour