Tri colonne
#1
Débutant XLPages

Inscription: 24/09/2012

Messages: 7

Version Excel utilisée:
2003
Posté le : 24-09-2012 16h41
Bonjour à tous,

Je suis novice dans la programmation des macros Excel. J'ai deux questions à poser s'il vous plait.

Première question :

la mise en place d'une macro Execel permettant de parcourir une colonne (exemple colonne A Feuil 1) puis de comparer le contenu des cellules de cette même colonne par une variable ayant 5 caractères. Si elle trouve une cellule ayant 5 caratères, elle remplace  cette valeur par la valeur provenant de la colonne A feuil 2 meme numéro de ligne.
J'ai fait le script mais il ne marche pas je ne sais pas le pourquoi.
Voici le script :

sub Tri()

Dim Chaine As String * 5
i = 0
Do
   i = i + 1
   If Len(Cells(A & i) = Chaine) Then
   Range("A" & i).Select
   Selection.Copy
   ActiveSheet.Paste
      Else
      End If
      Loop While Cells(K & i) <> "Chaine"
      End Sub

Deuxième question:


Je souhaite mettre en place dans la même macro un duplicateur des les lignes et leurs comtenu feuille.
Exemple :
je veux dupliquer le contenu de la ligne 1 à ligne 5 sur la ligne 6 à 10 de la même feuille Excel.

Merci d'avance !
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 24-09-2012 21h00
Bonsoir Nutella, bienvenue sur XLpages.com

Si j'ai bien compris les 2 questions :

' myDearFriend!  -  www.mdf-xlpages.com

Sub Traitement1()
Dim L As Long, Lmax As Long
    With Sheets("Feuil1")
        'Dernière ligne colonne A
        Lmax = .Cells(.Rows.Count, 1).End(xlUp).Row
        'Pour chaque ligne complétée
        For L = 1 To Lmax
            With .Cells(L, 1)
                'Si valeur en colonne A = 5 caractères
                If Len(.Value) = 5 Then
                    'Alors valeur Feuil1 = cellule jumelle en Feuil2
                    .Value = Sheets("Feuil2").Cells(L, 1).Value
                End If
            End With
        Next L
    End With
End Sub

Sub Traitement2()
    'Recopie les lignes 1 à 5 en lignes 6 à 10
    With Sheets("Feuil1")
        .Rows("1:5").Copy Destination:=.Rows("6:10")
    End With
End Sub

En espérant que ça puisse t'aider.

Par ailleurs, STP :
  • Merci de taper le texte de tes messages directement dans l'éditeur de post du forum et de ne pas faire de copier-coller du texte depuis un autre éditeur (Word ou autre...). Sinon, ça ajoute toute une série de balises (invisibles) à ton texte et ça alourdit inutiliement notre base de données.
  • Pour insérer du code VBA proprement dans tes posts : consulter CETTE FAQ.

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#3
Débutant XLPages

Inscription: 24/09/2012

Messages: 7

Version Excel utilisée:
2003
Posté le : 25-09-2012 00h18
Bonsoir,

Merci pour ta réponse. le traitement 1 ne marche pas.
Le traitement 2 marche bien, d'ou j'aimerai l'améliorer. comment peut-on dupliquer les données des lignes sans mettre les numéros  des lignes en dur.
exemple dans le traitement 2, les lignes 1 à 5 sont en dur, est-il possible que les lignes à dupliquer soient dynamiques et il le duplique automatiquement ?
Le fichier lit automatiquement les lignes contenant des données et le duplique le nombre de fois que l'on souhaite.
Merci d'avance et Bonne nuit !
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#4
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 25-09-2012 12h44
Bonjour Nutella, Didier, Le forum

Le code Traitrement() donné par Didier fonctionne très bien, es-tu certain d'avoir des cellules dans la colonne ne contenant que 5 caractères, il y a peut-etre des caractères cachés.

Pour ce qui est de ta nouvelle demande, soit plus précis, que veux-tu dire par le "fichier lit". Par quel moyen veux-tu indiquer à la macro le nombre de recopies ? Veux-tu un décalage de ligne entre chaque recopie, pour laisser une ligne vide par exemple. Ton tableau a peut-être une ligne d'entête, doit-on la copier ou pas la copier.
Connaissant très bien Didier, en te proposant le code traitement2, soit il n'a pas compris ce que tu souhaitais, soit il se posait la question pourquoi un code pour faire une simple recopie !.

@+Jean-Marie 
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#5
Débutant XLPages

Inscription: 24/09/2012

