Macro Excel

mon code modifier avec annotations, à modifier pour que ça "fit" avec le classeur de destination, avec les commentaires tu devrais pouvoir le faire:

    On Error GoTo fin
    'gèle l'écran pour ne pas voir le traitement
    Application.ScreenUpdating = False

    'Le classeur source
    Dim WbSource As Workbook
    Set WbSource = ActiveWorkbook

    'Le classeur de destination, change test.xls pour ton classeur
    Dim WbDest As Workbook
    Set WbDest = Workbooks.Open("c:\Test.xls")

    'la ligne du classeur destination à partir de laquelle on va copier les infos
    Dim Ligne As Range
    Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)

    With WbSource.Sheets("bon_nominette")
        'fait le traitement 4 fois pour les cellules A6 à A9
        For i = 1 To 4
            'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
            If .Range("A" & 5 + i).Value <> "" Then
                Ligne.Value = .Range("A" & 5 + i).Value
                'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
                Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value
                Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value
                Ligne.Offset(0, 3).Value = .Range("D3").Value
                'Descend la ligne de 1 pour continuer à écrire
                Set Ligne = Ligne.Offset(1, 0)
            End If
        Next i
    End With

fin:
    'ferme le classeur destination
    If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True
    Application.ScreenUpdating = True
    Unload Me

je ne savais pas trop ce que tu voulais imprimer et quand, mais tu a dis que tu avais la solution, donc tu devrais pouvoir l'inclure.

merci, mais il bloque avec le Me de Unload Me

Enleve cette ligne, je pensais que tu utilisais le code dans un userform.

voila ce que j'ai fait, mais ca fonctionne pas

Sub nominette_chapelle()

'

' Nominette Macro

' Macro enregistrée le 11/10/2011 par Lorek

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

On Error GoTo fin

'gèle l'écran pour ne pas voir le traitement

Application.ScreenUpdating = False

'Le classeur source

Dim WbSource As Workbook

Set WbSource = ActiveWorkbook

'Le classeur de destination, change test.xls pour ton classeur

Dim WbDest As Workbook

Set WbDest = Workbooks.Open("c:\Test.xls")

'la ligne du classeur destination à partir de laquelle on va copier les infos

Dim Ligne As Range

Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)

With WbSource.Sheets("bon_nominette")

'fait le traitement 4 fois pour les cellules A6 à A9

For i = 1 To 4

'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir

If .Range("A" & 5 + i).Value <> "" Then

Ligne.Value = .Range("A" & 5 + i).Value

'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes

Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value

Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value

Ligne.Offset(0, 3).Value = .Range("D3").Value

'Descend la ligne de 1 pour continuer à écrire

Set Ligne = Ligne.Offset(1, 0)

End If

Next i

End With

fin:

'ferme le classeur destination

If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True

Application.ScreenUpdating = True

End Sub

t'as pas changé cette ligne

. . .

'Le classeur de destination, change test.xls pour ton classeur

Dim WbDest As Workbook

Set WbDest = Workbooks.Open("c:\Test.xls")

. . .

Bonjour,

ok, j'ai modifier le fichier, par contre, j'ai surement des choses a modifié dans la partie qui suit, mais je reconnais que je patauge un peu:

With WbSource.Sheets("bon_nominette")

'fait le traitement 4 fois pour les cellules A6 à A9

For i = 1 To 4

'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir

If .Range("A6" & 5 + i).Value <> "" Then

Ligne.Value = .Range("A" & 5 + i).Value

'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes

Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value

Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value

Ligne.Offset(0, 3).Value = .Range("D3").Value

'Descend la ligne de 1 pour continuer à écrire

Set Ligne = Ligne.Offset(1, 0)

End If

dit moi ce qui ne marche pas et on verra ce qui faut changer, est-ce que les données s'écrivent dans la bonne feuille de ton classeur, elle sont pas dans les bonnes colonnes, etc...

il n'y a rien qui s'affiche

... dans ton fichier destination je suppose?

tu voulais que les données soient recopiées dans un autre fichier dans l'onglet Nominette. Est-ce qu'il y a bien un onglet qui s'appelle nominette dans ton classeur de destination?

C'est dans cette ligne qu'est défini le nom de l'onglet

Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)

