selection colonne pour range

  • Initiateur de la discussion Initiateur de la discussion GHISLAIN
  • Date de début Date de début

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 !

GHISLAIN

XLDnaute Impliqué
bonsoir a tous

j ai besoin d un coup de pouce pour finaliser mon code
j arrive a selectionne des colonnes de 1 a 8 etc

mais je ne parviens pas a selectionner plusieur colonne exemple de 1 a 3 et de 8 a 9 et enfin de 12 a 14

je souhaiterai si possible ajouter a chaque ligne copié a jouter une date devant la ligne



ci joint un fichier plus explicite

merci a tous de votre aide

amicalement

ghislain
 

Pièces jointes

Re : selection colonne pour range

Bonsoir,
Avant tout, il est important que tu saches que les macros font mauvais ménage avec les cellules fusionnées, cela donne des résultats parfois surprenants.
Si tu as besoin de regrouper des cellules d'une ligne, utilise "Centrer sur plusieurs colonnes".
Il manque trop d'informations pour te répondre correctement.
Voici quelques commentaires :
Code:
Sub Rectangle2_Clic()
  Dim Lig As Long
  Dim Col As Long
  Dim NbrLig As Long
  Dim NumLig As Long
  Col = 1
  With Sheets("base")
    For Lig = 15 To 27
      If .Cells(Lig, Col).Value <> "XXXXX" Then 'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
            
        .Range(.Cells(Lig, 1), .Cells(Lig, 8)).Copy ' copie les colonnes de 1 a 8
        .Range("A" & Lig & ":H" & Lig).Copy
        
        'JE VOUDRAI ICI POUVOIR COPIER LES COLONNE QUE JE VEUX SOIT LA 1 A 3  LA 8 ET 9 ET ENFIN LA 12 13 ET 14
		Pour 1 à 3 : .Range("A" & Lig & ":C" & Lig).copy destination:=Sheets(Range("H9").Value).Range(Tu n'as pas dit où coller)
        
        'JE VOUDRAI EGALEMENT QUE LORS DE LA COPIE ME SOIT COLLE EGALEMENT LA DATE DE LA CELLULE J6
        coller où ?
        
        'NB DANS MON DOC ORIGINALE JE SUIS OBLIGE DE GARDER LES CELLULES FUSIONNE D OU LA PRESENTATION DE CE MODELE --> c'est périlleux !
        
         Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select ' range a la suite les lignes copiée ? ? ?
          
         ActiveSheets = Range("h9").Value --> Sheets(Range("H9").Value).activate
         ActiveSheet.Paste  ? ? ?
        
      End If
    Next Lig
  End With
End Sub
A+
 
Re : selection colonne pour range

bonjour hippolite,

merci d avoir pris le temps de te pencher sur mon fil

suivant tes remarque je t apporte les explications neccessaires de ce que je souhaite

le code que tu me propose : .Range(("A" & Lig & ":C" & Lig)

je souhaiterai pouvoir copier plusieur colonne a la suite et les coller les une a coté des autres
j ai testé :

.Range(("A" & Lig & ":C" & Lig), ("L" & Lig & ":N" & Lig)).Copy
mais ça fonctionne pas toute les colonne sont prise en compte de A a N

je voudrai que ne soit pris en compte que les colonnes de A a C et de L a N que soit exclu les colonnes D, E, F ,G ETC....

concernant la date je voudrai qu elle se mette devant chaque ligne copiée sur la colonne A

je joins le fichier avec l exemple du resultat souhaité

amicalement

ghislain
 

Pièces jointes

Re : selection colonne pour range

Bonjour,
Avec tes dernières explications c'est plus facile
VB:
Sub Rectangle2_Clic()
    Dim Lig As Long
    Dim Col As Long
    Dim FeuilDest As String
    Dim DligFD As Long, Ld As Long
    Application.ScreenUpdating = False
    Col = 1
    With Sheets("base")
        FeuilDest = .Range("h9").Value 'feuille de destination
        DligFD = Sheets(FeuilDest).Cells(Rows.Count, 1).End(xlUp).Row    'dernière ligne 1ère col de la feuille de destination
        Ld = DligFD + 1
        For Lig = 15 To 27
            If .Cells(Lig, Col).Value <> "XXXXX" Then    'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
                .Range("J6").Copy    'collage spécial pour ne pas importer la couleur de fond
                Sheets(FeuilDest).Range("A" & Ld).PasteSpecial Paste:=xlPasteValues
                Sheets(FeuilDest).Range("A" & Ld).NumberFormat = "m/d/yyyy"
                .Range("A" & Lig & ":C" & Lig).Copy Destination:=Sheets(FeuilDest).Range("B" & Ld)
                .Range("H" & Lig & ":I" & Lig).Copy Destination:=Sheets(FeuilDest).Range("E" & Ld)
                .Range("L" & Lig & ":N" & Lig).Copy Destination:=Sheets(FeuilDest).Range("G" & Ld)
                Ld = Ld + 1
            End If
        Next Lig
    End With
    Application.ScreenUpdating = True
End Sub
N'hésite pas à abuser de la touche F1 pour comprendre les syntaxes
A+
 
Re : selection colonne pour range

bonjour hippolite,

Dim Lig As Long
Dim Col As Long
Dim NbrLig As Long
Dim NumLig As Long
Dim VNom As String

apres recherche et proposition sur le forum j en suis arrivé la sur mon depart de code
ActiveSheets = Sheets("Base").range("h5").Value
Col = 1
With Sheets("base")
For Lig = 15 To 27
If .Cells(Lig, Col).Value <> "XXXXX" Then 'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
.range("A" & Lig & ":C" & Lig & ",H" & Lig & ":I" & Lig & ",L" & Lig & ":N" & Lig).Copy
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Select ' range a la suite les lignes copiée
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets("Base").range("h5").Value
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = Sheets("Base").range("h11").Value
Worksheets(Sheets("base").range("H9").Value).Activate
ActiveSheet.Paste
End If
Next Lig
End With

ton code proposé fonctionne a merveille

je te remercie vivement du travail effectué


si je peux abuser de ton temps je voudrai reunir deux codes
j en ai un qui concerne la creation de feuille dans un dossier existant
si la feuille est cree un mess s affiche comme quoi elle existe deja
j aimerai qu a ce moment la ,le code que tu me propose ou le mien rentre en action et me copie les donnees sur la feuille existante

si dans le cas ou elle n existe pas , que celle ci copie le modele dans le classeur de destination et me range les donnees dans la feuille cree

le code de creeation de feuille que j utilise est
Dim VNom As String
VNom = Sheets("essai").Range("H9")
Workbooks.Open Filename:="C:\doc\prod.xls"
On Error Resume Next
If FeuilleExiste(VNom) Then
MsgBox "feuille" & VNom & " existe déjà"

LA DIFFICULTEE QUE J AI EST D ACCOCIER C EST 2 CODES JE PENSE QU IL DOIS FALLOIR JOUER SUR ACTIVATION DES CLASEURS
Exit Sub
Else
Sheets.Add
ActiveSheet.Name = VNom

EST ICI COPIE MODELE
ET INSCRITION DES DONNEES


en esperant de ne pas abuser de ton temps et de ta patiente

je te remercie vivement de ton aide

amicalement

ghislain
End If
 
Re : selection colonne pour range

Bonsoir,
Je pensais que tu avais compris qu'il faut des explications complètes et détaillées pour obtenir une réponse
ton post 1 ne permettait pas de répondre,
ton post 2 était parfait,
ton post 3 nécessite à nouveau une boule de cristal, la mienne est en panne !
Explique exactement ce que tu veux.
A+

nota : une coquille dans ton code
Code:
1:    On Error GoTo 0
 
Re : selection colonne pour range

re bonsoir ,
desolé de ne pas avoir ete clair


j utilise ce code pour creer dans un classeur exitant " prod.xls" se trouvant en c:\doc pour creer une nouvelle feuille .
cette feuille se creer en copiant le modele se trouvant dans le classeur "prod.xls
cette feuille est nomée avec le nom se trouvant dans la cellule du classeur " range donneeBon3" avec la cellule H9 de la feuille base
(nb classeur sur lequel tu m a aidé a creer le code parfait )

si la feuille existe celle ci n est pas creer mais signalée par un mess

ce qui donne

Dim VNom As String
VNom = Sheets("base").range("H9")
Workbooks.Open Filename:="C:\doc\prod"
On Error Resume Next
If FeuilleExiste(VNom) Then
MsgBox "feuille" & VNom & " existe déjà les données seront ajoutés a celles existantes"



Exit Sub
Else
Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = VNom
End If


je souhaite effectuer exactement la meme chose que le code que tu m a confectionnée
la seule difference est que les données ne soit pas collé dans le meme classeur mais dans le classeur nomé prod se trouvant sur c:\doc
apres le message "MsgBox "feuille" & VNom & " existe déjà les données seront ajoutés a celles existantes"
et si une nouvelle feuille est cree dans le classeur "prod.xls" que les données soient inscrites sur la nouvelle feuille creer


Dim VNom As String
VNom = Sheets("base").range("H9")
Workbooks.Open Filename:="C:\doc\prod"
On Error Resume Next
If FeuilleExiste(VNom) Then
MsgBox "feuille" & VNom & " existe déjà"

&&&&&&&&&&&&&&&&&&copie des données a la suite des autres &&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&les memes données et meme emplacement que le code que tu m a confectionnée mais dans le classeur "prod.xls' se trouvant sur c:\doc&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Dim Lig As Long&
Dim Col As Long
Dim FeuilDest As String
Dim DligFD As Long, Ld As Long
Application.ScreenUpdating = False
Col = 1
With Sheets("base")
FeuilDest = .range("h9").Value 'feuille de destination
DligFD = Sheets(FeuilDest).Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne 1ère col de la feuille de destination
Ld = DligFD + 1
For Lig = 15 To 27
If .Cells(Lig, Col).Value <> "XXXXX" Then 'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
.range("J6").Copy 'collage spécial pour ne pas importer la couleur de fond
Sheets(FeuilDest).range("A" & Ld).PasteSpecial Paste:=xlPasteValues
Sheets(FeuilDest).range("A" & Ld).NumberFormat = "m/d/yyyy"
.range("H11").Copy
Sheets(FeuilDest).range("B" & Ld).PasteSpecial Paste:=xlPasteValues
.range("A" & Lig & ":C" & Lig).Copy Destination:=Sheets(FeuilDest).range("c" & Ld)
.range("H" & Lig & ":I" & Lig).Copy Destination:=Sheets(FeuilDest).range("F" & Ld)
.range("L" & Lig & ":N" & Lig).Copy Destination:=Sheets(FeuilDest).range("H" & Ld)
Ld = Ld + 1
End If
Next Lig
End With
Application.ScreenUpdating = True




Exit Sub
Else
Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = VNom



&&&&&&&&&&&&&&&&&& creation de la feuille et copie des données &&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&les memes données et meme emplacement que le code que tu m a confectionnée mais dans le classeur "prod.xls' se trouvant sur c:\doc&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Col = 1
With Sheets("base")
FeuilDest = .range("h9").Value 'feuille de destination
DligFD = Sheets(FeuilDest).Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne 1ère col de la feuille de destination
Ld = DligFD + 1
For Lig = 15 To 27
If .Cells(Lig, Col).Value <> "XXXXX" Then 'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
.range("J6").Copy 'collage spécial pour ne pas importer la couleur de fond
Sheets(FeuilDest).range("A" & Ld).PasteSpecial Paste:=xlPasteValues
Sheets(FeuilDest).range("A" & Ld).NumberFormat = "m/d/yyyy"
.range("H11").Copy
Sheets(FeuilDest).range("B" & Ld).PasteSpecial Paste:=xlPasteValues
.range("A" & Lig & ":C" & Lig).Copy Destination:=Sheets(FeuilDest).range("c" & Ld)
.range("H" & Lig & ":I" & Lig).Copy Destination:=Sheets(FeuilDest).range("F" & Ld)
.range("L" & Lig & ":N" & Lig).Copy Destination:=Sheets(FeuilDest).range("H" & Ld)
Ld = Ld + 1
End If
Next Lig
End With
Application.ScreenUpdating = True



End If




j espere que mes explications seront plus clair

merci encore de ton aide

amicalement

ghislain
 
Re : selection colonne pour range

je te fais parvenir le classeur finale ou je souhaite avoir les donnees


donc classeur "range donneesbon3" la ou on copie les donnees qui se situe dans c:\ mes documents
(ce que fais ta macro et que je souhaite conserver )

la destination des donnees change : je les vpudrai dans le classeur nomé "prod.xls" (il se situe sur c:\doc)
(ta macro les colle dans le meme classeur, je veux qu elle les colle de la meme facon dans ce classeur "prod.xls" )

c est exactement la meme chose que ce qu effectue ton code hormis la destination du coller

tout ce que je trouve en post , je n arrive pas a l adapter a mon cas

merci encore de ta patience et disponibilité

je te joins le classeur devant recevoir les donnees en esperant avoir amenee plus de comprehension a ce post

amicalement

ghislain
 

Pièces jointes

Re : selection colonne pour range

Bonjour ghislain,
Essaie d'utiliser des noms qui parlent, j'ai renommé certaines sub en les modifiant pour pouvoir passer des paramètres, c'est plus souple si par la suite ces paramètres sont modifiés.
La sub Test appelle la sub de céation de feuille puis la recopie
Il faudra penser à la gestion des fichiers ouverture, fermeture,enregistrement, fichier préalablement déjà ouvert ... pour éviter des erreurs.
VB:
Public Sub test()
    CreaFeuil ThisWorkbook.Sheets("base").range("H9")
    Recopie dateBase:=ThisWorkbook.Sheets("base").range("J6"), FeuilDest:=ThisWorkbook.Sheets("base").range("H9"), FichDest:="prod.xls"
End Sub


Sub Recopie(dateBase As Date, FeuilDest As String, FichDest As String)
    Dim Lig As Long
    Dim Col As Long
    Dim DligFD As Long, Ld As Long
    Application.ScreenUpdating = False
    Col = 1
    With ThisWorkbook.Sheets("base")
        DligFD = Workbooks(FichDest).Sheets(FeuilDest).Cells(Rows.Count, 1).End(xlUp).Row    'dernière ligne 1ère col de la feuille de destination
        Ld = DligFD + 1
        For Lig = 15 To 27
            If .Cells(Lig, Col).Value <> "XXXXX" Then    'recherche sur la plage de la ligne 15 a27 les ligne ne comportant pas de "XXXXX"
                .range("J6").Copy    'collage spécial pour ne pas importer la couleur de fond
                Workbooks(FichDest).Sheets(FeuilDest).range("A" & Ld).PasteSpecial Paste:=xlPasteValues
                Workbooks(FichDest).Sheets(FeuilDest).range("A" & Ld).NumberFormat = "m/d/yyyy"
                .range("H11").Copy
                Workbooks(FichDest).Sheets(FeuilDest).range("B" & Ld).PasteSpecial Paste:=xlPasteValues
                .range("A" & Lig & ":C" & Lig).Copy Destination:=Workbooks(FichDest).Sheets(FeuilDest).range("c" & Ld)
                .range("H" & Lig & ":I" & Lig).Copy Destination:=Workbooks(FichDest).Sheets(FeuilDest).range("F" & Ld)
                .range("L" & Lig & ":N" & Lig).Copy Destination:=Workbooks(FichDest).Sheets(FeuilDest).range("H" & Ld)
                Ld = Ld + 1
            End If
        Next Lig
    End With
    Application.ScreenUpdating = True
End Sub


Public Function FeuilleExiste(sNomFeuille As String) As Boolean
    On Error GoTo Err_FeuilleExiste
    FeuilleExiste = False
    FeuilleExiste = Not ActiveWorkbook.Worksheets(sNomFeuille) Is Nothing
Err_FeuilleExiste:
End Function


Sub CreaFeuil(Vnom As String)  ' création d'une feuille dans "prod.xls" selon modèle
'ajouter une gestion de classeur déjà ouvert
    Workbooks.Open Filename:=ThisWorkbook.Path & "\prod.xls"    '"C:\doc\prod.xls"
    On Error Resume Next
    If FeuilleExiste(Vnom) Then
        MsgBox "feuille" & Vnom & " existe déjà"
        Exit Sub
    Else
        Sheets("MODELE").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = Vnom
    End If
End Sub
A+
 
Re : selection colonne pour range

bonsoir Hippolite,


je tien a te remercier du travail effectuer et vraiement chapeau pour le resultat le top du top


je viens de finaliser ce projet sur lequel j ai modifier quelques lignes car biensure n etant pas complet dans mes explications lol , j ai homis de dire que ces cellule contenaient des formules
avant de l integrer dans mon projet finale j ai donc operee de cette facson en suivant ta macro



.range("L" & Lig & ":N" & Lig).Copy
Workbooks(FichDest).Sheets(FeuilDest).range("H" & Ld).PasteSpecial Paste:=xlPasteValues
Workbooks(FichDest).Sheets(FeuilDest).range("H" & Ld).NumberFormat = "0.00"

a la place de celle ci dessous
'.range("L" & Lig & ":N" & Lig).Copy Destination:=Workbooks(FichDest).Sheets(FeuilDest).range("H" & Ld)


ca me copie la valeur de la cellule et ne me la laisse plus vide et me la met au bon format
du coup le collage s effectue dans une seule cellule au lieux de 3 , a n est pas genant


juste une question consernant l ouverture du fichier


'Workbooks.Open Filename:=ThisWorkbook.Path & "\mouvementpalette.xls"
tu as mit le code si dessus pour ouverture du claseur , code qui ne fonctionne pas sur mon pc

le l ai remplacée par celle ci
Workbooks.Open Filename:="C:\doc\mouvementpalette.xls"

a l occassion si tu peux m expliquer la difference entre les deux


je te souhaite une exelente soiree et encore merci pour cette enorme travail effectuer , de ta disponibilité et du temps que tu as pris pour resoudre mon post (mes posts lol)

tres amicalement ghislain
 
Re : selection colonne pour range

Re,
Filename:="C:\doc\mouvementpalette.xls : le nom du chemin est gravé en dur, si le dossier "doc" est déplacé, il faut mettre à jour la macro.
Filename:=ThisWorkbook.Path & "\mouvementpalette.xls : le chemin est relatif par rapport au fichier qui contient la macro, si le dossier "doc" (qui contient la macro et les autres fichiers utilisés) est déplacé, la macro reste valide.
A+
 
- 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
3
Affichages
548
Réponses
3
Affichages
534
Réponses
7
Affichages
971
Réponses
3
Affichages
951
Réponses
1
Affichages
1 K
Retour