aller à la cellule du bas suivante

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 !

liquoreux

XLDnaute Junior
Bonjour,

Je cherche à copier des données horizontales (ligne) d'un tableau, sur les cellules d'une colonne les unes après les autres vers le bas. Chaque colonne est nommée "Traitement" et leur emplacement peut varier dans chacun des tableaux.

Voici ce que j'ai construit :

Sheets("SAISIE").Select
With Range("a1:iu64000")
Set C = .Find("Traitement", LookIn:=xlValues) 'je cherche la colonne intitulée "traitement" pour couper la donnée située sur la ligne en-dessous du titre
C.EntireColumn.Select
ActiveCell.Offset(1, 0).Cut 'la donnée est coupée
End With

Sheets("BASE").Select
With Range("a1:iu64000")
Set C = .Find("Traitement", LookIn:=xlValues)
C.EntireColumn.Select
ActiveCell.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
'cette formule est censée placer l'activation sur la cellule vide du bas et ainsi de suite
ActiveSheet.Paste 'la cellule coupée est copié sur cette cellule vide
End With

Sheets("SAISIE").Select
ActiveCell.Offset(1, 0).Delete Shift:=xlToLeft
'la donnée précédemment copiée est supprimée et se trouve remplacée par celle située à sa gauche

End Sub


Bien évidemment, la formule :
ActiveCell.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ne fonctionnement pas car la colonne ne comporte qu'une seule valeur, le titre "Traitement".😡

Comment procéder afin de contourner ce problème ?

Je souhaiterais également pouvoir mettre en boucle la formule afin de copier les données de la ligne du trableau "SAISIE" jusqu'à la dernière sur la colonne "Traitement" du tableau "BASE"

Merci de votre aide. 🙂
 
Re : aller à la cellule du bas suivante

Je te remercie pour la simplication de la formule.
Toutefois, je n'obtiens pas ce que je cherche.
Ta formule renvoie bien à la cellule du bas suivante, mais les données suivantes qui devraient être collées à la suite vers le bas retombent sur la même cellule et écrasent la donnée précédente.

Je souhaite au contraire que chaque donnée coupée sur la ligne du tableau "SAISIE" vienne alimenter chacune des cellules du bas de la collone du tableau "BASE". Chaque donnée dispose de sa propre cellule.

Pour mieux comprendre, je joints un fichier

Tableau "SAISIE" = zone d'extraction
Tableau "BASE" = le résultat à obtenir
Tableau "RESULTAT ACTUEL" = ce que j'obtiens avec la formule simplifiée
ctrl + m pour démarrer la macro


Merci.
 

Pièces jointes

Re : aller à la cellule du bas suivante

re:

à la vue de la macro, je ne comprends pas ce que tu cherches

traduction :
dans la feuille saisie
je cherche le titre "Traiitement indiciaire"
je recupere la valeur au dessous
dans la feuille resultat actuel
je cherche le meme titre
je recopie la valeur precedemment recupérée pour la mettre juste au dessous du titre
dans la feuille Saisie
Je detruis uniquement la cellule en recadrant les cellules de droite vers la gauche

voila ce que fait ta macro, mais je ne suis pas sure que cela soit ce que tu veuilles faire

ta macro corrigée
Sub Macro1()
Dim c As Range, d As Range
Sheets("SAISIE").Select
With Range("a1:iu1")
Set c = .Find("Traitement indiciaire", LookIn:=xlValues)
End With
With Sheets("RESULTAT ACTUEL").Range("a1:iu1")
Set d = .Find("Traitement indiciaire", LookIn:=xlValues)
d.Offset(1, 0) = c.Offset(1, 0)
End With
c.Offset(1, 0).Delete Shift:=xlToLeft
End Sub

@ te lire
 
Re : aller à la cellule du bas suivante

dans la feuille saisie
je cherche le titre "Traiitement indiciaire"
je recupere la valeur au dessous
dans la feuille resultat actuel
je cherche le meme titre
je recopie la valeur precedemment recupérée pour la mettre juste au dessous du titre
dans la feuille Saisie
Je detruis uniquement la cellule en recadrant les cellules de droite vers la gauche

Oui ok!
Mais, le but est de mettre en boucle de sorte que la nouvelle valeur précédemment récupérée (celle qui est décalée de la droite vers la gauche sur la feuille Saisie) ne soit pas mise juste au dessous du titre mais en dessous de celle précédemment copiée sous le titre et ainsi de suite pour les autres valeurs.

