recopie en vba avec boucle dans autre onglet

setsix

XLDnaute Nouveau
Bonjour,

Je suis un peu coincé pour copier des cellules d'un onglet à l'autre parce que je cale avec les boucles.

J'ai un tableau dans l'onglet brut qui change chaque semaine. Dans mon exemple, j'ai 13 produits mais je peux très bien en avoir 10 ou 20.

J'ai commencé à copier les colonnes code et description dans un nouvel onglet que j'ai nommé onglet resultat
( d'ailleurs quel code dois je ajouter pour ne pas avoir de message d'erreur si j'ai déjà un onglet resultat?)

Mais je cale pour les colonnes des semaines car les cases vides ne contenant ni promo ni solde m'empeche d'utiliser la même méthode que pour les colonnes code et description.

  1. Comment faire pour recopier avec des boucles, je sais que je dois utiliser un For i to nombre de ligne de la colonne code?
  2. Je suis aussi bloqué par le format des codes, j'ai soit des vrais valeurs soit des valeurs avec le petit triangle vert qui m'indique que c'est un nombre stocké en texte que je dois convertir. Que dois je utiliser parce que la copie en valeur ne marche pas?

Code:
Sub ABC()

'ajout onglet
Sheets.Add

'changement nom onglet
ActiveSheet.Name = "onglet resultat"

'copie colonne Code
Sheets("data").Select
Range("B3", Range("B3").End(xlDown)).Select

Selection.Copy
Sheets("onglet resultat").Select
Range("B8").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      
'copie colonne Description
Sheets("data").Select
Range("C8", Range("C8").End(xlDown)).Select



https://www.cjoint.com/c/HBybbSdQzNL
 

Lone-wolf

XLDnaute Barbatruc
Bonjour setsix :), le Forum :)

Tu ne peux pas renommer une nouvelle feuille avec le même nom. Voici un exemple à adapter à ton cas.

VB:
Option Explicit

Sub test()
Dim num As Long

    With Sheets("Feuil1")
        .Range("b4:b16,e4:i16").Copy
        .Range("a1") = .Range("a1") + 1
        num = .Range("a1")
    End With

    Sheets.Add After:=Sheets(Sheets.Count)

    With ActiveSheet
        .Range("b4").PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        .Range("a1").Activate
        If .Range("g16") <> "" Then Application.Goto Sheets("Feuil1").Range("a1")
        .Name = "Résultat " & num
    End With
End Sub
 
Dernière édition:

setsix

XLDnaute Nouveau
Bonjour setsix :), le Forum :)

Tu ne peux pas renommer une nouvelle feuille avec le même nom. Voici un exemple à adapter à ton cas.

VB:
Option Explicit

Sub test()
Dim num As Long

    With Sheets("Feuil1")
        .Range("b4:b16,e4:i16").Copy
        .Range("a1") = .Range("a1") + 1
        num = .Range("a1")
    End With

    Sheets.Add After:=Sheets(Sheets.Count)

    With ActiveSheet
        .Range("b4").PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        .Range("a1").Activate
        If .Range("g16") <> "" Then Application.Goto Sheets("Feuil1").Range("a1")
        .Name = "Résultat " & num
    End With
End Sub

Merci mais çà ne marche pas.
j'ai peut être mal expliqué ma demande:

en langage normal:
créer un onglet resultat (en évitant le bug s'il existe déjà)
ensuite copier la plage B3:B16 de data vers la cellule B8 de l'onglet resultat.
Mais mon souci est que dans le nombre de lignes de tableau est variable est donc que des fois je dois copier la plage B3:B18
 

Lone-wolf

XLDnaute Barbatruc
Re

Si l'onglet Resultat existe déjà tu ne peux pas créer une nouvelle feuille avec le nom Résultat, à moin que tu ne veuille supprimer l'ancienne feuille du même nom.

Pour copier avec des lignes variables, un exemple

With Sheets("Feuil1")
derlig = .Range("b" & Rows.Count).End(xlUp).Row
.Range("b3:b" & derlig).Copy Activesheet.Range("b8")
End With
 

setsix

XLDnaute Nouveau
Re

Si l'onglet Resultat existe déjà tu ne peux pas créer une nouvelle feuille avec le nom Résultat, à moin que tu ne veuille supprimer l'ancienne feuille du même nom.

Pour copier avec des lignes variables, un exemple

With Sheets("Feuil1")
derlig = .Range("b" & Rows.Count).End(xlUp).Row
.Range("b3:b" & derlig).Copy Activesheet.Range("b8")
End With

Merci d'avoir pris le temps de répondre
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi