Copie de cellule en excel en VBA

Fermé
sebicool - 14 janv. 2009 à 10:47
 sebicool - 14 janv. 2009 à 12:03
Bonjour,

voici mon problème :
j'ai deux onglets dans un fichier excel et je dois, pour chaque ligne du premier onglet, récupérer dans le deuxième onglet des cellules pour les copier dans le premier onglet.
Schématiquement, en espérant que ce soit plus clair :
1er onglet:
ligne 1 : blabla1 | blabla2 | blabla3 | ... | blablan
ligne 2 : blublu1 | blublu2 | blublu3 | ... | blublun
...

2eme onglet:
ligne 1 : blibli1 | blibli2 | blibli3 | ... | bliblin
ligne 2 : blabla1 | blabla2 | blabla3 | ... | blablan
...

Je parcours donc la première ligne du premier onglet, je vais chercher la ligne correspondante dans l'onglet 2 et je copie les celllules 10 à n pour les coller dans la ligne du premier onglet à l'endroit correspondant.
J'espère que c'est plus clair.

Voici mon code :

Sub MAJ_CALCUL2()
    Dim num_ligne As Integer
    Dim val_A As String
    Dim val_B As String
    Dim val_C As String
    Dim val_D As String
    Dim val_E As String
    Dim val_F As String
    Dim val_G As String
    Dim val_H As String
    Dim val_I As String
    Dim groupe As String
    Dim donnees_a_copier As Range
    Worksheets(1).Activate
    Range("A2").Select 'selection pour mettre la cellule active au bon endroit
    num_ligne = ActiveCell.Row
    If Not ActiveCell.Value = "" And num_ligne = 2 Then 'si le fichier n'est pas vide
        Do Until ActiveCell.Value = "" 'Boucle tant qu'il y a des données
            'récupération des valeurs des colonnes utiles (A à I)
            val_A = ActiveCell.Value
            val_B = ActiveCell.Offset(0, 1).Value 'le offset décale d'un cran sur la droite
            val_C = ActiveCell.Offset(0, 2).Value
            val_D = ActiveCell.Offset(0, 3).Value
            val_E = ActiveCell.Offset(0, 4).Value
            val_F = ActiveCell.Offset(0, 5).Value
            val_G = ActiveCell.Offset(0, 6).Value
            val_H = ActiveCell.Offset(0, 7).Value
            val_I = ActiveCell.Offset(0, 8).Value
            groupe = val_A & val_B & val_C & val_D & val_E & val_F & val_G & val_H & val_I
            
            
            'appel à la fonction de récupération du calcul2
            donnees_a_copier = Recuperer_Valeur_Calcul2(groupe)
            
            'on réactive la feuille 1
            Worksheets(1).Activate
            
            'Copie_valeur_Calcul2()
            If donnees_a_copier <> Nothing Then
                ActiveCell.Range("J1:AM1").Select = donnees_a_copier
            End If
            
            ActiveCell.Offset(1, 0).Select 'selection des données de la ligne suivante
        Loop
    End If
    
End Sub

Function Recuperer_Valeur_Calcul2(groupe)
    'on active la feuille 2
    Worksheets(2).Activate
    Range("A1").Select 'selection pour mettre la cellule active au bon endroit
    'Boucle pour connaitre le nombre de ligne du fichier
    Dim NbLigne As Integer
    Dim val_A2 As String
    Dim val_B2 As String
    Dim val_C2 As String
    Dim val_D2 As String
    Dim val_E2 As String
    Dim val_F2 As String
    Dim val_G2 As String
    Dim val_H2 As String
    Dim val_I2 As String
    Dim groupe2 As String
        Do While Not (IsEmpty(ActiveCell))
            NbLigne = NbLigne + 1
            ActiveCell.Offset(1, 0).Select
        Loop

If NbLigne > 1 Then 'si le fichier comporte des données
    'On remet le curseur au bon endroit
    Range("A2").Select
        Do While (Not (IsEmpty(ActiveCell)) And groupe <> groupe2)
            val_A2 = ActiveCell.Value
            val_B2 = ActiveCell.Offset(0, 1).Value 'le offset décale d'un cran sur la droite
            val_C2 = ActiveCell.Offset(0, 2).Value
            val_D2 = ActiveCell.Offset(0, 3).Value
            val_E2 = ActiveCell.Offset(0, 4).Value
            val_F2 = ActiveCell.Offset(0, 5).Value
            val_G2 = ActiveCell.Offset(0, 6).Value
            val_H2 = ActiveCell.Offset(0, 7).Value
            val_I2 = ActiveCell.Offset(0, 8).Value
            groupe2 = val_A2 & val_B2 & val_C2 & val_D2 & val_E2 & val_F2 & val_G2 & val_H2 & val_I2
            
            If groupe = groupe2 Then
                'copie des cellules du calcul2
                ActiveCell.Range("J1:AM1").Select
                Copie_Calcul2 = Selection.Copy
            End If
            
            ActiveCell.Offset(1, 0).Select
        Loop
End If
    Recuperer_Valeur_Calcul2 = Copie_Calcul2
End Function


En fait ce qui me gène, c'est le format de la sélection de cellule "donnees_a_copier". C'est quoi comme format? J'ai essayé Range, Variant et autre mais ca ne convient pas.
De même, je ne sais pas quoi mettre pour la condition au cas où la ligne correspondante n'ait pas été trouvée et donc qu'il n'y a rien dans la variable.

Merci pour votre aide et j'espère que mon problème a été clairement exposé...
Si vous voyez une méthode plus efficace, je suis aussi évidemment preneur!

Cordialement,
Sebicool

2 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
14 janv. 2009 à 11:23
Bonjour,
C'est du tout, du tout clair, même avec ton code je ne vois pas ce que tu veux faire.
Pour te faire comprendre, et si c'est possible, tu met un exemple de ton classeur sur Cjoint.com et mettre le lien sur un poste suivant
Pas besoin du code mais de 2 feuilles
Feuille 1 avec les données et feuil2 avec le résultat souhaiter (fait manuellement )
A+
0
Bonjour,

désolé, je sais que ça n'était pas très compréhensible...
Mais j'ai réussi à m'organiser autrement et du coup je n'ai plus besoin de l'info...
Merci quand même.

Cordialement,
Sebicool
0