Messages: 7

Version Excel utilisée:
2003
Posté le : 25-09-2012 13h02
Bonjour à tous,

Oui Jean-Marc, je vais revérifier voir les eventuels clocages.

Pour ce qui est de ma nouvelle demande, je veux indinquer la macro le nombre de fois à recopier les x lignes contenant des données dans la feuille d'excel sans lui préciser de tel ligne à tel ligne.
Non, je ne veux pas de décalage de ligne entre chaque recopie.
Oui mon tableau à une ligne d'entête, et ne doit pas être recopier.Elle doit rester intact.
En plus, je veux placer la macro dans la feuille 1 et les données à recopier se font sur la feuille2 du même fichier excel.

Merci à didier, Jean-Marie et à tous !
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#6
Débutant XLPages

Inscription: 24/09/2012

Messages: 7

Version Excel utilisée:
2003
Posté le : 28-09-2012 12h52

Merci à vous les réponses données par Didier fonctionne très bien. Merci beaucoup Didier et à tous le forum.

J'aimerai quand même aller plus loin dans le code :

Code Origine
 
Sub Traitement2()
Recopie des lignes 1 à 5 en lignes 6 à 10
    With Sheets("Feuil1")
        .Rows("1:5").Copy Destination:=.Rows("6:10")
    End With
End Sub

Code à Améliorer

Sub Traitement2()

       Dim Ligne As Long
        Dim LigneMax As Long                  
       i = 1

      With Sheets("Feuil1")

      Recopie = Application.InputBox("Saisir le nombre de fois à       recopier", Type:=1)
         If Recopie = False Or Recopie < 0 Then Exit Sub

        LigneMax = .Cells(.Rows.Count, .Rows.Count).End(xlUp).Row
        .Rows("Ligne : LigneMax").Copy Destination:=.Rows("LigneMax+i:.Rows.Count+1 ")
      End With
End Sub


Ma nouvelle question étant, je souhaiterai améliorer le code sans mettre les numéro de ligne en dur.
 
En fait, j'ai défini deux variables. la variable Ligne correspond à la deuxieme ligne de la feuille excel et LigneMax correspond à la dernière ligne de la feuille excel contenant les données.

Et je veux que le recopie commence à partir de ligneMax +1 et ainsi de suite.
La première ligne du tableau n'est pas à recopier car c'est la ligne d'entête.

Dans l'attente d'une solution merci d'avance à vous tous!


Hors Ligne
Rapport   Haut 

Re: Tri colonne
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 29-09-2012 00h34
Bonsoir Nutella, JeanMarie, le Forum,

A vrai dire, tu commences par demander un code pour copier les lignes 1:5 en 6:10, ensuite tu parles de vouloir la recopie des lignes sur une autre feuille et maintenant tu ne parles visiblement plus de cette autre feuille...

Je me base donc sur la dernière version de ta question... et te propose le code comme suit :
' myDearFriend!  -  www.mdf-xlpages.com
Sub Traitement2()
Dim Recopie As Variant
Dim Plage As Range
Dim LigneMax As Long, L As Long
Const LignDeb As Byte = 2

    With Sheets("Feuil1")
        Recopie = Application.InputBox("Saisir le nombre de fois à recopier", Type:=1)
        If Val(Recopie) < 1 Then Exit Sub
        LigneMax = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set Plage = .Rows(LignDeb).Resize(LigneMax - 1)
        For L = 1 To Recopie
            Plage.Copy Destination:=.Rows(LigneMax + 1)
            LigneMax = .Cells(.Rows.Count, 1).End(xlUp).Row
        Next L
    End With
End Sub

Pour gain de temps, je te remercie d'éviter les questions à rebondissement et d'être précis dès le départ.

Par ailleurs, je répète ma remarque précédente :
Pour insérer du Code VBA proprement dans les posts du forum : voir CETTE FAQ. Merci.

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#8
Débutant XLPages

Inscription: 24/09/2012

Messages: 7

Version Excel utilisée:
2003
Posté le : 01-10-2012 09h49
Bonsoir Didier, le forum,

Merci beaucoup pour tes réponses précieuses.
Merci aux internautes.

Cordialement,

Nutella.
Hors Ligne
Rapport   Haut 

Re: Tri colonne
#9
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 01-10-2012 23h29
Bonsoir Nutella, Jean-Marie,

Au vu de ta réponse Nutella, j'en déduis que ton problème est résolu. Je clôture donc ce fil de discussion en tant que tel (merci de penser à le faire toi-même la prochaine fois, STP).

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes