Macro pour copier contenu d'une colonne avec condition

Bonjour à tous,

Je voudais rajouter à mon macro certaine condition. Puisque je suis débutante, je sais pas ce que je dois écrire.

Alors, je demande votre aide.

Pour ma feuille "TCD", je veux que les lignes entre 9 et 250 des colonnes B, E, F, H, I soient copiées seulement si celles-ci contiennent dans la colonne H des chiffres et celle qui contient dans la colonne B des lettres.

Et ensuite que les lignes de la colonne B soit coller dans la feuille nommé "Feuil6" dans la colonne A à partir de la ligne 6,

Que les lignes entre 9 et 250 de la colonne E soit coller dans la feuille nommé "Feuil6" dans la colonne B à partir de la ligne 6.

Que les lignes entre 9 et 250 la colonne F soit coller dans la feuille nommé "Feuil6" dans la colonne C à partir de la ligne 6.

Que les lignes entre 9 et 250 la colonne I soit coller dans la feuille nommé "Feuil6" dans la colonne D à partir de la ligne 6.

Que les lignes entre 9 et 250 la colonne H soit coller dans la feuille nommé "Feuil6" dans la colonne E à partir de la ligne 6.

Dans l'exemple seulement les lignes 9, 10, 14, 16, 18, 20 des colonnes B, E, F, H, I seront copiées sur la feuille nommé "feuil6"

Merci, d'avance pour votre aide.

Je ne sais pas si ça vous sera utile, mais voici mon macro:

(si c'est possible, j'aimerais le raccourcir)

Sub Macro4()

'

' Macro4 Macro

'

' Touche de raccourci du clavier : Option+Cmd+y

'

Range("B9:B250").Select

Selection.Copy

Sheets("Feuil6").Select

Range("A6").Select

ActiveSheet.Paste

Sheets("TCD").Select

Range("E9:E250").Select

Selection.Copy

Sheets("Feuil6").Select

Range("B6").Select

ActiveSheet.Paste

Sheets("TCD").Select

Range("F9:F250").Select

Selection.Copy

Sheets("Feuil6").Select

Range("C6").Select

ActiveSheet.Paste

Sheets("TCD").Select

Range("I9:I250").Select

Selection.Copy

Sheets("Feuil6").Select

Range("D6").Select

ActiveSheet.Paste

Sheets("TCD").Select

Range("H9:H250").Select

Selection.Copy

Sheets("Feuil6").Select

Range("E6").Select

ActiveSheet.Paste

End Sub

Bonsoir

Tu peux être plus précis

maguy a écrit :

je veux que les lignes entre 9 et 250 des colonnes B, E, F, H, I soient copiées seulement si celles-ci contiennent dans la colonne H des chiffres et celle qui contient dans la colonne B des lettres.

Tu veux les copier où ?

Dans la colonne B entre les lignes 9 et 250, il n'y aucune cellule contenant des lettres

Le plus simple tu fais un exemple manuel de ce que tu veux avoir comme résultat

Bonsoir,

une macro basée sur ce que tu as demandé, saches cependant qu'avec l'exemple que tu as donné, seules les lignes 5, 10,16 et 20 sont copiées et que pour la ligne 5, ce sont des cellules vides qui sont copiées. donc soit l'exemple n'est pas bon, soit les instructions ne sont pas correctes. j'ai fait l'hypothèse que c'était le premier cas.

Sub reformat()
Set ws1 = Sheets("TCD")
Set ws2 = Sheets("Feuil6")
dl = ws1.Range("G" & ws1.Rows.Count).End(xlUp).Row
k = 5
For i = 1 To dl
  If (ws1.Range("H" & i) <> "" And IsNumeric(ws1.Range("H" & i).Value)) Or ws1.Range("B" & i) <> "" Then
   k = k + 1

   ws2.Range("B" & k) = ws1.Range("E" & i)
   ws2.Range("C" & k) = ws1.Range("F" & i)
   ws2.Range("D" & k) = ws1.Range("I" & i)
   ws2.Range("E" & k) = ws1.Range("H" & i)
  End If
Next i
Set ws1 = Nothing
Set ws2 = Nothing
End Sub

bonsoir Banzai

Désolé, j'ai mal expliqué mon problème. J'ai refait mon fichier d'exemple qui est plus haut.

La feuille "Feuil6" contient le résultat que je veux.

Je veux copier les informations qui se retrouvent dans les colonnes B,E,F,H,I. et soit collé dans la feuille nommé "Feuil6"

La colonne B de la feuille "TCD" dans la feuille "Feuil6" colonne A à partir de la ligne 6

La colonne E de la feuille "TCD" dans la feuille "Feuil6" colonne B à partir de la ligne 6.

La colonne F de la feuille "TCD" dansla feuille "Feuil6" colonne C à partir de la ligne 6.

La colonne H de la feuille "TCD" dans la feuille "Feuil6" colonne E à partir de la ligne 6.

La colonne I de la feuille "TCD" dans la feuille "Feuil6" colonne D à partir de la ligne 6.

Si seulement les lignes de 9 à 250 de la feuille "TCD" contiennent à la colonne H des chiffres OU si elle contiennent des lettre à la colonne B.

Merci beaucoup pour votre temps.

Bonjour

A tester

Bonjour Banzai64,

c'est ça que je voulais. Mais la seul chose c'est que dans mon vrai fichier ça ne fonctionne pas correctement.

J'ai plusieurs feuille dans mon fichier. Il faut vraiment que les informations des lignes entre 9 et 150 de mon tableau croisé dynamique de la feuille "TCD" soient copiées vers ma feuille "Feuil6". C'est exactement les même colonnes que mon exemple plus haut.

Merci beaucoup pour tout.

Bonjour

maguy a écrit :

ça ne fonctionne pas correctement.

C'est top secret de dire ce qui ne va pas

Dans le code que je t'ai donné la limite de la ligne peut être dépassée si des données en colonnes B à G sont situées après

bonjour Banzai64,

je n'ai plus le temps de continuer pour cette semaine. Mais, je vais penser durant cette semaine comment mieux t'expliqué mon problème. Je te reviendrai avec ça la semaine prochaine. Merci pour ta grande patience, je l'apprécie beaucoup. Tu m'as souvent aidé et ça toujours fonctionné jusqu'à maintenant. Merci. 8)

Bonjour,

j'ai refait mon dossier. Il est plus complet.

je pense que la raison que les macros ne fonctionnaient pas c'est à cause de mon tableau croisé dynamique dans mon dossier réel.

voici un résumé de ce que je veux:

J'ai dans mon dossier une feuille nommée "TCD". J'aimerais avoir un macro qui copierait les colonnes B, E, F, H, I à partir de la ligne 9 de chacune d'elle. Et copier les informations dans le tableau de ma feuille "Modele tel" à partir de la ligne 10. Ce qui est écrit en orange foncé sont la disposition de mes informations que je désire avoir. Le macro devra copier les lignes des colonnes (B,E,F,H,I) seulement quand la colonne B et H ont des informations inscrites.

Si ce n'est pas possible ou trop compliqué de mettre les informations dans mes tableaux sur la feuille "Modele tel", j'aimerais que mon macro crée une feuille nommé "Tel" et copie les informations avec mes condition exigées et à la disposition voulu comme les écrits oranges sur ma feuille "Modele tel".

Merci beaucoup pour votre temps à tous.

61tableau-fictif.xlsm (192.49 Ko)

Bonjour,

il me paraît beaucoup plus simple de partir d'une extraction sur base de la liste que de passer via un TCD. Quelle est l'utilité du TCD pour générer les fiches ?

voici une macro qui génére toutes les fiches territoires sur base de la feuille liste.

Sub genfiche()
' crée un fiche (feuille) par territoire sur base de la feuille liste
Set ws1 = Worksheets("liste")
' i pointeur de ligne dans liste
i = 4
' territoire = territoire en cours
territoire = ""
' on parcourt toute la liste, fin détectée par une cellule vide en colonne A
While ws1.Range("A" & i) <> ""
   ' si changement de territoire, on crée une nouvelle feuille sur base du modèle
   If ws1.Range("A" & i) <> territoire Then
    Worksheets("modele tel").Copy after:=Worksheets(Worksheets.Count)
    Set wsf = Worksheets(Worksheets.Count)
    ' on prend note du changement de territoire en cours
    territoire = ws1.Range("A" & i)
    ' on renomme la feuille
    wsf.Name = "territoire " & territoire
    ' on copie les données d'entête de la fiche
    wsf.Range("C3") = territoire
    wsf.Range("C4") = ws1.Range("K" & i)
    ' rue = rue en cours
    rue = ""
    ' j = pointeur de ligne sur la fiche territoire
    j = 9
   End If
   ' si changement de rue
   If ws1.Range("D" & i) <> rue Then
    ' on crée un entête de rue
    j = j + 1
    ' on prend note du changement de rue en cours
    rue = ws1.Range("D" & i)
    '  on copie le nom de la rue sur la fiche
    wsf.Range("A" & j) = rue
   End If
   ' on copie les données de la liste dans la fiche
   j = j + 1
   wsf.Range("B" & j) = ws1.Range("C" & i)
   wsf.Range("C" & j) = ws1.Range("E" & i)
   ' wsf.Range("D" & j) = ? pas trouvé dans liste
   wsf.Range("E" & j) = ws1.Range("H" & i)
   ' wsf.Range("F" & j) =? pas trouvé dans liste
   ' wsf.Range("G" & j) = ? pas trouvé dans liste
   wsf.Range("H" & j) = ws1.Range("I" & i)
   i = i + 1
Wend
Set ws1 = Nothing
Set wsf = Nothing
End Sub

Bonjour H2so4,

Je te merci beaucoup pour tout le travail. Ton macro me sera très utile.

La raison du TDC est que j'ai en réalité environ 10 000 adresses. Ceux qui vont voir les clients ont chacun un territoire en leur possession (30 sur 200 territoires environ de sorti) Alors, il y a des changements continuels sur les territoires.