Avec ta macro, la première valeur précédemment récupérée est écrasée par la suivante.

Cela doit donner ça :

dans la feuille saisie
je cherche le titre "Traitement indiciaire"
je recupere la valeur au dessous
dans la feuille resultat actuel
je cherche le meme titre
je recopie la valeur precedemment recupérée pour la mettre au dessous du titre dans la première cellule vide trouvée (au départ, c'est forcément celle juste en-dessous du titre. Après, c'est celle en-dessous de la première valeur copiée juste sous le titre, etc.)
dans la feuille Saisie
Je detruis uniquement la cellule en recadrant les cellules de droite vers la gauche
Je recommence l'opération jusqu'à ce que chaque valeur récupérée dans la feuille Saisie soit placée l'une en dessous de l'autre dans la feuille Résultat actuel
Je met fin à l'opération lorsqu'il n'y a plus aucune valeur à récupérer sur la première ligne de la feuille Saisie
Je supprime la première ligne du fichier Saisie et je décale vers le haut les lignes du dessous
Je recommence toute l'opération avec la première ligne jusqu'à épuisement des lignes suivantes.

Une présentation du résultat que je cherche à obtenir se trouve sur la feuille Base.
En espérant que cela soit plus clair.

Cordialement.
 
Re : aller à la cellule du bas suivante

re:

c'est bien ce que je pensais, la macro de base ne faisait pas ce que tu cherchais à faire

voici encore un essai mais je ne suis pas encore certain

Code:
Sub Macro1()
    Sheets("SAISIE").Select
    ligne = 1
    For Each cel In Range("P1:CO1")
        ligne = ligne + 1
        With Sheets("RESULTAT ACTUEL")
            .Range("P" & ligne) = cel
            .Range("Q" & ligne) = cel.Offset(1, 0)
        End With
    Next
End Sub
 
Re : aller à la cellule du bas suivante

Super!
C'est ça.


Toutefois :
Si je supprime manuellement la ligne 2 de la feuille Saisie, recadrant vers le haut les lignes du dessous, la macro relancée écrase toutes les données placées dans la colonne P, de la ligne 1 à 79, sur la feuille Résultat actuel.
Je cherche plutôt à ce que les nouvelles données viennent se rajouter à partir de la ligne 80 et ainsi de suite pour autant de données qu'il y a de lignes sur le feuille Saisie.

En gros : ligne 2 = 79 valeurs horizontales sur la feuille Saisies placées verticalement sur la feuille Résultat actuel dans la colonne "Traitement indiciaire";
ligne 3 (qui devient ligne 2 après suppression et recadrage vers le haut) = 79 nouvelles valeurs horizontales placées à la suite des 79 valeurs précédemment copiées;
etc, tant qu'il y a des lignes sur la feuille Saisie.

Précisions :
Le nombre de valeurs, de lignes et de colonnes peut varier (ce peut être P:CO ou Q:CR,...,comme il peut y avoir 79 valeurs ou seulement 15).
C'est pour cela que je n'ai pas utilisé Range.
Par contre les endroits où les valeurs doivent être extraites puis être copiées sont invariables : la colonne intitulée "Traitement indiciaire" dans les deux feuilles, plus la colonne à droite de "Traitement indiciaire" dans la feuille Résultat actuel.


Cordialement.
 
Re : aller à la cellule du bas suivante

re:

encore un essai sans tout comprendre m'enfin si je suis dans le vrai

Code:
Sub Macro1()
    Dim ligne As Long, nbligne As Long
    Sheets("SAISIE").Select
    nbligne = Range("P65536").End(xlUp).Row - 1 ' recherhe du nombre de lignes à traiter
    ligne = 1
While nbligne > 0
    For Each cel In Range("P1:CO1")
        ligne = ligne + 1
        With Sheets("RESULTAT ACTUEL")
            .Range("P" & ligne) = cel
            .Range("Q" & ligne) = cel.Offset(1, 0)
        End With
    Next
    nbligne = nbligne - 1
    Range("A2").EntireRow.Delete
Wend
End Sub
 
Re : aller à la cellule du bas suivante

Et bien si tu as compris puisque c'est bien ce que je cherchais à faire.😉

Je vais finir cette partie du programme (il n'est pas fini, mais je séchais là-dessus) en rajoutant les lignes correspondantes aux valeurs.

Je te remercie beaucoup pour ta patiente et ta célérité.🙂

A bientôt.
 
- 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
2
Affichages
349
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour