Se connecter avec
S'enregistrer | Connectez-vous

Problème copie dans des onglets

Dernière réponse : dans Programmation

Bonjour,

je viens à vous car vous êtes mon dernier espoir !

je vous expose clairement mon problème :

J'ai par 2 feuilles dans mon classeur, avec deux type de données différentes, par exemple "A" et "B" comme données.

Dans le premier onglet j'ai 65499 "A" et 38 "B", et dans le deuxieme onglet j'ai 44 "A" et 5 "B".

J'ai fais une macro qui me crée des onglets avec chaque type et me les concatène.( pour etre plus précis, ma macro parcour l'onglet 1 , elle y voit "A" , elle crée un onglet "A" dans lequelle elle y copie les "A" de l'onglet 1, pareil pour le "B", puis elle va a l'onglet 2, elle regarde les données, il y a "A", elle regarde si l'onglet "A" existe, elle y copie les "A" de l'onglet 2 dans l'onglet "A" si celui ci existe ou crée un onglet s'il est inexistant et idem pour le "B")

Cela fonctionne parfaitement lorsque le total des "A" de chaque feuilles est inférieur à 65536 !

si le total dépasse alors une erreur me fait planter le tout.

Donc y aurait-il un moyen de crée un second onglet "A" nommé "A(2)" par exemple dans lequel je copie ce qui est en trop ?

Cordialement

zartoune

Autres pages sur : probleme copie onglets

Lassé par la pub ? Créez un compte
Expert Programmation

65536 ! Encore un qui confond Tableur & Base de données :pfff: 

-----------------------------------

Salut zartoune,

On va considérer que tu es contraint, par une force extérieure (genre ton patron), à utiliser un tableur là où il faudrait utiliser une base de données.

Dans ta boucle qui lit les "A", incrémente une variable (de type Long évidemment :sarcastic:  ) à chaque "A" lu.

Si cette variable s'appelle nA, le code pourrait ressembler à ça :
  1. Dim cible As Worksheet
  2.  
  3. ..
  4.  
  5. If nA Mod 65536 = 1 Then
  6. Set cible = Worksheet.Add
  7. cible.Name = "A (" & CStr(1 + nA \ 65536) & ")"
  8. End If
  9.  
  10. ..

Tu as tout compris pour la force extérieure :)  ( je suis tout à fait d'accord avec toi , une base de données est beaucoup plus adapté mais bon c'est son choix et je dois faire avec )

je te remercie pour ton aide, mais pour la copie comment puis-je faire , car en fait je copie les 44 "A", et excel n'aime pas que je colle 44 "A" alros qu'il n'y a que 37places de libre ?

mon code :

  1. Sheets(sOngletCourant).Select
  2.  
  3. Set rZoneACopier = Range(Cells(iLigne_Debut_zone, 1), Cells(iLigne, iNbColonnes)) ' Zone a copier
  4.  
  5. rZoneACopier.Copy
  6.  
  7. Sheets(sChaine).Select
  8.  
  9. If NewSheets Then
  10. Cells(2, 1).Select
  11. Else
  12. Cells(NbLigne, 1).Select
  13. End If
  14.  
  15. ActiveSheet.Paste 'ça plante là


Y aurait-il un moyen par exemple de "coller les 37 premiers dans l'onglet "A" et le reste dans l'onglet "A(2)"" ?
Lassé par la pub ? Créez un compte