Est-ce qu'on peut rajouter à ton macro une commande qui lui dirait d'aller chercher seulement le territoire qui est sélectionné en haut du tableau croisé dynamique nommé "numéro de territoire" et inscrire seulement les clients qui ont des numéro de téléphone.

Merci encore.

Bonjour,

le TCD ne sert-il qu' à choisir le territoire pour lequel il faut générer une fiche ?

voici,

note : pour la mise en page, je te conseille d'utiliser les options de mise en page d'excel pour l'impression, plutôt que de faire ta découpe en pages dans la feuille excel.

Sub genfiche()
' crée un fiche (feuille) par territoire sur base de la feuille liste
Set ws1 = Worksheets("liste")
' i pointeur de ligne dans liste
i = 4
' territoire = territoire en cours
territoire = Worksheets("TCD").Range("B4")
' on crée une nouvelle feuille sur base du modèle
Worksheets("modele tel").Copy after:=Worksheets(Worksheets.Count)
Set wsf = Worksheets(Worksheets.Count)
wsf.Name = "territoire " & territoire
' on copie les données d'entête de la fiche
wsf.Range("C3") = territoire
wsf.Range("C4") = ws1.Range("K" & i)
' rue = rue en cours
rue = ""
' j = pointeur de ligne sur la fiche territoire
j = 9
' on parcourt toute la liste, on sélectionne les lignes correspondant au territoire
While ws1.Range("A" & i) <> ""

 If ws1.Range("A" & i) = territoire Then
   ' si changement de rue
  If ws1.Range("D" & i) <> rue Then
    ' on prend note du changement de rue en cours
   rue = ws1.Range("D" & i)
   telpourlarue = 0
    '  on copie le nom de la rue sur la fiche

  End If
   ' on copie les données de la liste dans la fiche
  If ws1.Range("I" & i) <> "" Then
   telpourlarue = telpourlarue + 1
   If telpourlarue = 1 Then
    ' on crée un entête de rue
    j = j + 1
    wsf.Range("A" & j) = rue
   End If
   j = j + 1
   wsf.Range("B" & j) = ws1.Range("C" & i)
   wsf.Range("C" & j) = ws1.Range("E" & i)
   wsf.Range("E" & j) = ws1.Range("H" & i)
   wsf.Range("H" & j) = ws1.Range("I" & i)
  End If
 End If
 i = i + 1
Wend
Set ws1 = Nothing
Set wsf = Nothing
End Sub

Bonjour H2so4,

Un gros merci. Je suis tellement contente, ça fonctionne très bien.

Il me reste une seule chose à réglé. Peut-on rajouter dans la macro une commande pour que les données qui dépasse le tableau nommé page 1 se transfèrent au tableau suivant nommé page 2, et ainsi de suite. J'ai au total 12 pages. J'aimerais aussi que la dernière rue inscrit dans la page 1. se copie en haut de la page 2, et la dernière de la page 2 dans la page 3, etc.

J'ai refait mon dossier pour bien comprendre. Ma feuille "territoire 222a" est un exemple de ce que je veux. La disposition voulu est en orange.

Après j'aurais fini, grâce à votre aide et celle des autres. Merci

24tableau-fictif.xlsm (225.93 Ko)

Bonsoir,

à quoi sert cette mise en page ? à imprimer ? les options d'impression font cela très bien. Il suffit définir quelles sont les lignes qui doivent être répétées sur chaque page.

tu trouveras cependant le code adapté pour ta mise en page.

20tableau-fictif.xlsm (200.37 Ko)

code mise en page ajouté dans mon message précédent.

Bonjour H2so4,

Merci beaucoup. Tout fonctionne très bien. Tu m'as été d'une grande aide.

Désolé si j'ai pris du temps à te répondre. Je n'avais pas reçu de émail pour me dire que quelqu'un m'avait répondu.

Encore merci pour tout.

bonsoir,

il me semblait avoir vu une demande supplémentaire liée à tes remerciements, je vois qu'elle a disparu dans l'intervalle. Enfin voici le code modifié permettant de mettre page x/z.

29tableau-fictif-2.xlsm (200.37 Ko)

Bonjour H2so4,

Oui, effectivement j'avais fait une demande. Mais je me suis dit que c'était qu'un détail. Je ne voulais pas te déranger encore pour ça. Alors, je l'avais effacé. Merci pour ton macro, mais malheureusement il ne fonctionne pas pour ma demande.

Je voulais qu'à la place de marqué p. 1 , p. 2, ... (en haut de chaque page dans la colonne "H" et "U") qu'on marque p. 1/nb total de page qu'il à des informations inscrites. Exemple p. 1/2 et p. 2/2 pour le dossier "tableau fictif".

Merci.

il me semblait avoir envoyé une version adaptée, mais ce n'était pas le cas.

voici

28tableau-fictif.xlsm (216.39 Ko)
Rechercher des sujets similaires à "macro copier contenu colonne condition"