Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copier-coller avec condition

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

D

Didier19

Guest
Bonjour,
Tout d'abord meilleur vœux à tous pour 2014.
Je suis en train de créer un fichier de trie par fournisseur mais je n'arrive pas faire le code VBA.

J' ai un fichier de base que je me sert lorsque je reçoit mes fournisseur.
A partir de se fichier, je souhaiterai éditer automatiquement un bon de commande reprenant les renseignement du fichier base et classer dans un onglet au nom du fournisseur.
pouvez-vous m'aider?
Ci-joint un exemple du fichier
 

Pièces jointes

Re : Copier-coller avec condition

Bonne nuit,

Une proposition commentée à essayer :
Code:
Sub Copier_Base()
Dim TVar As Variant
Dim Der As Long
Dim Max As Integer, Deb As Integer
Dim Nbre As Integer, Lig As Integer
Dim i As Integer, j As Integer, k As Integer
Dim Onglet As String

Sheets("Base").Select
'Chercher la dernière ligne non vide en colonne B
Max = Range("B1", Range("B65535").End(xlUp)).Rows.Count
TVar = Range("B2:B" & Max).Value
Max = 0
'Max = nombre de cas où la cellule fournisseur n'est pas vide
For i = 1 To UBound(TVar)
    If TVar(i, 1) <> "" Then Max = Max + 1
Next i
Lig = 2
'Boucler sur le nombre de cas
For k = 1 To Max
'Cherche à partir de la ligne Lig la prochaine ligne non vide en B
Der = Range("B" & Lig).End(xlDown).Row
'Vérifie que pour une ligne fournisseur (B) non vide, il y a une ligne produit non vide
If Range("B" & Lig) <> "" And Range("C" & Lig) <> "" Then
    'ne sert que lorsque k = Max
    If Der > 60000 Then Der = Range("B" & Max - 1).End(xlDown).Row
    'Nbre : Nbre de lignes (de colonne C à colonne F) à traiter
    Nbre = Der - Lig
    If Nbre = 0 Then Nbre = 1
    'prend le nom du fournisseur comme nom d'onglet
    Onglet = CStr(Range("B" & Lig))
    With Sheets(Onglet)
        .Activate
        'Première ligne libre dans le tableau récap du fournisseur
        Deb = .Range("A1", Range("A65535").End(xlUp)).Rows.Count
        Lig = Lig - 1
        For i = 1 To Nbre
            'Prend les valeurs de la ligne i, colonnes C à F
            TVar = Sheets("Base").Range("C" & Lig + i & ":F" & Lig + i).Value
            For j = 1 To 4
                'Recopie les valeurs pour chaque ligne de 1 à Nbre
                Cells(Deb + i, j) = TVar(1, j)
            Next j
        Next i
    End With
    'Lig = prochain cas où ligne non vide en B (Der)
    Lig = Der
'si colonne produit est vide Lig = prochaine ligne non vide en B (Der)
Else
    Lig = Der
End If
Sheets("Base").Select
Next k
End Sub
Je verrai demain s'il est possible d’optimiser le code. Bonne fin de nuit
A+ Jack2
 
Re : Copier-coller avec condition

Bonjour, jack2 et double zero
merci pour votre aide, vous êtes sacrément efficace!!!
Les deux solutions fonctionne parfaitement .
Encore un grand merci et à bientôt
 
Re : Copier-coller avec condition

Bonjour tout le monde,

Pour Didier19. il y a une erreur nocturne, il faut remplacer :

If Nbre = 0 Then Nbre = 1
par If Nbre < 0 Then Nbre = 1.
J'avais enlevé la formule de la colonne total comme l'a fait notre ami DoubleZero. Il rajouter une ligne en fin de boucle :
Code:
For j = 1 To 4
   Cells(Deb + i, j) = TVar(1, j)
