recopie en vba avec boucle dans autre onglet

  • Initiateur de la discussion Initiateur de la discussion setsix
  • 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 !

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
 
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:
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
 
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
 
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
 
- 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

  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
795
Retour