Est-ce que le nom de ton onglet "source" est toujours "bon_nominette"

With WbSource.Sheets("bon_nominette")

J'avais ajouté un test pour ne pas copier les lignes qui n'avait pas de qte, peut-être que le problème vient de la

If .Range("A" & 5 + i).Value <> "" Then

Tu peux toujours enlever la ligne

On Error GoTo fin

s'il y a un erreur durant le traiement, tu vas voir où

Sinon zip tes deux fichiers et joint les au message.

voila le premier fichier, lez second suit


voila, je les renomé Nominette 2, pour ne pas confondre avec l'originale et j'ai mis un com dans la page Bon_nominette du fichier exemple.

Encore un grand merci

voila avec les deux fichiers que tu m'as envoyé:

Le code du bouton

        On Error GoTo fin
        'gèle l'écran pour ne pas voir le traitement
       Application.ScreenUpdating = False

        'Le classeur source
       Dim WbSource As Workbook
        Set WbSource = ActiveWorkbook

        'Le classeur de destination, change test.xls pour ton classeur
       Dim WbDest As Workbook
        Set WbDest = Workbooks.Open("C:\Nominette2.xls")

        'la ligne du classeur destination à partir de laquelle on va copier les infos
       Dim Ligne As Range
        Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)

        With WbSource.Sheets("bon_nominette")
            'fait le traitement 4 fois pour les cellules A6 à A9
           For i = 1 To 4
                'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
               If .Range("A" & 5 + i).Value <> "" Then
                    Ligne.Value = .Range("B" & 5 + i).Value
                    'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
                   Ligne.Offset(0, 3).Value = .Range("C" & 5 + i).Value
                    Ligne.Offset(0, 8).Value = .Range("A" & 5 + i).Value
                    'Descend la ligne de 1 pour continuer à écrire
                   Set Ligne = Ligne.Offset(1, 0)
                End If
            Next i
        End With

fin:
        'ferme le classeur destination
       If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True
        Application.ScreenUpdating = True

tu n'avais pas changer le nom de l'onglet de cette ligne

 Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)

la si tu change le nom des fichiers, des onglets ou que tu ajoute des colonnes dans le fichier nominette, oublie pas de modifier le code, sinon c'est sur que ça marchera pas.

bonsoir,

desole pas su repondre plus tot, petit probleme avec la connexion internet!

Pour la ligne que tu dis, elle me semble correct, vu qu'on amene les infos, sur le fichier Nominette, onglet Feuil1.

j'ai fait un petit test, mais ca ne fonctionne pas trop,

Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0), est ce que le Offset de cette ligen veux dire qu'il amenera les info a partir de la ligen 1 ou 0?

le offset(1,0) sert à descendre d'une ligne:

Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)

sert à trouver la dernière ligne avec du texte de la colonne B

Sert à descendre d'une ligne pour avoir la ligne suivante

Bonsoir, dis moi si j'arrive a ziper les deux fichier, pourrais tu m'aider pour faire se transfert avec les codes, car ca ne fonctionne pas trop, il doit y avoir un trucs sur lequel, je passe a coté.

bonjour,

j'ai une petite demande, comment puis je faire pour qu'une info soit remplacer par la modification:

exemple:

j'ai un prix en 'D11' feuille livraison , il est afficher directement en fonction de la recherche :

=RECHERCHEV(D3;'Produits Référencés'!A2:O10004;9;FAUX)

et je voudrais pouvoir modifier sur la feuille livraison et qu'il remplace celui de la feuille "produits référencés"

d'avance Merci

Bonjour

je viens a vous, dans l'espoir de trouver reponse a mes questions:

j'ai fait des UseForm et quand je clic sur un onglet, je n'arrive pas a faire en sorte qu'il affiche une donnée dans la case correspondante et surtout qu'il descende d'une ligne si celle superieur est occupée (pourtant j'utilise le offset(1;0))

Est ce possible qu'il additionne automatiquement si un des onglet selectionné, existe deja dans la vente?

et derniere petit question, c'est possible de fermer un Userform apres avoir cliquer sur l'onglet et qu'il aie ouvert le second?

je vous remercie beaucoup d'avance

Lorek

Rechercher des sujets similaires à "macro"