Copie de cellule en excel en VBA
sebicool
-
sebicool -
sebicool -
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 :
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
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
A voir également:
- Copie de cellule en excel en VBA
- Excel cellule couleur si condition texte - Guide
- Liste déroulante excel - Guide
- Excel compter cellule couleur sans vba - Guide
- Proteger cellule excel - Guide
- Copie cachée - Guide
2 réponses
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+
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+