Next j
Cells(Deb + i, j).FormulaR1C1 = "=RC[-2]*RC[-1]"
Par contre quel que soit le code retenu, il faut garder ou inclure le redimensionnement de la facture avec la variable c.

Pour DoubleZero. Ce genre d'astuce fait partie du Like +. Je vais essayer de trouver ce que j'ai appelé l'optimisation : Trouver comment traiter chaque fournisseur par "bloc" avec la fonction transpose avec Resize.

A+ Jack2
 
Re : Copier-coller avec condition

J'ai corriger le code comme indiqué, toutefois plus rien.
Je n' arrive plus à le faire tourner.
je crois que mon petit niveau à saturé
je te remet le fichier avec tes correction,
A+
 

Pièces jointes

Re : Copier-coller avec condition

Double zéro, ton fichier fonctionne très bien.
Toutefois lorsque je met le nom de mes fournisseurs dans les onglets ainsi que dans la colonne fournisseur de ma base et lorsque je veux créer un nouvelle onglet, mes modification empêche le bon fonctionnement.
Pourquoi?😕
 
Re : Copier-coller avec condition

Bonne nuit à nouveau Didier19,

J'ai corrigé le code, mais il reste un bug pour la dernière ligne. Je vais tout revoir comme je l'ai écrit hier. Par contre, le code de DoubleZero marche très bien. Comme tu l'as fait avec Test.xlsm, tu devrais mettre dans un fichier ce qui ne va pas (cf. hier 17h27). Si DoubleZero n'est parti en week-end, il te répondra ou je pourrais éventuellement t'aider. Par exemple, il est possible de créer automatiquement les onglets manquants en cliquant sur le fournisseur.

A+ Jack2
 
Re : Copier-coller avec condition

Bonjour, le Fil, le Forum,

Une autre façon de procéder... évitant la multiplication d'onglets.

A bientôt 🙂

P. S. : fichier retiré (un bout de code à supprimer 🙄)
 
Dernière édition:
Re : Copier-coller avec condition

Re-bonjour,

Voici le "bon" fichier.

A bientôt 🙂
Bonjour a tous,
lorsque je double click sur fournisseur comme tu me l'indique rien ne se passe.
L'idée de Jack2 de créer un nouvelle onglet en cliquant sur fournisseur me semble bien. Cela allègera Le fichier.

A+ Didier19
 

Pièces jointes

Re : Copier-coller avec condition

Re-bonjour,

...Voici le "bon" fichier...

J'espère que celui-ci est véritablement le "bon", avec les corrections idoines... 😕

A bientôt 🙂
 

Pièces jointes

Re : Copier-coller avec condition

Cette fois ci c'est la bonne.
Ton code marche parfaitement.
Un grand merci pour ton aide et ta patience,ainsi qu'a jack2.
A bientôt

Didier19

Bonsoir,
Je reviens vers vous car après avoir fait tourner avec succès puis modifier la mis en page toute en faisant attention a ne pas toucher les cellule codé, j'ai constaté que le bon de commande ne supporte pas le mis en page de BASE et n' arrive pas à calculer le total car les cellules se mélangent.
J'ai noté également sur la feuille bon de commande deux modification si c'est possible et en plus il faudrait que je puisse inscrire en bas de mon bon de commande une zone de texte comme celle-ci:

Le (date du jour comme en D2 actuellement)...., A.......
la fonction de la personne signaitaire,
le nom de la personne signataire​

J'espère ne pas top abuser mais ce fichier présenté ainsi me facilitera vraiment la vie.

A bientôt

Didier19
 

Pièces jointes

Dernière modification par un modérateur:
Re : Copier-coller avec condition

Bonjour, le Fil, le Forum,

Une autre version sera présentée au plus vite...

Est-il possible d'intégrer également l' adresse
d'après un base de donnée?

A condition de nous fournir la liste des informations nécessaires et factices.

A bientôt 🙂
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
701
Réponses
40
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…