copier- coller colonne

jujudeo

XLDnaute Nouveau
Bonjour,

C'est un problème certainement simple pour les experts d'Excel mais pas facile pour moi

Code:
Sub Traitement()
 
Dim td As Sheets
Dim taille As Range
Dim myDate As Date
Dim derligne As Long
 
      With Sheets("donnee")
        Set taille = .Range("A2:DX761")
         For Each cell In taille
          If InStr(1, cell.Text, "%") > 0 Then
           cell.EntireColumn.Rows("2:761").Select
           Selection.Copy
           Selection.Paste after column.select
 
            End If
            Next
            End With
 
End Sub
Voici une partie de mon code. Mon but est que si je rencontre une cellule au format pourcentage, je la sélectionne entièrement, je la copie et je la colle juste après celle-ci mais c'est la ou sa coince pour moi :(

Je vous remercie
 

CISCO

XLDnaute Barbatruc
Re : copier- coller colonne

Re

J'ai l'impression que tu peux simplifier ton code en utilisant une forme du style

If.... then
........
ElseIf...... Then
........
ElseIf......then
......
End If

ce qui donnerait quelque chose du genre
Code:
       Set x = Range("A" & ligne + 10)
         x.Value = 100
         
        Set taille = .Range("A2:DX100")
        For Each cell In taille
            'detecter date et la mettre en texte + bon format
            If IsDate(cell) Then
            cell.EntireColumn.Rows("2:761").Select
            Selection.NumberFormat = "@"
            Selection.NumberFormat = "yyyy-mm-dd"
                          
           ElseIf InStr(1, cell.Text, "€") > 0 Then
            cell.EntireColumn.Rows("2:761").Select
            Selection.NumberFormat = "0.00"  'pour 2 décimales

           ElseIf InStr(1, cell.Text, "%") > 0 Then
             colonne = cell.Column
             lignefin = cell.End(xlDown).Row
             x.Copy
             Range(Cells(1, colonne), Cells(lignefin, colonne)).PasteSpecial _
             Paste:=xlPasteValues, Operation:=xlMultiply, SkipBlanks:=True
                 For i = 2 To lignefin
                 If CStr(Cells(i, colonne)) = "Erreur 2015" Then Cells(i, colonne) = ""
                 Next i
             Selection.NumberFormat = "0.00"
             Selection.Copy
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
           End If
          Next

à adapter à ton fichier

@ plus
 

CISCO

XLDnaute Barbatruc
Re : copier- coller colonne

Rebonjour

Une question au passage : Est-ce qu'on ne peut pas repérer les colonnes contenant des dates, des valeurs monétaires, ou des pourcentages directement avec leur intitulé ?

@ plus
 
Dernière édition:

jujudeo

XLDnaute Nouveau
Re : copier- coller colonne

Code:
Sub Traitement()

Dim td As Worksheet
Dim myDate As Date
Dim derligne As Long
Dim x As Range 'cellule affichant le coefficient multiplicateur 100
Dim taille As Range '1ère ligne contenant le symbole % dans les en-tête
Dim colonne As Integer 'n° de la colonne à modifier
Dim lignefin As Integer 'n° de la dernière ligne

On Error Resume Next 'si la feuille n'existe pas !
Application.DisplayAlerts = False: Sheets("traitement date").Delete: Application.DisplayAlerts = True
On Error GoTo 0 'plus de gestionnaire d'erreurs
Worksheets("PO - PB").Copy After:=Worksheets("base donnee") 'création de la feuille
ActiveSheet.Name = "traitement date" 'nom de la feuille'
Sheets("base donnee").Range("A1:DX1").Copy Sheets("traitement date").Range("A1:DX1")
ActiveSheet.AutoFilterMode = False 'desactiver les filtres'
ActiveWindow.FreezePanes = False 'désactiver les volets'
ligne = Range("A" & Rows.Count).End(xlUp).Row
colomne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
With Sheets("traitement date")

   
        Set taille = .Range("A2:DX100")
        For Each cell In taille
            'detecter date et la mettre en texte + bon format
            If IsDate(cell) Then
            cell.EntireColumn.Rows("2:761").Select
            Selection.NumberFormat = "@"
            
            
            Selection.NumberFormat = "yyyy-mm-dd"
            End If
                
            If InStr(1, cell.Text, "€") > 0 Then
            cell.EntireColumn.Rows("2:761").Select
            Selection.NumberFormat = "0.00"  'pour 2 décimales
            End If

            Next
            
            End With
            
               
            
       Set x = Range("A" & ligne + 10)
         x.Value = 100
      With Sheets("traitement date")
        Set taille = .Range("A2:DX100")
     For Each cell In taille
           If InStr(1, cell.Text, "%") > 0 Then
             colonne = cell.Column
             lignefin = cell.End(xlDown).Row
             x.Copy
             Range(Cells(1, colonne), Cells(lignefin, colonne)).PasteSpecial _
             Paste:=xlPasteValues, Operation:=xlMultiply, SkipBlanks:=True
                 For i = 2 To lignefin
                 If CStr(Cells(i, colonne)) = "Erreur 2015" Then Cells(i, colonne) = ""
                 Next i
             Selection.NumberFormat = "0.00"
             Selection.Copy
            'Selection.Offset(0, 0).Select
            'Selection.EntireColumn.Insert
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
            'Selection.Offset(0, 0).Delete
           End If
           Next
    End With
    'on efface la valeur 100 en bas du tableau (utilisée pour le collage spécial)
    Range("A" & ligne + 10).Clear
    
 For Each cell In Range("A2:DX761")
 If cell.Value = "#REF!" Then
 cell.ClearContents
 End If
 
 
 If cell.Value = "/" Then
 cell.ClearContents
 End If

 Next
    
End Sub

Ce que je veux dire c'est : est-il possible d'avoir une valeur / fonction générale au niveau des ranges pour ne pas rentrer les valeurs manuellement afin de traiter entièrement ma feuille ? ou alors il y aura il moyen d'optimiser ma macro?

Je suis moi meme débutant en vba donc je ne sais pas si c'est possible et je préfère demander a des personnes comme vous qui s'y connaissent beaucoup plus que moi !!

Je vous remercie

Julien
 

jujudeo

XLDnaute Nouveau
Re : copier- coller colonne

Concernant le post #16, votre macro marche très bien mais grâce a vous, je viens d'identifier un nouveau problème assez problématique....
Concernant le post #17, ce n'est pas possible car on ne connait pas à l’avance les intitulés des utilisateurs si ils ajoutent par exemple un nouveau champ
 

Discussions similaires

Réponses
4
Affichages
232