Copier une valeur si la cellule de gauche n'est pas vide
tyranausor
Messages postés
3545
Date d'inscription
Statut
Membre
Dernière intervention
-
Theo.R Messages postés 575 Date d'inscription Statut Membre Dernière intervention -
Theo.R Messages postés 575 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un fichier Excel avec une macro. Elle va, en cliquant sur le bouton [Archiver], copier toutes les données de la feuille Saisie sur la feuille Archives. Dans la rédaction de la macro, que vous trouverez dans le fichier ci-joint, je bloque sur :
tout le reste de la macro se trouve dans le fichier
le fichier : https://www.cjoint.com/?3ApuaMO23kG
j'ai un fichier Excel avec une macro. Elle va, en cliquant sur le bouton [Archiver], copier toutes les données de la feuille Saisie sur la feuille Archives. Dans la rédaction de la macro, que vous trouverez dans le fichier ci-joint, je bloque sur :
If Range("B"&i) <> "" Then
'Si la cellule B... est vide, alors
Sheets("Saisie").Select
Range("A2").Select
'Sélectionne la cellule A2
Application.CutCopyMode = False
Selection.Copy
'Copie
Sheets("Archives").Select
'Ouvre la feuille "Archives"
Selection.PasteSpecial Paste:=xlPasteValues
End If
tout le reste de la macro se trouve dans le fichier
le fichier : https://www.cjoint.com/?3ApuaMO23kG
A voir également:
- Si cellule non vide alors copier
- Excel cellule couleur si condition texte - Guide
- Supprimer page word vide - Guide
- Excel si cellule contient partie texte ✓ - Forum Excel
- Nb si ens non vide ✓ - Forum Excel
- Comment copier une vidéo youtube - Guide
4 réponses
Salut !
Tente le Débogage quand ça bloque, ça t'indique à quel niveau ;)
Dans ton cas, la première ligne n'est pas bien définie :
If Range("B"&i) <> "" Then
Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets(TAFEUILLE).Range("B" & Rows.Count).End(xlUp).Row
If Sheets(TAFEUILLE).Range("B"&i).Value <> "" Then
For i=1 to DernLigne
'tu mets ici ton code pour copier-coller
(...)
Next i
End If
Par ailleurs, je t'invite à préciser .Value ou .Text après Range(...) pour que ce soit bien le contenu de la cellule qui doit être non vide.
Dis-moi si ça te convient :)
Tente le Débogage quand ça bloque, ça t'indique à quel niveau ;)
Dans ton cas, la première ligne n'est pas bien définie :
If Range("B"&i) <> "" Then
Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets(TAFEUILLE).Range("B" & Rows.Count).End(xlUp).Row
If Sheets(TAFEUILLE).Range("B"&i).Value <> "" Then
For i=1 to DernLigne
'tu mets ici ton code pour copier-coller
(...)
Next i
End If
Par ailleurs, je t'invite à préciser .Value ou .Text après Range(...) pour que ce soit bien le contenu de la cellule qui doit être non vide.
Dis-moi si ça te convient :)
Bonjour, merci pour ta réponse.
Je connais le débogage mais je ne comprends pas toujours ce qui ne va pas (je ne suis pas très fort en VBA).
Sinon, tu mets deux fois IF et ça dérange Excel!
Je connais le débogage mais je ne comprends pas toujours ce qui ne va pas (je ne suis pas très fort en VBA).
Sinon, tu mets deux fois IF et ça dérange Excel!
En fait, j'ai tout recopié mais je me suis planté, j'ai laissé une ligne en trop!
En fait, j'ai ce code
Excel me dit que la ligne "If Sheets("Archives").Range("B" & i).Value <> "" Then" (en gras dans le code) ne va pas (erreur 1004)
Tu as une idée?
En fait, j'ai ce code
Sub Archivage()
'
' Archivage Macro
'
'
If Application.CountA(Range("C6:I12")) = 0 Then
'Si la plage C6:I12 est vide, on n'exécute pas la macro
MsgBox "Aucune heure n'a été saisie!", vbCritical + vbOKOnly, "Application de paie"
'Affiche un message d'erreur
Else: Range("A6:I12").Select
'Sinon, la macro est exécutée
Application.CutCopyMode = False
Selection.Copy
Sheets("Archives").Select
'Sélection de la feuille "Archives"
Range("B65000").End(xlUp).Offset(1).Select
'ici tu colles
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C40").Select
Sheets("Saisie").Select
Range("L6:O12").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Archives").Select
Range("B65000").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
'Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets("Archives").Range("B" & Rows.Count).End(xlUp).Row
If Sheets("Archives").Range("B" & i).Value <> "" Then
For i = 1 To DernLigne
'tu mets ici ton code pour copier-coller
Sheets("Saisie").Select
Range("A2").Select
'Sélectionne la cellule A2
Application.CutCopyMode = False
Selection.Copy
'Copie
Sheets("Archives").Select
'Ouvre la feuille "Archives"
Range("A65000").End(xlUp).Offset(1).Select
'Offset = décalage
Selection.PasteSpecial Paste:=xlPasteValues
Next i
End If
Sheets("Saisie").Select
'Ouvre la feuille "Saisie"
Range("C6:I12").Select
Selection.ClearContents
Range("L6:O12").Select
Selection.ClearContents
Range("C6").Select
End Sub
Excel me dit que la ligne "If Sheets("Archives").Range("B" & i).Value <> "" Then" (en gras dans le code) ne va pas (erreur 1004)
Tu as une idée?
Dans ces lignes de code, je ne sais pas exactement ce qui ne va pas
Pour résumer, tout se copie comme il faut la plage qui doit être copiée et la cellule A2) mais la recopie (code en gras) ne donne rien!
Sheets("Saisie").Select
'Sélectionne la feuille "Saisie"
Range("A2").Select
'Sélectionne la cellule A2
Application.CutCopyMode = False
Selection.Copy
'Copie la valeur
Sheets("Archives").Select
'Ouvre la feuille "Archives"
Range("A65000").End(xlUp).Offset(1).Select
'Offset = décalage
Selection.PasteSpecial Paste:=xlPasteValues
'Et la colle à la dernière ligne vide (dans ma feuille A6)
End If
Dim DernLigne As Long
DernLigne = Sheets("Archives").Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To DernLigne
'De la ligne 1 à la dernière ligne (je ne sais si j'ai bien traduit)
If Sheets("Archives").Range("B" & i).Value <> "" Then
'Si dans la feuille "Archives", la cellule Bx n'est pas vide, alors
Range("b" & i) = Range("b" & i).Offset(0, 1)
End If
Next i
Pour résumer, tout se copie comme il faut la plage qui doit être copiée et la cellule A2) mais la recopie (code en gras) ne donne rien!